Как создать 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 через клиента типа Почтальон.
Заключение
При определении данных обучения доступны и другие функции. Упомянутые здесь функции являются основными, ИМО. В следующей статье я хочу взглянуть на структуры, доступные сущностям.