Как перенести существующий помощник Google DialogFlow в Rasa

Ряд пользователей Rasa перешли с размещенных платформ разработки чат-ботов, таких как LUIS, Wit.ai, или с той, с которой, как мы видим, мигрирует самый высокий процент пользователей, - DialogFlow (ранее Api.ai). Можно с уверенностью сказать, что мы видим тенденцию к тому, что все больше и больше разработчиков начинают создавать своих помощников, используя размещенные платформы, такие как DialogFlow, но в конечном итоге они сталкиваются с ограничениями разработки и принимают решение перейти на решение с открытым исходным кодом - Rasa.

Вот основные причины, по которым разработчики предпочитают Rasa размещенным платформам:

Это открытый исходный код.

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

Управление диалогами на основе машинного обучения.

  • Помощник использует машинное обучение, чтобы изучать закономерности из реальных разговоров. Это означает отсутствие предопределенных правил и конечных автоматов.
  • Для начала вам не нужны большие объемы обучающих данных. Вы можете создать масштабируемый помощник для начальной загрузки из очень небольшой выборки обучающих данных.

Переход с DialogFlow на Rasa - один из самых частых запросов со стороны сообщества Rasa. В этом посте будет описан пошаговый процесс миграции существующего помощника DialogFlow в Rasa.

Вы можете найти код примера помощника, использованного в этом руководстве, здесь.

Контур

  1. Помощник DialogFlow
  2. Шаг 1. Экспорт помощника DialogFlow
  3. Шаг 2: Обучение модели Rasa NLU с использованием экспортированных данных
  4. Шаг 3. Перенос контекстов и обучение модели Rasa Core
  5. Шаг 4: Ваш помощник DialogFlow теперь работает на Rasa. Что дальше?
  6. Полезные ресурсы

Помощник DialogFlow

Как мы уже говорили, цель этого поста - показать пошаговый процесс миграции существующего помощника DialogFlow в Rasa.

Чтобы проиллюстрировать процесс, мы собираемся использовать пример - специально созданный помощник поиска под названием «place_finder», способный искать такие места, как рестораны, магазины, банки в пределах указанного пользователем радиуса, и предоставлять подробную информацию о возвращаемых данных. адрес, рейтинг и часы работы заведения. Ассистент получает все эти данные, используя веб-перехватчик для вызовов API к Google Places API.

Ниже приведен пример разговора с помощником place_finder:

Если вы хотите воспроизвести это руководство, вы можете найти файлы данных и код веб-перехватчика помощника place_finder в каталоге dialogflow-assistant репозитория этого руководства. Кроме того, вы можете следовать этому руководству, используя своего собственного помощника, и настроить шаги, указанные ниже, в соответствии с вашим случаем.

Какой бы вариант вы ни выбрали, на этом этапе у вас должен быть помощник DialogFlow - теперь пора перенести его на Rasa!

Совет: если вы хотите поиграть с помощником place_finder, вам следует получить ключ Google Places API и поместить его в файл ga_credentials.yml this repositor y.

Шаг 1. Экспорт DialogFlow Assistant

Мы рекомендуем начать с миграции NLU-части помощника DialogFlow.

Чтобы перенести его в Rasa, все, что вам нужно сделать, это экспортировать файлы проекта и использовать их для обучения модели Rasa NLU - никаких данных или изменений форматирования не требуется. Он разработан так, чтобы быть максимально простым. Вот как.

  1. Вы можете экспортировать данные проекта, перейдя на вкладку настроек вашего агента и выбрав вкладку «Экспорт и импорт».

2. На вкладке «Экспорт и импорт» выберите вариант «Экспортировать как ZIP». Это экспортирует данные проекта в виде zip-файла и загрузит его на локальный компьютер.

3. После загрузки вы можете распаковать пакет и просмотреть файлы внутри. Каталог проекта DialogFlow состоит из следующих файлов и каталогов:

  • объекты - каталог, содержащий файлы json с объектами, которые ваш помощник DialogFlow обучил извлекать.
  • намерения - каталог, содержащий json-файлы намерений, которые ваш помощник DialogFlow обучил понимать.
  • agent.json - файл, содержащий конфигурацию помощника DialogFlow.
  • package.json - файл, содержащий информацию о программном обеспечении, используемом для создания помощника.

