Как создать API NLU с открытым исходным кодом с помощью Rasa

У вас есть доступ к исключительному инструменту понимания естественного языка

Вступление

Существует много ажиотажа в отношении чат-ботов и разговорного ИИ в целом.

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

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

Последующие дизайнерские и архитектурные решения будут сложнее, когда система будет установлена.

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

Но более того, это структура, которая может развиваться и поддерживать полноценное корпоративное решение.

Начиная с NLU API, вы заложите хорошую основу для превращения решения в полноценный диалоговый интерфейс.

NLU и ядро

Есть несколько платформ чат-ботов, которые имеют четкое разделение между частью NLU и частями управления диалогами и интеграции. Это позволяет разрабатывать автономный NLU API.

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

Формат данных NLU

Есть исключительно хорошие видео от Rasa о том, как устанавливать в различных средах.

Здесь вы можете найти видео Рэйчел для установки Widows 10.

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

Но вернемся к созданию NLU API…

Приведенные ниже примеры, используемые для обучения NLU, основаны на проекте GitHub.

Учебный файл NLU имеет сущности, аннотированные внутри намерений. Следовательно, мы видим здоровую тенденцию слияния намерений и сущностей.

Намерения и сущности находятся в текстовом файле в формате уценки.

Намерения и сущности

Простые примеры

Самый простой пример - это просто намерение, определенное несколькими примерами без каких-либо сущностей. Ниже приведено намерение check_balance с несколькими примерами.

## intent:check_balance
- How much money is on my account?
- what's my balance?
- what's my current balance?
- What's left on that account?
- How much do I have on that account?

Давайте добавим объект типа account_type с примером кредитной карты.

- what's my [credit](account_type) account balance?

Результат:

Регулярные выражения

Вот как определяются регулярные выражения в файле nlu.md

## regex:accountNumber
- [0-9]{9}
## intent:inform_accountNumber
- my account number is [123454434](accountNumber)
- my account number is [334564343](accountNumber)
- my account number is [940564343](accountNumber)

И на выходе…

Нормализовать данные

Данные, захваченные в сущности, можно нормализовать. Сущность, связанная со счетами кредитных карт, фиксируется как сущность account_type, но всегда со значением кредит.

{"text":"Pay off my [credit card]{"entity": "account_type", "value": "credit"}, please"}

И результат…

Здесь вы видите, что ввод кредитной карты нормализован до значения кредита в сущности account_type.

Модели

Каждый раз при обучении модели в папке models создается новый файл модели. Это позволяет вам переключаться между моделями вашего API, возвращаться к предыдущим версиям и т. Д.

Создание API

С помощью одной команды API запускается на порту 5005. Но сначала убедитесь, что вы активировали свою виртуальную среду anaconda с помощью:

conda activate rasa2

Моя виртуальная среда называется rasa2.

Запускаем API:

rasa run --enable-api -m models/nlu-20200917-225530.tar.gz

Вы можете получить доступ к API по URL-адресу

http://localhost:5005/model/parse

Взаимодействуйте с вашим API через клиента типа Почтальон.

Заключение

При определении данных обучения доступны и другие функции. Упомянутые здесь функции являются основными, ИМО. В следующей статье я хочу взглянуть на структуры, доступные сущностям.

Подробнее здесь