chatbot:在训练数据中未找到响应时如何获得默认响应

时间:2019-10-14 17:54:16

标签: python chatbot chatterbot

我做了一个简单的Chatbot,可以回答静态查询。到目前为止,一切正常,但是问题是当查询不在训练数据中的查询时,它只是在选择任何随机语句。 我希望Chatbot回答一些默认的语句,例如“我没有为此受过训练”,“我不知道” ..etc。 我的代码如下:

bot = ChatBot(
    "ChatBot",
    logic_adapters=[
        {
            'import_path': 'chatterbot.logic.BestMatch'
        },
        {
            'import_path': 'chatterbot.logic.BestMatch',
            'threshold': 0.65,
            'default_response': 'default_value'
        }
    ],
    response_selection_method=get_most_frequent_response,
    input_adapter="chatterbot.input.VariableInputTypeAdapter",
    output_adapter="chatterbot.output.OutputAdapter",
    storage_adapter="chatterbot.storage.SQLStorageAdapter",
    database="db.sqlite3"
)

def get_bot_response():
    userText = request.args.get('msg')
    botReply = str(bot.get_response(userText))
    if botReply is "default_value":
        botReply = str(bot.get_response('default_response'))

在我的训练数据中,我已将“ default_response”的答案设置为“我不知道”,“我需要考虑一下”等。

但是,此操作不起作用,因为在进入if语句之前已经对botReply进行了解析。

有人可以提供有关如何获得default_response而不是给出随机答案的帮助吗?

1 个答案:

答案 0 :(得分:4)

docs中,有一个关于ChatterBot的示例。我认为您使用的版本将运行相同的版本。您还可以阅读here,其中讨论了如何使用多个逻辑适配器进行选择。

bot = ChatBot(
    "ChatBot",
    logic_adapters=[
        {
            'import_path': 'chatterbot.logic.BestMatch',
            'threshold': 0.65,
            'default_response': 'default_value'
        }
    ],
    response_selection_method=get_most_frequent_response,
    input_adapter="chatterbot.input.VariableInputTypeAdapter",
    output_adapter="chatterbot.output.OutputAdapter",
    storage_adapter="chatterbot.storage.SQLStorageAdapter",
    database="db.sqlite3"
)

def get_bot_response():
    userText = request.args.get('msg')
    botReply = str(bot.get_response(userText))
    if botReply is "default_value":
        botReply = str(bot.get_response('default_response'))

您只需要使用一个logic_adapter,如果低于阈值设置,它将自动返回默认值。您可以使用多个适配器,但是由于您对两种适配器都使用相同的逻辑类型,所以没有两个是没有道理的。

在您的问题中,您将首先得到一个没有阈值的响应,然后可能是第二个响应或没有置信度的默认值,因此有信心的将赢得胜利。