Если вы будете следовать этому руководству шаг за шагом, вы найдете экспортированные файлы данных DialogFlow в каталоге rasa-assistant / data / place_finder репозитория.

Вы можете использовать эти файлы для обучения модели Rasa NLU. Вам нужно только запустить сценарий преобразования, чтобы преобразовать экспортированные данные в формат, совместимый с Rasa, определить файл конфигурации конвейера NLU и передать его сценарию поезда Rasa NLU. Об этом позаботятся на шаге 2 ниже. Ознакомьтесь со следующим шагом этого руководства, чтобы увидеть подробные инструкции.

Шаг 2: Обучение модели Rasa NLU с использованием экспортированных данных

Rasa NLU позволяет полностью настраивать модели. Перед обучением модели NLU необходимо определить конфигурацию конвейера. Конвейер обработки определяет, как анализируются обучающие примеры и как извлекаются функции. Конфигурация должна быть сохранена как файл .yml в каталоге вашего проекта. Ниже приведен пример конфигурации конвейера, который вы можете использовать:

Файл: rasa-assistant / config.yml

language: "en" 
language: "en"
pipeline:
- name: "SpacyNLP"                  
- name: "SpacyTokenizer"   
- name: "CRFEntityExtractor"   
- name: "SpacyFeaturizer"       
- name: "SklearnIntentClassifier" 
- name: DucklingHTTPExtractor        
  url: http://localhost:8000
  dimensions:
    - number

После того, как вы определите конвейер, пора обучить модель:

  1. Сначала преобразуйте экспортированные данные в формат, совместимый с Rasa, выполнив команду ниже. Эта функция возьмет экспортированные файлы данных, преобразует их в формат md, совместимый с Rasa, и запишет их в файл data / nlu.md:
rasa data convert nlu --data data/place_finder --out data/nlu.md --format md

2. Для обучения модели используйте следующую команду, которая вызывает функцию Rasa NLU train, загружает конфигурацию конвейера и файлы данных обучения и сохраняет обученную модель в каталоге моделей:

rasa train nlu 

Вы можете протестировать обученную модель, запустив модель NLU в командной строке и протестировав ее на различных входных данных. Для этого выполните:

rasa shell nlu

Ответ модели Rasa NLU включает результаты классификации намерений и извлечения сущностей. Например, сообщение «Привет» было классифицировано как намерение «Приветственное намерение по умолчанию» с достоверностью 0,83. Вот полный ответ, возвращаемый моделью NLU:

{  
   "intent":{  
      "name":"Default Welcome Intent",
      "confidence":0.8342492802420313
   },
   "entities":[  

   ],
   "intent_ranking":[  
      {  
         "name":"Default Welcome Intent",
         "confidence":0.8342492802420313
      },
      {  
         "name":"thanks",
         "confidence":0.09805256693160122
      },
      {  
         "name":"goodbye",
         "confidence":0.05392708191432759
      },
      {  
         "name":"address",
         "confidence":0.003986386948676723
      },
      {  
         "name":"place_search",
         "confidence":0.0037102872949153686
      },
      {  
         "name":"rating",
         "confidence":0.003059348479049656
      },
      {  
         "name":"opening_hours",
         "confidence":0.0030150481893980153
      }
   ],
   "text":"Hello"
}

Вот и все! Вы только что перенесли NLU-часть помощника DialogFlow в Rasa!

Шаг 3. Перенос контекстов и обучение модели Rasa Core

Примечание. Если ваш пользовательский помощник DialogFlow не использует контексты или веб-перехватчики, вы можете пропустить эту часть руководства и перейти к шагу 4 этого руководства.

Если это так, выполните следующие действия.

  1. Чтобы перенести оставшуюся часть помощника - обработку контекста и настраиваемые действия - вам потребуются данные для обучения. DialogFlow выполняет управление диалогом с помощью концепции «контекстов», в то время как Rasa использует машинное обучение, чтобы предсказать, какие действия должен совершить помощник в конкретном состоянии разговора, на основе предыдущих действий и извлеченных деталей. Это означает, что для обучения диалоговой модели Раса вам потребуются некоторые обучающие данные в виде историй. Поскольку управление диалогами DialogFlow основано на правилах, вы не можете экспортировать какие-либо обучающие данные, которые можно было бы использовать напрямую для обучения диалоговой модели Rasa. Хорошая новость заключается в том, что у вас есть доступ к истории разговоров в DialogFlow, и вы можете использовать ее в качестве основы для создания обучающих данных для модели Rasa Core. Вот пример разговора на DialogFlow:

