💬 «Отличается умом и сообразительностью». Как правильно выбрать архитектуру чат-бота

by

Чат-боты сейчас на подъёме. Компании стремятся сократить рутину, чтобы работникам не приходилось повторять однообразный набор процедур. Программы с этим справляются куда эффективнее. Благодаря IoT боты работают не только на сайтах, но и в ресторанах, банках, торговых центрах. Мы уже и не замечаем, как алгоритмы принимают наши заказы, бронируют отели и рейсы, оказывают техническую поддержку. Конечно, если они делают это правильно.

Для чего вам нужен бот?

https://media.proglib.io/posts/2020/02/12/ca237c14b4645f78177519f3cdeb5a85.jpg

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

Выбор правильной архитектуры зависит от области применения чат-бота. Цель развлекательных чат-ботов – увеличить среднее время, затрачиваемое пользователем на общение. В то же время бизнес-бот должен решать проблему пользователя за минимальное число вопросов-ответов. То есть максимизируется не время, а число успешных результатов за единицу времени.

Разговоры с бизнес-ботами обычно занимают не более 15 минут и имеют определенную цель. Тревел-чат-боты предоставляет информацию о рейсах, отелях и турах, помогают найти и сделать заказ в соответствии с критериями пользователя. Google Assistant находит информацию, Uber bot принимает заказы на перевозку.

Перейдём к рассмотрению моделей архитектур. Важно помнить, что нет универсального варианта. Нужно использовать подход, соответствующий области применения чат-бота.

1. Намерение – контекст

https://media.proglib.io/posts/2020/02/12/7d47736e605c6d76e8d7699f4125c5e3.jpg

При разработке бота сначала нужно определиться с намерениями пользователя, которые бот будет обрабатывать. Намерение (англ. intent) – это то, что хочет сделать пользователь. Выражение (англ. entity) – запрос, которым пользователь описывает намерение.

Пусть нужно создать чат-бота, c функцией будильника. Назовем класс для обработки этого намерения ALARM_SET. Пользователь может выразить намерение различными выражениями:

Когда пользователь создает запрос, подпадающий под категорию, срабатывает ALARM_SET и чат-бот генерирует ответ.

Контекст – это сущность реального мира, вокруг которой крутится разговор. Для обработки и генерирования ответа в запросе должна быть сущность. В приведенном примере 10 утра – контекст, с которым работает будильник. Большинство чат-ботов спроектировано именно таким образом.

2. Подход, основанный на шаблонах

https://media.proglib.io/posts/2020/02/12/fb7d7052f2040aec8a67c7c95d08fda5.jpg

Самый простой способ создания бота – использование шаблонов, подход rule-based чат-ботов. Его суть – указать возможный входящий вопрос пользователя и связанный с ним ответ.

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

Пример шаблона на AIML. Тегом pattern обозначен запрос пользователя, тегом template – ответ бота.


<context>
<pattern>Какое у тебя имя?</pattern>
<template>Мое имя $(‘QUERY_RESULT’)</template>
</context>


Эвристика выбора правильного ответа может быть спроектирована различными способами – как классическим if-else, так и по модели машинного обучения.

Для ответов, построенных по шаблонам, часто используют опенсорсный движок ChatScript. Его удобно встраивать в пайплайн обработки естественного языка с речевыми тегами и синонимами, что повышает точность при сопоставлении шаблонов и пользовательского ввода. Библиотека не использует алгоритмы машинного обучения и сторонние API, но это можно настроить. Узнать об основных концепциях ChatScript и посмотреть пример построения чат-бота на ChatScript и JavaScript можно в этой статье (англ.).

3. Классификация интентов

https://media.proglib.io/posts/2020/02/12/ef688d4a84ff6a0566026a4bda3139b6.jpg

В узконаправленных областях шаблонная архитектура – идеальный выбор. Но как только от бота требуется что-то посложнее, нельзя использовать шаблонный подход. Иначе придется кодить каждое условие, на которое мог бы ответить бот, а такой код трудно поддерживать: начнутся проблемы с пересекающимися паттернами, снизится точность.

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

Машинное обучение применяется совместно с алгоритмом классификации для поиска интентов в естественном языке. Такой алгоритм может быть построен с использованием библиотек машинного обучения, например scikit-learn, Keras (англ.), Tensorflow или PyTorch. Другой вариант – использовать один из облачных API: wit.ai, api.ai или Microsoft LUIS. Облачные API платные, но предоставляют готовый функционал, поэтому разработка будет быстрее и проще. Самостоятельная разработка сложнее и займет больше времени, но результат будет проще кастомизировать и расширять.

Способы создания ответа

https://media.proglib.io/posts/2020/02/12/8d4e0ebb589083d9b48a51c6289198aa.jpeg

Сопоставление шаблонов, классификация намерений и извлечение контекста помогают понять сообщение пользователя. Теперь возникает вопрос: «Как сгенерировать ответ?»

Простейший способ – поместить некоторые значения в переменную, а потом обратиться в БД или к стороннему API.


В: Сколько лет Илону Маску?
О: Возраст $(‘Entity’) составляет $(‘Query result’)


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

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

  1. Генеративное моделирование.
  2. Моделирование на основе поиска.
https://media.proglib.io/posts/2020/02/12/ff5dc409bee2c559e5a7e0544326eda5.png
Как работает бот при использовании моделирования на основе поиска

Моделирование на основе поиска проще строить, оно обеспечивает более предсказуемые результаты. При таком моделировании чат-бот использует интенты и контекст разговора для выбора наилучшего ответа из предопределенного статического списка сообщений. Такого бота можно создать с помощью библиотек TensorFlow (англ.) или NLTK (англ.).

Заключение

Рынок чат-ботов растет в геометрической прогрессии, появляются новые, более сложные модели архитектур, которые позволяют делать более сложных и «умных» ботов. Мы кратко рассмотрели основные подходы к построению чат-ботов. Надеемся, что этот материал помог определиться с архитектурой вашего бота.

Если вам интересны чат-боты, обратите внимание на другие наши публикации:

Источники