Часто задаваемые вопросы по сопоставлению с RASA для большого набора данных (2000+) - PullRequest
0 голосов
/ 03 ноября 2018

RASA состоит из RASA NLU + Core, я тестировал вокруг, я понимаю некоторую часть об этом. Я пытаюсь применить его на практике, и он работает идеально.

Я планирую вывести его на следующий уровень, я хочу создать систему часто задаваемых вопросов на основе стека RASA с помощью бэкэнда tenensflow.

Я получил более 1200+ пар вопросов и ответов. Во-первых, NLU будет играть роль, чтобы понять и классифицировать намерение наряду с извлечением объекта. Во-вторых, он передает ответ json ядру RASA, где ответы будут отображаться или отвечать пользователям. Звучит просто, но когда я иду и проверяю RASA, это дает что-то другое. Обычно ядро ​​RASA будет отвечать пользователю обратно на основе предопределенной истории вместе с ==> "utter_". Предопределенная история хороша, но только для небольшого количества наборов данных. мы должны написать это вручную.

Как действовать, когда набор данных или основанный на знаниях становится больше, например 1000+ или 5000+, мы не можем вручную отобразить его. Я пытаюсь осмотреться, но пока не могу найти подходящий способ с этим справиться.

Ранее я использовал [Retrieval Model] Sklean Tfidf-vectorizer в качестве набора слов вместе с consine-similairy для сравнения и возврата наиболее похожего индекса вопроса, когда индекс найден. Ответ будет выбираться на основе индекса, но это решение не эффективен, так как смысл будет потерян и намного больше проблем.

Кто-нибудь получил такое хорошее решение для этого ??

Спасибо

1 Ответ

0 голосов
/ 09 ноября 2018

Во-первых, я хочу уточнить для фактической архитектуры:

  1. Пользователь отправляет свои сообщения в чатбот
  2. Rasa Core получает эти сообщения и передает их в RLA NLU, который распознает намерения (понимает цель пользователя) и извлекает сущности из ввода
  3. На основании распознанного намерения, сущностей и истории разговора, Rasa Core предсказывает следующее действие бота

В вашем случае (часто задаваемые вопросы, много вопросов) вы можете попробовать следующее, что приведет к относительно простым историям:

## User asks for price
* ask_location{"place": "a entity which is extracted by NLU}
  - action_utter_place

# User asks for location
* ask_price{"item": "a entity which is extracted by NLU}
  - action_utter_price

[...]

Конечно, я бы добавил немного больше путей, например если пользователь недоволен ответом или пытается общаться с вашим чатботом и т. д.

На следующем шаге я предоставлю все возможные вопросы в ваших учебных данных NLU и извлеку различные объекты, в зависимости от того, о чем идет речь. E.g.:

## intent:ask_location
- Where is the [cinema](place)
- How do I get to the next [supermarket](place)
- What's the closest [doctor](place)

## intent:ask_price
- How much is it
- What does it cost
- How much is a [ticket](item) for the [cinema](place)

Таким образом, я бы не делал одно намерение для каждого вопроса, а скорее группировал несколько вопросов в рамках одного намерения, а затем выделял сущность, которая сужает его до конкретного вопроса.

Затем вы можете использовать CMS для генерации ответов или пользовательских действий . На основе извлеченных объектов (например, place и item ) вы можете запросить базу данных и сгенерировать ответ.

...