Чтобы преобразовать этот разговор в учебную историю Rasa Core, вы должны преобразовать вводимые пользователем данные в соответствующие намерения и сущности, в то время как ответы агента должны быть выражены в виде действий. Вот как вышеприведенная беседа будет выглядеть как рассказ Раса:

Файл: rasa-assistant / data / stories.md

## story_01 
  * Default Welcome Intent 
    utter_greet 
  * place_search{“query”:”restaurant”, “radius”:”600”}
    action_place_search 
    slots{“place_match”:”one”} 
    slots{“address”:”Ars Vini in Sredzkistraße 27, Hagenauer Straße  
          1, Berlin”} 
    slots{“rating”:”4.4”} 
    slots{“opening_hours”:”true”} 
  * opening_hours 
    utter_opening_hours 
  * rating 
    utter_rating

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

2. Создайте домен своего помощника, который определяет все намерения, сущности, слоты, шаблоны и действия, с которыми помощник должен быть знаком. Например, шаблоны помощника place_finder выглядят так:

Файл: domain.yml

templates:
  utter_greet: 
    — text: “Hello! How can I help?” 
  utter_goodbye: 
    — text: “Talk to you later!” 
  utter_thanks: 
    — text: “You are very welcome.” 
  utter_what_radius: 
    — text: “Within what radius?” 
  utter_rating: 
    — text: “The rating is {rating}.” 
  utter_address: 
    — text: “The address is {address}.” 
  utter_opening_hours: 
    — text: “The place is currently {opening_hours}.” 
  utter_no_results: 
    — text: “Sorry, I couldn’t find anything.”

Совет. Все намерения и сущности, определенные в файле домена, должны соответствовать именам, определенным в обучающих примерах.

3. Определите настраиваемые действия. Хотя мы можем писать простые текстовые ответы внутри файла домена (точно так же, как во фрагменте файла домена выше), более сложные действия, такие как вызов API или подключение к базе данных для получения некоторых данных, должны быть заключены в класс настраиваемых действий. В DialogFlow у place_finder был веб-перехватчик для извлечения данных из Google Places API, поэтому для переноса его в Rasa вы должны превратить его в настраиваемый класс действий, как показано ниже:

Этот класс присваивает имя этому настраиваемому действию, выполняет вызов API, извлекает запрошенные данные, генерирует ответ, который должен быть отправлен обратно пользователю, и устанавливает детали, которые должны храниться на протяжении всего разговора в виде слотов.

4. Это все, что вам нужно для обучения модели Rasa Core, которая предсказывает, как помощник должен реагировать на действия пользователя. Пришло время его потренировать!

Вы можете обучить его, используя следующую команду, которая обучит как модели NLU, так и диалоговые модели и сохранит их в виде одного сжатого файла в каталоге models: ‹br/›

rasa train

5. И вот оно: вы успешно перенесли помощника из DialogFlow в Rasa! Теперь вы можете протестировать его локально. Выполнив команду ниже, вы запустите сервер настраиваемых действий:

rasa run actions

Теперь вы можете загрузить агент с помощью приведенной ниже команды, которая загрузит модели Rasa NLU и Rasa Core и запустит в консоли помощника для общения в чате:

rasa shell

Примечание. Поскольку мы используем duckling_http в качестве одного из компонентов конвейера, не забудьте запустить для него docker сервер докеров, запустив:

docker run -p 8000: 8000 rasa / duckling

Шаг 4: Ваш помощник DialogFlow теперь работает на Rasa. Что дальше?

Нет предела тому, что вы можете делать с помощниками на основе Раса. Вы можете настраивать модели, интегрировать дополнительные компоненты или подключать их к внешнему миру с помощью коннекторов самых популярных платформ обмена сообщениями. Вы даже можете подключить их к другим классным фреймворкам и инструментам, чтобы было еще веселее!

Если вы перенесли своего помощника на Rasa, мы будем рады узнать о вашем опыте! Присоединяйтесь к Форуму сообщества Rasa и дайте нам знать!

Полезные ресурсы

Первоначально опубликовано на blog.rasa.com 4 сентября 2018 г.