Конвертируйте файл FAQ JSON в файлы RASA nlu и story - PullRequest
0 голосов
/ 18 марта 2020

У меня есть JSON файл с 500+ FAQ, который я хочу использовать в RASA для создания FAQ чатбота. Этот JSON файл содержит вопрос и соответствующий ответ. Мне нужно создать нуле, истории и доменные файлы в РАСА. Есть ли способ сделать это автоматически? потому что вручную займет так много времени.

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Я немного уточню комментарий @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 два типа файлов:

  1. data/nlu.md
  2. 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 *.

1 голос
/ 27 марта 2020

Это зависит от того, что вы хотите сделать с имеющимися у вас данными. Если вы хотите использовать его для обучения модели NLU, вам (или кому-либо) придется вручную пометить, к какому намерению относится каждое высказывание. Если вы хотите использовать его для обучения модели NLG, вы можете написать скрипт для форматирования ваших данных в соответствующие намерения и ответы соответственно (см. https://rasa.com/docs/rasa/core/retrieval-actions/#training -data ). Что касается историй, вам нужно будет написать их вручную, однако, если вы используете действия поиска, они могут оказаться намного проще и меньше, чем вы думаете.

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

...