?

Log in

No account? Create an account

Компьютерная лингвистика

Новостная лента www.solarix.ru

Previous Entry Share Next Entry
Мысли по поводу интеграции движка чатбота с RASA
kelijah
В рамках рабочей задачи я сделал кастомный компонент для RASA, который выполняет классификацию интентов для фразы с помощью нейросетевой модели, работающей поверх русского BERT. В целом, все достаточно просто, если знать про некоторые технические нюансы. Например, не стоит делать ленивую загрузку модели в методе process, лучше это делать в конструкторе. И надо аккуратно относится к исключениям в process, иначе pipeline RASA склонен где-то зависать (там все на корутинах, как я понимаю).

По смутным ощущениям, этот классификатор работает лучше, чем штатная модель SklearnIntentClassifier с добавкой символьных шинглов (CountVectorsFeaturizer), или чем EmbeddingIntentClassifier. Хотя намного тяжелее по памяти, конечно.

Итак, теперь у нас есть следующие возможности интеграции с RASA, проверенные своими руками и примерами кода:

1) Кастомные обработчики событий (Custom Actions). Каждый такой обработчик оформляется в виде класса и может делать всякие полезные вещи, основываясь на свойствах сообщения. В самом простом варианте обработчик может вернуть текст ответной реплики. Обработчики работают в самом конце пайплайна, то есть получают уже обработанное сообщение с определенным интентом, выделенными entities и т.д.

2) Кастомные компоненты для пайплайна (Custom Components). Работают "внутри" пайплайна и могут выставлять какие-то признаки для обрабатываемого сообщения, например значения entities, модифицировать текст сообщения и т.д.

Сейчас мне кажется, что для интеграция с движком чатбота будет самой эффективной во втором случае, так как через кастомный компонент проходят все сообщения. В первом варианте обработчик action'а получает только те сообщения, на интенты которых он подписан в рамках историй.