Я немного уточню комментарий @lahsuk и ответ @Melinda.
Предположим, ваш JSON (faq.json
) похож на этот микро-пример:
[
{
"name":"1",
"question":"question balbla 1",
"answer":"answer blabla 1"
},
{
"name":"2",
"question":"question bla bla bla 2",
"answer":"question bla bla 2"
},
{
"name":"3",
"question":"question blablabla 3",
"answer":"answer blablabla 3"
},
]
Кстати, я явно добавляю атрибут name
, который необязателен, но полезен после. Если у вас нет имени, вы можете использовать последовательный инкрементный номер (идентификатор) для идентификации пары Q / A.
Шаг 1: генерация сценария файлов данных (обязательный / минимальный)
Сначала давайте предположим, что Действия поиска RASA * 1017 * будут использоваться для управления нашими часто задаваемыми вопросами. В этом сценарии мы собираемся добавить в нашу модель RASA только одно намерение с именем, например faq
. Мы должны добавить строку в domain.yml
intents:
- faq
Итак, вы должны разделить JSON вопросов и ответов, создав из файлов faq.json
два типа файлов:
data/nlu.md
data/responses.md
<!-- faq data/nlu.md: contains questions as intents -->
## intent: faq/1
- question balbla 1
## intent: faq/2
- question bla bla bla 2
## intent: faq/3
- question blablabla 3
<!-- faq data/responses.md: contains answers -->
## faq/1
* faq/1
- answer blabla 1
## faq/2
* faq/2
- question bla bla 2
## faq/3
* faq/3
- answer blablabla 3
Для выполнения задачи вы можете создать скрипт на любом языке по вашему выбору, даже в bash скрипт, который принимает на вход ваш JSOn и производит 2 файла в описанном формате.
Незначительное примечание: идентификация каждой пары вопрос / ответ с числовым идентификатором c возможна, но с отстойниками. Может быть лучше дать говорящее имя каждой паре.
Шаг 2: «увеличение» данных о намерениях (необязательно / улучшение)
Первый шаг - минимальное требование. Но иметь только пример вопроса в качестве намерения не самый лучший. Пользователь может express вопрос по-разному. Хорошей идеей может быть разобрать единственный вопрос в nlu.md, приведя несколько разных примеров. Например,
<!-- faq data/nlu.md: many questions for the same answer -->
## intent: faq/1
- original question balbla 1
- another question example
- a third question example
Отступление: плюсы и минусы с использованием ответов поиска
Вы упомянули истории. Фактически, тривиальный подход к часто задаваемым вопросам состоит в том, чтобы предвидеть ответы на один поворот вопроса, без какой-либо контекстной области. Действия извлечения, вероятно, являются хорошим решением для управления "залпами" в один оборот.
Но было бы разумнее предвидеть возможную навигацию в базе знаний faq. Например, бот может попытаться проверить, был ли ответ на вопрос полезным, и, возможно, он мог бы предложить углубленные подтемы, связанные с первоначальным вопросом.
Здесь истории замечательные! Но для создания автоматических c историй из данных вам, вероятно, нужно "пометить" свои вопросы / ответы в своих вводах JSON и избегать действий поиска, предпочитая стандартный подход, разделив намерения и ответы в своем domain.yml
. По крайней мере, компромисс состоит в том, чтобы соединить действия по извлечению бота и «макропредставления», чтобы обеспечить навигацию знаний внутри диалога.
Демонстрационный ассистент RASA Sara содержит интересные / сложные истории в качестве примера умной помощи часто задаваемым вопросам, используя Rasa Core story диалоги «учись на примере». См. Также статью: Интеграция моделей поиска ответов в помощниках, созданных с помощью Rasa
Еще один минус получения ответов на поиск - это отсутствие форматирования текста в ответах, как я указывал в мой вопрос на форуме RASA * 1068 *.