chatbot: как получить ответ по умолчанию, если в данных обучения не найдено ответа - PullRequest
1 голос
/ 14 октября 2019

Я сделал простой чатбот, который может отвечать на статические запросы. Пока он работает нормально. Но проблема в том, что когда запрашивается запрос, которого нет в обучающих данных, он просто выбирает любое случайное утверждение. Я хочу, чтобы Chatbot ответил на какое-то заявление по умолчанию, например: «Я не подготовлен для этого», «Я не знаю» ... и т. Д. мой код выглядит следующим образом:

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» как «Я не знаю», «Мне нужно подумать об этом» и т. д.

Но это не работает, так как botReply уже анализируется перед переходом к оператору if.

Может кто-нибудь помочь с тем, как получить default_response, а не давать Случайные ответы?

1 Ответ

4 голосов
/ 17 октября 2019

Существует пример того, что вы делаете в документах для ChatterBot. Я бы предположил, что версия, которую вы используете, будет работать так же. Вы также можете прочитать здесь , где обсуждается способ выбора с несколькими логическими адаптерами.

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, который автоматически вернет значение по умолчанию, если подпорог установлен. Вы можете использовать несколько адаптеров, но поскольку вы используете одинаковую логику для обоих, не имеет смысла иметь два.

В вашем вопросе вы получаете ответ без порога сначала, а затем потенциально второйответ или значение по умолчанию без уверенности, так что тот с уверенностью победит.

...