31
правка
Изменения
Fix
* могие компании заинтересованы в анализе и автоматизации общения с клиентами <ref>[https://platforma-online.ru/media/detail/issledovanie-rossiyskogo-rynka-chat-botov/ Юлия Фуколова, Исследование российского рынка чат-ботов]</ref>,
* растет число «умных» бытовых предметов, которыми можно управлять <ref>[https://iot-analytics.com/state-of-the-iot-update-q1-q2-2018-number-of-iot-devices-now-7b/ Knud Lasse Lueth, State of the IoT 2018: Number of IoT devices now at 7B – Market accelerating]</ref>.
Наиболее часто диалоговые системы используют в продажах, саппорте и маркетинге. Они используются для выполнения рутинных операций, которые можно свести к конкретному алгоритму, ищут и агрегируют данные, распространяют информацию.
== Определение ==
=== Системы с генерацией ответов ===
Системы с генерацией ответов (англ. generation-based) генерируют ответ пословно. Такие системы более гибкие, но фильтровать их сложней. Часто для генерации диалога используются seq2seq-модели, другими вариантами являются расширенный [[Вариационный автокодировщик | вариационный автокодировщик]] или [[Generative Adversarial Nets (GAN) | генеративно-состязательная сеть]]. Высокую производительность при генерации диалогов позволяют получить предобученные языковые модели на основе Трансформера.
== Существующие диалоговые системы ==
'''[https://arxiv.org/pdf/1801.05032.pdf AliMe Assist]''' {{---}} помощник для пользователей магазина AliExpress. Его архитектура представлена на рисунке 5. Серым цветом выделены блоки, где используются методы машинного обучения. Система состоит из 3 подсистем: поиск информации или решения, выполнение задачи для клиента и простое общение в чате. Для извлечения намерения вопрос <tex> q </tex> проверяется на соответствие шаблонам при помощи [[Бор | бора]] (англ. trie-based pattern matching). Если соответствие найти не удалось, то вопрос передается классификатору, построенному на [[Сверточные нейронные сети | сверточной сети]]. На вход сети подаются вектора слов вопроса и семантических тэгов, которые относятся к нему и контексту (предыдущему вопросу). Для получения векторного представления используется [[Векторное представление слов#fastText | FastText]]. Выбор CNN-сети вместо RNN основан на том, что первая сеть учитывает контекстную информацию слов (слова перед и после текущего слова) и работает быстрей. Точность классификации 40 намерений составляет 89,91%.
[[Файл : Ds-alime.png | 350px | thumb | right |
Рисунок 5<ref>[https://arxiv.org/pdf/1801.05032.pdf Feng-Lin Li, Minghui Qiu, AliMe Assist: An Intelligent Assistant for Creating an Innovative E-commerce Experience]</ref>. Архитектура AliMe Assist]]
'''[https://ru.wikipedia.org/wiki/%D0%A1%D1%8F%D0%BE%D0%B0%D0%B9%D1%81 Xiaolce]''' {{---}} чат-бот, развиваемый китайским отделением Microsoft. Состоит из множества навыков, которые делятся на эмоциональные и рациональные. Имеется навык для комменирования картинок или сочинения по ним стихов. Сценарии диалога делятся на персональные и социальные. Бот старается установить эмоциональную связь с пользователем, чтобы продлить диалог с ним.
'''[https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D1%80%D1%82%D0%B0%D0%BD%D0%B0_(%D0%B3%D0%BE%D0%BB%D0%BE%D1%81%D0%BE%D0%B2%D0%BE%D0%B9_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%BD%D0%B8%D0%BA) Microsoft Cortana]''' {{---}} виртуальный голосовой помощник. Состоит из можества навыков, натренированных на конкретные задачи. В отличие от классической архитектуры, где выбирается подходящий навык, здесь текст проходит через все навыки, после чего выбирается подходящий ответ. Также каждый Каждый навык использует контекст (результаты обработки предыдущей фразы от всех навыков), сформированный всеми навыками. При таком подходе требуется больше ресурсов, но он позволяет существенно увеличить точность. Схематично процесс обработки фразы пользователя представлен на рисунке 6.
[[Файл : Ds-cortana-arch.png | 350px 600px | thumb | right |
Рисунок 6<ref>[https://www.microsoft.com/en-us/research/wp-content/uploads/2016/12/CortanaLUDialog-FromSLTproceedings.pdf R. Sarikaya, P. A. Crook, AN OVERVIEW OF END–TO–END LANGUAGE UNDERSTANDING AND DIALOG MANAGEMENT FOR PERSONAL DIGITAL ASSISTANTS]</ref>. Архитектура Кортаны]]
[https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B8%D1%81%D0%B0_(%D0%B3%D0%BE%D0%BB%D0%BE%D1%81%D0%BE%D0%B2%D0%BE%D0%B9_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%BD%D0%B8%D0%BA)#%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0_%D0%B8_%D1%84%D0%BE%D1%80%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D0%B0 '''Яндекс Алиса'''] {{---}} виртуальный голосовой помощник от компании Яндекс. Относится к классу чат-ориентированных систем, но имеет множество навыков, каждый из которых может быть представлен в виде целеориентированной системы. Алиса запускает навык по его активационной фразе. Фактически навык является веб-сервисом, который реализует DM и NLG модули классической архитектуры. При помщи платформы [https://dialogs.yandex.ru/developer Яндекс Диалоги] разработчики могут создавать свои навыки и монетизировать их, но перед публикацией навык проходит обязательную модерацию. Распознавание голоса выполняется сервисом [https://cloud.yandex.ru/services/speechkit SpeechKit].
[https://ru.wikipedia.org/wiki/Siri '''Сири'''] {{---}} виртуальный помощник компании Apple. Является неотъемлемой частью iOS и доступна для большинства устройств, выпускаемых компанией. Поддерживает широкий спектр пользовательских команд, включая выполнение действий с телефоном, проверку основной информации, планирование событий и напоминаний, управление настройками устройства, поиск в интернете, взаимодействие с приложениями. Приспосабливается к каждому пользователю индивидуально, изучая его предпочтения в течение долгого времени.
== Фреймворки ==
Существует множество фреймворков, которые значительно упрощают построение диалоговых систем. Рассмотрим самые популярные из них.
=== DeepPavlov.ai ===
Основывается на таких библиотеках как [https://www.tensorflow.org/ TensorFlow], [https://keras.io/ Keras ] и [https://pytorch.org/ PyTorch]. Включает множество компонентов, каждый из которых решает отдельную задачу диалоговых систем. Имеется модель для распознавания именованных сущностей, намерений, обработки истории диалога, анализа поведения пользователя и другие. Поведение агента диалоговой системы определяется набором навыков, каждый из которых строится из модулей. Когда агент получает фразу пользователя, специальный менеджер решает, какому навыку передать ее для обработки. Схема ядра представлена на рисунке 7. Пример использования приведен на рисунке 8.языке Python:
'''from''' deeppavlov.agents.default_agent.default_agent '''import''' DefaultAgent '''from''' deeppavlov.skills.pattern_matching_skill '''import''' PatternMatchingSkill '''from''' deeppavlov.agents.processors.highest_confidence_selector '''import''' HighestConfidenceSelector <font color="grey">''# Создание сконфигурированных навыков''</font> hello = PatternMatchingSkill(responses=['Hello wordl! :)'], patterns=[Файл 'hi', 'hello', 'good day']) bye = PatternMatchingSkill(['Goodbye word! : Ds-dp-arch(', 'See you around.png | 300px | thumb | right |'], ['bye', 'chao', 'see you']) fallback = PatternMatchingSkill(['I don\'t understand, sorry :/', 'I can say "Helo world!" 8)']) <font color="grey">''# Создание менеджера, который выбирает наиболее вероятный навык''</font> skill_manager = HighestConfidenceSelector() <font color="grey">''# Создание агента''</font>Рисунок 7 HelloBot = Agent([hello, bye, fallback], skills_selector=skill_manager) <font color="grey">''# Тестирование''</font> '''print'''(HelloBot(['Hello!', 'Boo. Схема ядра DeepPavlov]..', 'Bye.']))
=== Rasa ===
Архитектура схематично изображена на рисунке 98. Для передачи сообщений по каналу используются ''коннекторы''. Имеются коннекторы для [https://rasa.com/docs/rasa/connectors/telegram Телеграма], [https://rasa.com/docs/rasa/connectors/your-own-website собственного веб-сайта], [https://rasa.com/docs/rasa/connectors/slack Slack], можно создавать [https://rasa.com/docs/rasa/connectors/custom-connectors свои ] коннекторы.
[[Файл : Ds-rasa.png | 300px 500px | thumb | right |[https://rasa.com/docs/rasa/img/architecture.png Рисунок 98]. Архитектура Rasa]]
Данные для тренировки хранятся в формате YAML <ref>[https://rasa.com/docs/rasa/training-data-format Формат тренировочных данных в Rasa]</ref>. Имеется несколько типов тренировочных данных. Данные для NLU содержат намерения и примеры к ним. Опционально в примерах можно выделить тип сущности и ее значение или указать сентимент (настроение пользователя). Ответы бота (responses) разбиваются на именованные группы, откуда итоговый ответ выбирается случайно. Истории (stories) используются для выявления шаблонов диалога, чтобы система могла правильно реагировать на последовательности фраз пользователя, которые не были описаны явно. Каждая история описывает последовательность шагов. Шагом может быть намерение, которым определяется фраза пользователя, или действие, которым может быть группа ответов бота. Имеется возможность описать форму, чтобы пользователь мог ввести данные (например, электронную почту), и использовать ее в качестве действия. Правила похожи на истории, но они определяют последовательность шагов более строго, без применения машинного обучения.
== Оценка качества модели ==
Лучшие модели по качеству отслеживания состояния диалога (англ. dialogue state tracking):
{| class="wikitable"
|-
! Модель !! Точность связок !! Точность слотов
|-
| CHAN || 52.68 || 97.69
|-
| SAS || 51.03 || 97.20
|-
| MERET || 50.91 || 97.07
|}
Качество определяется по двум метрикам: ''точность слотов'' (англ. slot accuracy) {{---}} запрошенный слот верный, и ''точность связок'' (англ. joint goal accuracy) {{---}} каждый слот в стостоянии верный. Для оценки по данному криетрию обычно используется датасет [http://dialogue.mi.eng.cam.ac.uk/index.php/corpus/ MultiWOZ].
Лучшие модели по качеству заполнения слотов:
{| class="wikitable"
|-
! Модель !! [https://en.wikipedia.org/wiki/F-score F1]
|-
| Enc-dec + BERT || 97.17
|-
| Stack-Propagation + BERT || 97.0
|-
| Joint BERT || 97.0
|}
Датасет: [https://github.com/sonos/nlu-benchmark/tree/master/2017-06-custom-intent-engines Snips].
Лучшие модели по качеству определения намерений:
{| class="wikitable"
|-
! Модель !! [https://en.wikipedia.org/wiki/Accuracy_and_precision Точность (accuracy)]
|-
| ELMo + BLSTM-CRF || 99.29
|-
| Enc-dec + ELMo || 99.14
|-
| Stack-Propagation + BERT || 99.0
|}
Датасет: Snips.
== См. также ==
* [https://habr.com/ru/company/abbyy/blog/449514/ NLP. Основы. Техники. Саморазвитие. Часть 2: NER]
* [https://www.baeldung.com/java-pattern-matching-suffix-tree Fast Pattern Matching of Strings Using Suffix Tree in Java]
* [[https://arxiv.org/pdf/1905.05709.pdf Minlie Huang, Xiaoyan Zhu, Challenges in Building Intelligent Open-domain Dialog Systems]* [https://github.com/AtmaHou/Task-Oriented-Dialogue-Research-Progress-Survey Dataset and methods survey for Task-oriented Dialogue]
[[Категория: Машинное обучение]]
[[Категория: Обработка естественного языка]]