31
правка
Изменения
Фикс 1
Диалоговые системы стремительно набирают популярность. Это связано с тем, что
* люди стали чаще общаться при помощи текста, используя мессенджеры <ref>[https://www.crowdynews.com/blog/messaging-apps-bots-publishers-facebook-messenger-whatsapp/ Jorrith Schaap, Are Messaging Apps The Next Frontier For Publishers?]</ref>,
* могие компании заинтересованы в анализе и автоматизации общения с клиентами <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>.
== Определение ==
}}
Обычно целеориентированные и чат-ориентированные системы исследуют отдельно, но на практике многие системы являются универсальными. Схема идеальной универсальной модели диалоговой системы приведена на рисунке 1. Модель является абстрактной, ее полной реализации не существует.
[[Файл : Perfect-n2n.png | 200px 600px | thumb | right |
[https://image.slidesharecdn.com/deeppavlovos2019-190529124953/95/deeppavlov-2019-23-1024.jpg?cb=1559135208 Рисунок 1]. Схема идеальной диалоговой системы]]
Этапы обучения общего кодера (блок 3): * обучение с моделированием языка на данных диалога,* ''тонкая настройка'' на всех специфичных для задач данных. Обучение блоков 4 и 5: * предобучение для каждой задачи,* тонкая настройка на всех специфичных для задач данных. Блоки 6 и 7 обучаются на всех специфичных для задач данных. {{Определение | definition='''Тонкая настройка''' (англ. fine-turning) {{---}} подход к обучению, когда модель, обученная на большом количестве данных, повторно обучается на сравнительно небольшом количестве специфичных данных, чтобы скорректировать веса.}} История диалога (блок 0) используется, чтобы обратиться к множеству внешних источников информации(блок 1). Затем формируется полный контекст диалога, который включает персональные данные пользователя, информацию из внешних источников, историю диалога(блок 2). Контекст при помощи трансформера структурируется и передается множеству компонентов, которые решают определенные задачи: в блоке 4 выполняется оценка настроения пользования (англ. sentiment), поиск именованных сущностей (NER), выделение частей речи (POS), разрешение ''кореферентности''; в блоке 5 множество специфичных диалоговых моделей выдают свой ответ. Набор полученных ответов кодируется (блок 6) и ранжируется (блок 7) с учетом контекста. {{Определение | definition='''Разрешение кореферентности''' (англ. сoreference resolution) {{---}} задача поиска в тексте всех выражений, которые ссылаются на определенную сущность в тексте.}}
== Целеориентированные диалоговые системы ==
Задачей целеориентированных систем является достижение определенных целей при помощи общения с пользователем. Примером цели может быть поиск книги или включение света.
{| class="wikitable"
|+ Преимущества и недостатки подходов к подстроению
|-
! !! Классический (на основе правил) !! Нейросетевой
|-
| style="background:#eaecf0;" | '''Преимущества''' ||
* Детерминированность
* Свободное расширение
* Интерпретируемость
||
* Может быть громоздким
* Надо прописывать руками (пока что)
* Сложнее разрабатывать нелинейные диалоговые модели
|-
| style="background:#eaecf0;" | '''Недостатки''' ||
* Самостоятельно обучается
* Не нужно думать о структуре разговора
||
* Черный ящик
* Нельзя быть уверенным в результате
* Сложно изменять
* Может долго обучаться и работать
|}
=== Классическая архитектура ===
Классический метод построения целеориентированных систем заключается в использовании цепочки модулей (пайплайнаконвейера), которая изображена на рисунке 2.
[[Файл : Ds-pipeline-to.png | 400px 500px | thumb | right |
Рисунок 2. Диаграмма классической архитектуры диалоговой системы]]
* '''ASR'''. На вход поступает речь пользователя, которая затем [[Распознавание речи | распознается]] и переводится в текст. Результат работы компонента называют ''гипотезой'', так как полученный текст может соответствовать исходному сообщению не полностью.
* '''NLU'''. Фраза в текстовом виде анализируется системой: определяется домен, намерение, именованные сущности. Для распознавания намерений может применяться обученный на [[Векторное представление слов | эмбеддингахвекторном представлении фраз]] классификатор. [[Анализ текста | Распознавание именованных сущеностей ]] является отдельной задачей извлечения информации. Для ее решения используются [[Теория формальных языков | формальные языки]], статистические модели и их комбинации. В результате работы компонента создается формальное описание фразы {{---}} семантический фрейм.
* '''DM'''. Состоянием диалога или контекстом является информация, которая была получена при общении с пользователем ранее. В соответствии с текущим состоянием выбирается политика поведения системы, корректируется семантический фрейм. В качестве поставщика знаний может выступать СУБД или Web API.
* '''NLG'''. В соответствии с выбранным действием осуществляется генерация ответа пользователю на естественном языке. Для генерации применяются [[Генерация текста | генеративные модели или шаблоны]].
{{Определение | definition=
{{Определение | definition=
'''Именованная сущность (англ. named entity)''' {{---}} слово во фразе пользователя, которое можно отнести к определенному типу.<br />}} {{Определение | definition=
'''Слот (англ. named entity)''' {{---}} параметр запроса пользователя, ограниченный множеством допустимых значений.
}}
Обычно после распознавания именованных сущностей выполняется ''заполнение слотов'' (англ. slot filling), в ходе которого каждая найденная сущность приводится к своей нормальной форме с учетом ее типа и множества возможных значений. Заполнение слотов позволяет не учитывать морфологию сущности при дальнейшей ее обработке. Простейшим подходом к решению данной задачи нормализации сущностей является поиск с использованием расстояния Левенштейна. После определения типа сущности, она сравнивается с другими сущностями того же типа из базы данных. В качестве нормальной формы выбирается та, до которой расстояние наименьшее, либо можно выбрать несколько сущностей с наименьшим расстоянием и предоставить выбор пользователю (такой подход также применим для исправления опечаток).
Для получения эмбеддингов численного представления текста используются различные языковые модели: [[Векторное представление слов#word2vec | Word2Vec]], [https://github.com/coetaur0/ESIM ESIM], [[Генерация текста#GPT-2 | GPT]], [[Векторное представление слов#BERT| BERT]]. Каждой определяется свой способ представления слов и предложений или их последовательности для наиболее точного извлечения их смысловых значений. С хорошей языковой моделью достаточно около 100 примеров для хорошей классификации намерения <ref>[https://image.slidesharecdn.com/intentdetectionbenchmarkaugust2017-170817145622/95/nlu-intent-detection-benchmark-by-intento-august-2017-31-1024.jpg?cb=1503310100 Konstantin Savenkov, Intent Detection Benchmark by Intento]</ref>.
Система с классической архитектурой плохо масштабируется. Так как сценарии диалога нужно определять вручную, их становится сложно согласовывать при большом количестве.
* '''Intent Network'''. Кодирующая сеть, которая преобразует последовательность токенов <tex> w_0^t, w_1^t, \ldots, w_N^t </tex> в вектор <tex> \mathbf{z}_t </tex>. В качестве вектора <tex> \mathbf{z}_t </tex> может выступать скрытый слой [[Долгая краткосрочная память | LSTM-сети]] <tex> \mathbf{z}_t^N </tex>:<br /> <tex> \mathbf{z}_t = \mathbf{z}_t^N = \operatorname{LSTM}(w_0^t, w_1^t, ..., w_N^t) </tex>
* '''Belief Tracker'''. В реализации используется [[Рекуррентные нейронные сети | RNN-сеть]], на вход которой поступает предобработанная фраза пользователя. Дает распределение вероятностей <tex> \mathbf{p}_s^t </tex> по всем значениям определенного слота <tex> s </tex>.
* '''Database Operator'''. Выполняет запрос к базе данных по сущностям <tex> \{ \operatorname{argmax} \mathbf{p}_s^t \} </tex> и возвращает вектор <tex> \mathbf{x}_t </tex>, где единицей отмечается та запись (сущность в БД), которая соответствует запросу.
* '''Generation Network'''. Генерирует предложение, используя вектор действия <tex> \mathbf{o}_t </tex> и генератор языка. Предложение содержит специальные токены, которые заменяются на сущности из базы данных по указателю.
Входом у модели с данной архитектурой может быть компонент, который выполняет предобработку фразы пользователя и передает результаты внешним сетям (Intent Network и Belief Tracker).
Данную архитектуру также называют ''сквозной'' (англ. end-to-end trainable), так как на данных обучается каждая ее часть. Модель с данной архитектурой можно обобщить на намерения, которые не наблюдались во время обучения.
Первая фраза пользователя попадает в модуль инициализации, который обеспечивает приветствие пользователя и извлечение его имени. Имя пользователя используется менеджером диалога, чтобы инициализировать вектор истории диалога. Если пользователь не известен системе (его имя отуствует в Vocabulary Learning), то система инициализирует историю случайным вектором из хранилища историй. Когда инициализация заканчивается, система спрашивает пользователя, чего он хочет.
В каждой новой фразе менеджер диалога при помощи модуля Dynamic replacement выполняет замену слов из словаря на плейсхолдеры (их определения, например, Иван <tex> \to </tex> имя), после чего выполняется токенизация и векторизация фразы. Если встречаются токены, которых нет ни в истории, ни в словаре, то они считаются неизветсными (англ. unknown vocabulary terms, OOVs). Неизвестные токены обрабатываются модулем Vocabulary learning, который получает определение от пользователя или из внешнего источника информации. Система вычисляет косинусное расстояние <tex>c_1</tex> между текущей фразой пользователя и всеми фразами, хранимыми в базе данных. Полученное значение используется, чтобы извлечь от 50 до 100 фраз, которые могут стать ответами. Затем вычисляется та же метрика, но уже между вектором текущей истории диалога (которая включает высказывания как пользователя, так и системы) и векторами других историй<tex>c_2</tex>. Чтобы усилить последние фразы в текущей истории, используется ''коэффициент забывания''. Полученные метрики объединяются при помощи лог-линейной комбинации <tex> e^{w_1c_1 + w_2c_2} </tex>, где <tex>w_1, w_2</tex> {{---}} настраиваемые веса, а результат используется для ранжирования потенциальных ответов. Итоговый ответ выбирается случайно среди нескольких ответов на вершине списка.
Система также имеет модуль адаптации, который анализирует ответы пользователя и решает, исключить предыдущий ответ системы из множества возможных ответов, увеличить вероятность его выбора или уменьшить.
=== Системы с генерацией ответов ===
Системы с генерацией ответов (англ. generation-based) генерируют ответ пословно. Такие системы более гибкие, но фильтровать их сложней. Часто для генерации диалога используются seq2seq-модели, другими вариантами являются расширенный [[Вариационный автокодировщик | вариационный автокодировщик]] или [[Generative Adversarial Nets | генеративно-состязательная сеть]]. Высокую производительность при генерации диалогов позволяют получить предобученные языковые модели на основе Трансформера.
== Существующие диалоговые системы ==
'''AliMe Assist''' {{---}} помощник для пользователей магазина AliExpress. Его архитектура представлена на рисунке 5. Серым цветом выделены блоки, где используются методы машинного обучения. Система состоит из 3 подсистем: поиск информации или решения, выполнение задачи для клиента и простое общение в чате. Для извлечения намерения вопрос <tex> q </tex> проверяется на соответствие шаблонам при помощи ''дерева суффиксов'' [[Бор | бора]] (англ. trie-based pattern matching). Если соответствие найти не удалось, то вопрос передается классификатору, построенному на CNN-[[Сверточные нейронные сети | сверточной сети]]. На вход сети подаются эмбеддинги вектора слов вопроса и семантических тэгов, которые относятся к нему и контексту (предыдущему вопросу). Для получения эмбеддингов векторного представления используется [[Векторное представление слов#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]]
'''Xiaolce''' {{---}} чат-бот, развиваемый китайским отделением Microsoft. Состоит из множества навыков, которые делятся на эмоциональные и рациональные. Имеется навык, который комментирует картинки для комменирования картинок или сочиняет сочинения по ним стихистихов. Сценарии диалога делятся на персональные и социальные. Бот старается установить эмоциональную связь с пользователем, чтобы продлить диалог с ним.
'''Microsoft Cortana''' {{---}} виртуальный голосовой помощник. Состоит из можества навыков, натренированных на конкретные задачи. В отличие от классической архитектуры, где выбирается подходящий навык, здесь текст проходит через все навыки, после чего выбирается подходящий ответ. Также каждый навык использует результаты обработки предыдущей фразы от всех навыков. При таком подходе требуется больше ресурсов, но он позволяет существенно увеличить точность. Схематично процесс обработки фразы пользователя представлен на рисунке 6.
* [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]]
[[Категория: Машинное обучение]]
[[Категория: Обработка естественного языка]]