Изменения

Перейти к: навигация, поиск

Диалоговые системы

8174 байта добавлено, 14:06, 9 февраля 2021
м
Целеориентированные диалоговые системы
* могие компании заинтересованы в анализе и автоматизации общения с клиентами <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>.
 
Наиболее часто диалоговые системы используют в продажах, поддержке и маркетинге. Они используются для выполнения рутинных операций, которые можно свести к конкретному алгоритму, ищут и агрегируют данные, распространяют информацию.
== Определение ==
}}
История диалога (блок 0) используется, чтобы обратиться к множеству внешних источников информации (блок 1). Затем формируется полный контекст диалога, который включает персональные данные пользователя, информацию из внешних источников, историю диалога (блок 2). Контекст при помощи трансформера структурируется и передается множеству компонентов, которые решают определенные задачи: в блоке 4 выполняется оценка настроения пользования (англ. sentiment), поиск именованных сущностей (NER), [[Обработка естественного языка#Частеречная разметка | выделение частей речи (POS)]], разрешение ''кореферентности''; в блоке 5 множество специфичных диалоговых моделей выдают свой ответ. Набор полученных ответов кодируется (блок 6) и ранжируется (блок 7) с учетом контекста.
{{Определение | definition=
Задачей целеориентированных систем является достижение определенных целей при помощи общения с пользователем. Примером цели может быть поиск книги или включение света.
 
{| class="wikitable"
|+ Преимущества и недостатки подходов к подстроению
|-
! !! Классический (на основе правил) !! Нейросетевой
|-
| style="background:#eaecf0;" | '''Преимущества''' ||
* Детерминированность
* Свободное расширение
* Интерпретируемость
||
* Может быть громоздким
* Надо прописывать руками (пока что)
* Сложнее разрабатывать нелинейные диалоговые модели
|-
| style="background:#eaecf0;" | '''Недостатки''' ||
* Самостоятельно обучается
* Не нужно думать о структуре разговора
||
* Черный ящик
* Нельзя быть уверенным в результате
* Сложно изменять
* Может долго обучаться и работать
|}
 
=== Классическая архитектура ===
* '''ASR'''. На вход поступает речь пользователя, которая затем [[Распознавание речи | распознается]] и переводится в текст. Результат работы компонента называют ''гипотезой'', так как полученный текст может соответствовать исходному сообщению не полностью.
* '''NLU'''. Фраза в текстовом виде анализируется системой: определяется домен, намерение, именованные сущности. Для распознавания намерений может применяться обученный на [[Векторное представление слов | векторном представлении фраз]] классификатор. [[Анализ текста Обработка естественного языка#spaCy | Распознавание именованных сущеностей]] является отдельной задачей извлечения информации. Для ее решения используются [[Теория формальных языков | формальные языки]], статистические модели и их комбинации. В результате работы компонента создается формальное описание фразы {{---}} семантический фрейм.
* '''DM'''. Состоянием диалога или контекстом является информация, которая была получена при общении с пользователем ранее. В соответствии с текущим состоянием выбирается политика поведения системы, корректируется семантический фрейм. В качестве поставщика знаний может выступать СУБД или Web API.
Если заменить каждую часть классической архитектуры искусственной нейронной сетью, то получим архитектуру изображенную на рисунке 3.
 
Входом у модели с данной архитектурой может быть компонент, который выполняет предобработку фразы пользователя и передает результаты внешним сетям (Intent Network и Belief Tracker).
Описание каждой части:
* '''Generation Network'''. Генерирует предложение, используя вектор действия <tex> \mathbf{o}_t </tex> и генератор языка. Предложение содержит специальные токены, которые заменяются на сущности из базы данных по указателю.
Входом у модели Данную архитектуру также называют ''сквозной'' (англ. end-to-end trainable), так как на данных обучается каждая ее часть. Модель с данной архитектурой может быть компонентможно обобщить на намерения, который выполняет предобработку фразы пользователя и передает результаты внешним сетям (Intent Network и Belief Tracker)которые не наблюдались во время обучения
Данную архитектуру также называют {| class="wikitable"|+ Преимущества и недостатки подходов к построению диалога|-! !! Классический (на основе правил) !! Нейросетевой|-| style="background:#eaecf0;" | '''Преимущества'сквозной'' (англ||* Детерминированность,* свободное расширение,* интерпретируемость.||* Самостоятельно обучается,* не нужно думать о структуре разговора. end|-to-end trainable)| style="background:#eaecf0;" | '''Недостатки''' ||* Может быть громоздким,* надо прописывать руками, так как на данных обучается каждая ее часть* сложнее разрабатывать нелинейные диалоговые модели. Модель с данной архитектурой можно обобщить на намерения||* Черный ящик,* нельзя быть уверенным в результате,* сложно изменять, которые не наблюдались во время обучения* может долго обучаться и работать.|}
== Чат-ориентированные диалоговые системы ==
Система также имеет модуль адаптации, который анализирует ответы пользователя и решает, исключить предыдущий ответ системы из множества возможных ответов, увеличить вероятность его выбора или уменьшить.
Модель с такой архитектурой можно обучить на субтитрах фильмов. Данные для русского языка можно найти на Толоке<ref> [https://toloka.ai/ru/datasets Датасеты Наборы данных Толоки]</ref> <ref>[https://contest.yandex.ru/algorithm2018/contest/7914/enter/ Диалоги из фильмов, которые предоставлялись на соревновании Яндекс.Алгоритм 2018 (нужна регистрация)]</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.']))
{|-valign="top" |[[Файл: Ds-deeppavlovdp-helloarch.png | 450px | thumb | 600px right | [https://image.slidesharecdn.com/deeppavlovos2019-190529124953/95/deeppavlov-2019-21-638.jpg?cb=1559135208 Рисунок 87]. Тривиальный бот на Схема ядра DeepPavlov ]] |}
=== 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"
|-
! Модель !! Точность связок !! Точность слотов !! Особенности
|-
| [https://arxiv.org/abs/2006.01554 CHAN] || 52.68 || 97.69 || Использование контекстной иерархической [[Механизм внимания | сети внимания]], динамическое регулирование весов различных слотов во время обучения.
|-
| [https://www.aclweb.org/anthology/2020.acl-main.567.pdf SAS] || 51.03 || 97.20 || Применение механизма внимания к слотам, разделение информации слотов.
|-
| [https://www.aclweb.org/anthology/2020.acl-main.636.pdf 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] !! Особенности
|-
| [https://github.com/sz128/slot_filling_and_intent_detection_of_SLU Enc-dec + BERT] || 97.17 || Применение кодера-декодера с языковой моделью BERT.
|-
| [https://www.aclweb.org/anthology/D19-1214.pdf Stack-Propagation + BERT] || 97.0 || Использование намерений для заполнения слотов, обнаружение намерений на уровне токенов.
|-
| [https://arxiv.org/pdf/1902.10909.pdf Joint BERT] || 97.0 || Модель заполнения слотов на основе BERT.
|}
 
Набор данных: [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)] !! Особенности
|-
| [https://arxiv.org/pdf/1811.05370.pdf ELMo + BLSTM-CRF] || 99.29 || Улучшение языковой модели ELMo, обучение без учителя для повышения производительности.
|-
| [https://github.com/sz128/slot_filling_and_intent_detection_of_SLU Enc-dec + ELMo] || 99.14 || Применение кодера-декодера с языковой моделью ELMo.
|-
| 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
[[Категория: Машинное обучение]]
[[Категория: Обработка естественного языка]]
174
правки

Навигация