我做了一个简单的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而不是给出随机答案的帮助吗?
答案 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
,如果低于阈值设置,它将自动返回默认值。您可以使用多个适配器,但是由于您对两种适配器都使用相同的逻辑类型,所以没有两个是没有道理的。
在您的问题中,您将首先得到一个没有阈值的响应,然后可能是第二个响应或没有置信度的默认值,因此有信心的将赢得胜利。