How logic adapters select a response

A typical logic adapter designed to return a response to an input statement will use two main steps to do this. The first step involves searching the database for a known statement that matches or closely matches the input statement. Once a match is selected, the second step involves selecting a known response to the selected match. Frequently, there will be a number of existing statements that are responses to the known match.

To help with the selection of the response, several methods are built into ChatterBot for selecting a response from the available options.

Response selection methods

Response selection methods determines which response should be used in the event that multiple responses are generated within a logic adapter.

chatterbot.response_selection.get_first_response(input_statement, response_list, storage=None)[source]
Parameters:
  • input_statement (Statement) – A statement, that closely matches an input to the chat bot.
  • response_list (list) – A list of statement options to choose a response from.
  • storage (StorageAdapter) – An instance of a storage adapter to allow the response selection method to access other statements if needed.
Returns:

Return the first statement in the response list.

Return type:

Statement

chatterbot.response_selection.get_most_frequent_response(input_statement, response_list, storage=None)[source]
Parameters:
  • input_statement (Statement) – A statement, that closely matches an input to the chat bot.
  • response_list (list) – A list of statement options to choose a response from.
  • storage (StorageAdapter) – An instance of a storage adapter to allow the response selection method to access other statements if needed.
Returns:

The response statement with the greatest number of occurrences.

Return type:

Statement

chatterbot.response_selection.get_random_response(input_statement, response_list, storage=None)[source]
Parameters:
  • input_statement (Statement) – A statement, that closely matches an input to the chat bot.
  • response_list (list) – A list of statement options to choose a response from.
  • storage (StorageAdapter) – An instance of a storage adapter to allow the response selection method to access other statements if needed.
Returns:

Choose a random response from the selection.

Return type:

Statement

Use your own response selection method

You can create your own response selection method and use it as long as the function takes two parameters (a statements and a list of statements). The method must return a statement.

def select_response(statement, statement_list, storage=None):

    # Your selection logic

    return selected_statement

Setting the response selection method

To set the response selection method for your chat bot, you will need to pass the response_selection_method parameter to your chat bot when you initialize it. An example of this is shown below.

from chatterbot import ChatBot
from chatterbot.response_selection import get_most_frequent_response

chatbot = ChatBot(
    # ...
    response_selection_method=get_most_frequent_response
)

Response selection in logic adapters

When a logic adapter is initialized, the response selection method parameter that was passed to it can be called using self.select_response as shown below.

response = self.select_response(
    input_statement,
    list_of_response_options,
    self.chatbot.storage
)

Selecting a response from multiple logic adapters

The generate_response method is used to select a single response from the responses returned by all of the logic adapters that the chat bot has been configured to use. Each response returned by the logic adapters includes a confidence score that indicates the likeliness that the returned statement is a valid response to the input.

Response selection

The generate_response will return the response statement that has the greatest confidence score. The only exception to this is a case where multiple logic adapters return the same statement and therefore agree on that response.

For this example, consider a scenario where multiple logic adapters are being used. Assume the following results were returned by a chat bot’s logic adapters.

Confidence Statement
0.2 Good morning
0.5 Good morning
0.7 Good night

In this case, two of the logic adapters have generated the same result. When multiple logic adapters come to the same conclusion, that statement is given priority over another response with a possibly higher confidence score. The fact that the multiple adapters agreed on a response is a significant indicator that a particular statement has a greater probability of being a more accurate response to the input.

When multiple adapters agree on a response, the greatest confidence score that was generated for that response will be returned with it.