Диалоговые системы — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Метки: правка с мобильного устройства, правка из мобильной версии)
м (Целеориентированные диалоговые системы)
 
(не показано 7 промежуточных версий 2 участников)
Строка 1: Строка 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>.
 +
 +
Наиболее часто диалоговые системы используют в продажах, поддержке и маркетинге. Они используются для выполнения рутинных операций, которые можно свести к конкретному алгоритму, ищут и агрегируют данные, распространяют информацию.
 +
 
== Определение ==
 
== Определение ==
  
Строка 11: Строка 19:
 
}}
 
}}
  
Обычно целеориентированные и чат-ориентированные системы исследуют отдельно, но на практике многие системы являются универсальными. Схема идеальной универсальной модели диалоговой системы приведена на рисунке 1.
+
Обычно целеориентированные и чат-ориентированные системы исследуют отдельно, но на практике многие системы являются универсальными. Схема идеальной универсальной модели диалоговой системы приведена на рисунке 1. Модель является абстрактной, ее полной реализации не существует.  
  
[[Файл : Perfect-n2n.png | 200px | thumb | right |
+
[[Файл : Perfect-n2n.png | 600px | thumb | right |
 
[https://image.slidesharecdn.com/deeppavlovos2019-190529124953/95/deeppavlov-2019-23-1024.jpg?cb=1559135208 Рисунок 1]. Схема идеальной диалоговой системы]]
 
[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) {{---}} задача поиска в тексте всех выражений, которые ссылаются на определенную сущность в тексте.
 +
}}
  
 
== Целеориентированные диалоговые системы ==
 
== Целеориентированные диалоговые системы ==
  
 
Задачей целеориентированных систем является достижение определенных целей при помощи общения с пользователем. Примером цели может быть поиск книги или включение света.  
 
Задачей целеориентированных систем является достижение определенных целей при помощи общения с пользователем. Примером цели может быть поиск книги или включение света.  
 
 
=== Классическая архитектура ===
 
=== Классическая архитектура ===
  
Классический метод построения целеориентированных систем заключается в использовании цепочки модулей (пайплайна), которая изображена на рисунке 2.
+
Классический метод построения целеориентированных систем заключается в использовании цепочки модулей (конвейера), которая изображена на рисунке 2.
  
[[Файл : Ds-pipeline-to.png | 400px | thumb | right |
+
[[Файл : Ds-pipeline-to.png | 500px | thumb | right |
 
Рисунок 2. Диаграмма классической архитектуры диалоговой системы]]
 
Рисунок 2. Диаграмма классической архитектуры диалоговой системы]]
  
Строка 33: Строка 60:
 
* '''ASR'''. На вход поступает речь пользователя, которая затем [[Распознавание речи | распознается]] и переводится в текст. Результат работы компонента называют ''гипотезой'', так как полученный текст может соответствовать исходному сообщению не полностью.
 
* '''ASR'''. На вход поступает речь пользователя, которая затем [[Распознавание речи | распознается]] и переводится в текст. Результат работы компонента называют ''гипотезой'', так как полученный текст может соответствовать исходному сообщению не полностью.
  
* '''NLU'''. Фраза в текстовом виде анализируется системой: определяется домен, намерение, именованные сущности. Для распознавания намерений может применяться обученный на [[Векторное представление слов | эмбеддингах]] классификатор. Распознавание именованных сущеностей является отдельной задачей извлечения информации. Для ее решения используются формальные языки, статистические модели и их комбинации. В результате работы компонента создается формальное описание фразы {{---}} семантический фрейм.
+
* '''NLU'''. Фраза в текстовом виде анализируется системой: определяется домен, намерение, именованные сущности. Для распознавания намерений может применяться обученный на [[Векторное представление слов | векторном представлении фраз]] классификатор. [[Обработка естественного языка#spaCy | Распознавание именованных сущеностей]] является отдельной задачей извлечения информации. Для ее решения используются [[Теория формальных языков | формальные языки]], статистические модели и их комбинации. В результате работы компонента создается формальное описание фразы {{---}} семантический фрейм.
  
 
* '''DM'''. Состоянием диалога или контекстом является информация, которая была получена при общении с пользователем ранее. В соответствии с текущим состоянием выбирается политика поведения системы, корректируется семантический фрейм. В качестве поставщика знаний может выступать СУБД или Web API.
 
* '''DM'''. Состоянием диалога или контекстом является информация, которая была получена при общении с пользователем ранее. В соответствии с текущим состоянием выбирается политика поведения системы, корректируется семантический фрейм. В качестве поставщика знаний может выступать СУБД или Web API.
  
* '''NLG'''. В соответствии с выбранным действием осуществляется генерация ответа пользователю на естественном языке. Для генерации применяются генеративные модели или шаблоны.
+
* '''NLG'''. В соответствии с выбранным действием осуществляется генерация ответа пользователю на естественном языке. Для генерации применяются [[Генерация текста | генеративные модели или шаблоны]].
  
 
{{Определение | definition=
 
{{Определение | definition=
Строка 44: Строка 71:
  
 
{{Определение | definition=
 
{{Определение | definition=
'''Именованная сущность (англ. named entity)''' {{---}} слово во фразе пользователя, которое можно отнести к определенному типу.<br />
+
'''Именованная сущность (англ. named entity)''' {{---}} слово во фразе пользователя, которое можно отнести к определенному типу.
 +
}}
 +
 
 +
{{Определение | definition=
 
'''Слот (англ. named entity)''' {{---}} параметр запроса пользователя, ограниченный множеством допустимых значений.
 
'''Слот (англ. named entity)''' {{---}} параметр запроса пользователя, ограниченный множеством допустимых значений.
 
}}
 
}}
  
Обычно после распознавания именованных сущностей выполняется ''заполнение слотов'' (англ. slot filling), в ходе которого каждая найденная сущность приводится к своей нормальной форме с учетом ее типа и множества возможных значений. Заполнение слотов позволяет не учитывать морфологию сущности при дальнейшей ее обработке. Простейшим подходом к решению данной задачи является поиск с использованием расстояния Левенштейна.
+
Обычно после распознавания именованных сущностей выполняется ''заполнение слотов'' (англ. slot filling), в ходе которого каждая найденная сущность приводится к своей нормальной форме с учетом ее типа и множества возможных значений. Заполнение слотов позволяет не учитывать морфологию сущности при дальнейшей ее обработке. Простейшим подходом к нормализации сущностей является поиск с использованием расстояния Левенштейна. После определения типа сущности, она сравнивается с другими сущностями того же типа из базы данных. В качестве нормальной формы выбирается та, до которой расстояние наименьшее, либо можно выбрать несколько сущностей с наименьшим расстоянием и предоставить выбор пользователю (такой подход также применим для исправления опечаток).
  
Для получения эмбеддингов используются различные языковые модели: Word2Vec, ESIM, GPT, 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>.
+
Для получения численного представления текста используются различные языковые модели: [[Векторное представление слов#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>.
  
 
Система с классической архитектурой плохо масштабируется. Так как сценарии диалога нужно определять вручную, их становится сложно согласовывать при большом количестве.
 
Система с классической архитектурой плохо масштабируется. Так как сценарии диалога нужно определять вручную, их становится сложно согласовывать при большом количестве.
Строка 57: Строка 87:
  
 
Если заменить каждую часть классической архитектуры искусственной нейронной сетью, то получим архитектуру изображенную на рисунке 3.
 
Если заменить каждую часть классической архитектуры искусственной нейронной сетью, то получим архитектуру изображенную на рисунке 3.
 +
 +
Входом у модели с данной архитектурой может быть компонент, который выполняет предобработку фразы пользователя и передает результаты внешним сетям (Intent Network и Belief Tracker).
  
 
Описание каждой части:
 
Описание каждой части:
Строка 64: Строка 96:
 
* '''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>
 
* '''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>.
+
* '''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>, где единицей отмечается та запись (сущность в БД), которая соответствует запросу.
 
* '''Database Operator'''. Выполняет запрос к базе данных по сущностям <tex> \{ \operatorname{argmax} \mathbf{p}_s^t \} </tex> и возвращает вектор <tex> \mathbf{x}_t </tex>, где единицей отмечается та запись (сущность в БД), которая соответствует запросу.
Строка 73: Строка 105:
  
 
Данную архитектуру также называют ''сквозной'' (англ. end-to-end trainable), так как на данных обучается каждая ее часть. Модель с данной архитектурой можно обобщить на намерения, которые не наблюдались во время обучения.
 
Данную архитектуру также называют ''сквозной'' (англ. end-to-end trainable), так как на данных обучается каждая ее часть. Модель с данной архитектурой можно обобщить на намерения, которые не наблюдались во время обучения.
 +
 +
 +
{| class="wikitable"
 +
|+ Преимущества и недостатки подходов к построению диалога
 +
|-
 +
! !! Классический (на основе правил) !! Нейросетевой
 +
|-
 +
| style="background:#eaecf0;" | '''Преимущества''' ||
 +
* Детерминированность,
 +
* свободное расширение,
 +
* интерпретируемость.
 +
||
 +
* Самостоятельно обучается,
 +
* не нужно думать о структуре разговора.
 +
|-
 +
| style="background:#eaecf0;" | '''Недостатки''' ||
 +
* Может быть громоздким,
 +
* надо прописывать руками,
 +
* сложнее разрабатывать нелинейные диалоговые модели.
 +
||
 +
* Черный ящик,
 +
* нельзя быть уверенным в результате,
 +
* сложно изменять,
 +
* может долго обучаться и работать.
 +
|}
  
 
== Чат-ориентированные диалоговые системы ==
 
== Чат-ориентированные диалоговые системы ==
Строка 82: Строка 139:
 
Системы с ограниченными ответами (англ. retrieval/example-based) по последовательности фраз выдают наиболее подходящий ответ из списка возможных. Преимуществом таких систем является то, что ответы строго контролируются: можно удалить нежелательные шутки, нецензурные или критикующие выражения.
 
Системы с ограниченными ответами (англ. retrieval/example-based) по последовательности фраз выдают наиболее подходящий ответ из списка возможных. Преимуществом таких систем является то, что ответы строго контролируются: можно удалить нежелательные шутки, нецензурные или критикующие выражения.
  
'''Интерактивная система неформальных ответов''' (англ. informal response interactive system, IRIS) представлена на рисунке 1. Прямоугольником обозначены функциональные модули, цилиндром базы данных. Особенностью данной системы является то, , выполняется сравнение не только текущей фразы пользователя, но и вектора текущей истории диалога с другими диалогами в базе данных, что позволяет учесть контекст. Первая фраза пользователя попадает в модуль инициализации, который обеспечивает приветствие пользователя и извлечение его имени. Имя пользователя используется менеджером диалога, чтобы инициализировать вектор истории диалога. Если пользователь не известен системе (его имя отуствует в Vocabulary Learning), то система инициализирует историю случайным вектором из хранилища историй. Когда инициализация заканчивается, система спрашивает пользователя, чего он хочет. В каждой новой фразе менеджер диалога выполняет замену слов из словаря на плейсхолдеры (Dynamic replacement), после чего выполняется токенизация и векторизация фразы. Если встречаются токены, которых нет ни в истории, ни в словаре, то они обозначаются неизветсными (англ. unknown vocabulary terms (OOVs). Неизвестные токены обрабатываются специальным модулем (Vocabulary learning), который либо получает определение от пользователя, либо из внешнего источника информации. Система вычисляет косинусное расстояние между текущей фразой пользователя и всеми фразами, хранимыми в базе данных. Это значение используется, чтобы извлечь от 50 до 100 фраз, которые могут быть ответами. Затем вычисляется та же метрика, но уже между вектором текущей истории диалога (которая включает как высказывания пользователя, так и фразы системы) и векторами других историй. Чтобы усилить последние фразы в текущей истории, используется коэффициент забывания. Полученные метрики объединяются при помощи log-linear <tex> e^{c_1 + c_2} </tex>, фразы ранжируются, и выбирается случайная сверху.
+
'''Интерактивная система неформальных ответов''' (англ. informal response interactive system, IRIS) представлена на рисунке 4. Прямоугольником обозначены функциональные модули, цилиндром {{---}} базы данных. Здесь выполняется сравнение не только текущей фразы пользователя, но и вектора текущей истории диалога с другими диалогами в базе данных, что позволяет учесть контекст.
 +
 
 +
[[Файл : Ds-iris.png | 350px | thumb | right |
 +
Рисунок 4 <ref>[https://www.aclweb.org/anthology/P12-3007.pdf Rafael E. Banchs, Haizhou Li, IRIS: a Chat-oriented Dialogue System based on the Vector Space Model]</ref>. Архитектура IRIS]]
 +
 
 +
Первая фраза пользователя попадает в модуль инициализации, который обеспечивает приветствие пользователя и извлечение его имени. Имя пользователя используется менеджером диалога, чтобы инициализировать вектор истории диалога. Если пользователь не известен системе (его имя отуствует в 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> {{---}} настраиваемые веса, а результат используется для ранжирования потенциальных ответов. Итоговый ответ выбирается случайно среди нескольких ответов на вершине списка.
  
 
Система также имеет модуль адаптации, который анализирует ответы пользователя и решает, исключить предыдущий ответ системы из множества возможных ответов, увеличить вероятность его выбора или уменьшить.
 
Система также имеет модуль адаптации, который анализирует ответы пользователя и решает, исключить предыдущий ответ системы из множества возможных ответов, увеличить вероятность его выбора или уменьшить.
  
[[Файл : Ds-iris.png | 350px | thumb | right |
+
Модель с такой архитектурой можно обучить на субтитрах фильмов. Данные для русского языка можно найти на Толоке<ref> [https://toloka.ai/ru/datasets Наборы данных Толоки]</ref> <ref>[https://contest.yandex.ru/algorithm2018/contest/7914/enter/ Диалоги из фильмов, которые предоставлялись на соревновании Яндекс.Алгоритм 2018 (нужна регистрация)]</ref>.
Рисунок . Архитектура AliMe Assist]]
 
 
 
Модель с такой архитектурой можно обучить на фильмах,  
 
  
 
=== Системы с генерацией ответов ===
 
=== Системы с генерацией ответов ===
  
Системы с генерацией ответов (англ. generation-base) генерируют ответ пословно. Такие системы более гибкие, но фильтровать их сложней.
+
Системы с генерацией ответов (англ. generation-based) генерируют ответ пословно. Такие системы более гибкие, но фильтровать их сложней. Часто для генерации диалога используются seq2seq-модели, другими вариантами являются расширенный [[Вариационный автокодировщик | вариационный автокодировщик]] или [[Generative Adversarial Nets (GAN) | генеративно-состязательная сеть]]. Высокую производительность при генерации диалогов позволяют получить предобученные языковые модели на основе Трансформера.
  
 
== Существующие диалоговые системы ==
 
== Существующие диалоговые системы ==
 
ELIZA
 
иалоговая система-психоаналитик (сейчас, ее назвали бы чат-бот), родом из 60-ых годов.
 
  
DOS (Dialog Operating System) {{---}} диалоговая операционная система на основе DeepPavlov.
+
'''[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%.
  
'''AliMe Assist''' {{---}} помощник для пользователей магазина AliExpress. Его архитектура представлена на рисунке . Серым цветом выделены блоки, где используются методы машинного обучения. Система состоит из 3 подсистем: поиск информации или решения, выполнение задачи для клиента и путая переписка в чате. Для извлечения намерения вопрос <tex> q </tex> проверяется на соответствие шаблонам при помощи дерева суффиксов (англ. trie-based pattern matching). Если соответствие найти не удалось, то вопрос передается классификатору,  построенному на CNN-сети. На вход сети подаются эмбеддинги слов вопроса и семантических тэгов, которые относятся к нему и контексту (предыдущему вопросу). Для получения эмбеддингов используется 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]]
  
[[Файл : Ds-alime.png | 350px | thumb | right |
+
'''[https://ru.wikipedia.org/wiki/%D0%A1%D1%8F%D0%BE%D0%B0%D0%B9%D1%81 Xiaolce]''' {{---}} чат-бот, развиваемый китайским отделением Microsoft. Состоит из множества навыков, которые делятся на эмоциональные и рациональные. Имеется навык для комменирования картинок или сочинения по ним стихов. Сценарии диалога делятся на персональные и социальные. Бот старается установить эмоциональную связь с пользователем, чтобы продлить диалог с ним.
Рисунок . Архитектура AliMe Assist]]
+
 
 +
'''[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.
  
Xiaolce {{---}} чат-бот, развиваемый китайским отделением Microsoft. Состоит из множества навыков, которые делятся на эмоциональные и рациональные. Имеется навык, который комментирует картинки или сочиняет по ним стихи. Сценарии диалога делятся на персональные и социальные. Бот старается установить эмоциональную связь с пользователем, чтобы продлить диалог с ним.
+
[[Файл : Ds-cortana-arch.png | 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>. Архитектура Кортаны]]
  
Microsoft Cortana {{---}} виртуальный голосовой помощник. Состоит из можества навыков, натренированных на конкретные задачи. В отличие от классической архитектуры, где выбирается подходящий навык, здесь текст проходит через все навыки, после чего выбирается подходящий ответ. Также каждый навык использует результаты обработки предыдущей фразы от всех навыков. При таком подходе требуется больше ресурсов, но он позволяет существенно увеличить точность. Схематично процесс обработки фразы пользователя представлен на рисунке .
+
[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].
  
[[Файл : Ds-cortana-arch.png | 350px | thumb | right |
+
[https://ru.wikipedia.org/wiki/Siri '''Сири'''] {{---}} виртуальный помощник компании Apple. Является неотъемлемой частью iOS и доступна для большинства устройств, выпускаемых компанией. Поддерживает широкий спектр пользовательских команд, включая выполнение действий с телефоном, проверку основной информации, планирование событий и напоминаний, управление настройками устройства, поиск в интернете, взаимодействие с приложениями. Приспосабливается к каждому пользователю индивидуально, изучая его предпочтения в течение долгого времени.
Рисунок . Архитектура]]
 
  
 
== Фреймворки ==
 
== Фреймворки ==
  
Существует множество фрейморков, которые значительно упрощают построение диалоговых систем.  
+
Существует множество фреймворков, которые значительно упрощают построение диалоговых систем. Рассмотрим самые популярные из них.
  
 
===  DeepPavlov.ai ===
 
===  DeepPavlov.ai ===
  
Основывается на таких библиотеках как TensorFlow, Keras и PyTorch. Включает множество компонентов, каждый из которых решает отдельюу задачу диалоговых систем. Имеется модель для распознавания именованных сущностей, намерений, обработки истории диалога, анализа поведения пользователя и другие. Поведение агента диалоговой системы определяется набором навыков, каждый из которых строится из модулей. Когда агент получает фразу пользователя, специальный менеджер решает, какому навыку передать ее для обработки.  
+
Основывается на таких библиотеках как [https://www.tensorflow.org/ TensorFlow], [https://keras.io/ Keras] и [https://pytorch.org/ PyTorch]. Включает множество компонентов, каждый из которых решает отдельную задачу диалоговых систем. Имеется модель для распознавания именованных сущностей, намерений, обработки истории диалога, анализа поведения пользователя и другие. Поведение агента диалоговой системы определяется набором навыков, каждый из которых строится из модулей. Когда агент получает фразу пользователя, специальный менеджер решает, какому навыку передать ее для обработки. Схема ядра представлена на рисунке 7. Пример использования на языке Python:
  
[[Файл : Ds-dp-arch.png | 300px | thumb | right |
+
  '''from''' deeppavlov.agents.default_agent.default_agent '''import''' DefaultAgent
Рисунок . Схема ядра DeepPavlov]]
+
  '''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! :(', 'See you around.'], ['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>
 +
  HelloBot = Agent([hello, bye, fallback], skills_selector=skill_manager)
 +
  <font color="grey">''# Тестирование''</font>
 +
  '''print'''(HelloBot(['Hello!', 'Boo...', 'Bye.']))
  
{|-valign="top"
+
[[Файл : Ds-dp-arch.png | 450px | thumb | right |
|[[Файл: Ds-deeppavlov-hello.png | thumb | 600px | Рисунок . Тривиальный бот на DeepPavlov ]]
+
[https://image.slidesharecdn.com/deeppavlovos2019-190529124953/95/deeppavlov-2019-21-638.jpg?cb=1559135208 Рисунок 7]. Схема ядра DeepPavlov]]
|}
 
  
 
=== Rasa ===
 
=== Rasa ===
  
Архитектура схемотично изображени на рисунке 1. Для передачи сообщений по каналу используются коннекторы. В качестве катала ввода/вывода может быть Телеграм, собственный веб-сайт, Slack, поддерживаются кастомные коннекторы.
+
Архитектура схематично изображена на рисунке 8. Для передачи сообщений по каналу используются ''коннекторы''. Имеются коннекторы для [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 | 500px | thumb | right |
 +
[https://rasa.com/docs/rasa/img/architecture.png Рисунок 8]. Архитектура 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].
 +
 
 +
Лучшие модели по качеству заполнения слотов:
  
Данные для тренировки хранятся в формате YAML.  
+
{| 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.
 +
|}
  
stories:
+
Набор данных: [https://github.com/sonos/nlu-benchmark/tree/master/2017-06-custom-intent-engines Snips].
- story: greet and subscribe
 
  steps:
 
  - intent: greet
 
  - action: utter_greet
 
  - intent: subscribe
 
  - action: newsletter_form
 
  - active_loop: newsletter_form
 
  
[[Файл : Ds-rasa.png | 300px | thumb | right |
+
Лучшие модели по качеству определения намерений:
Рисунок . ]]
+
 
 +
{| 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.
  
 
== См. также ==
 
== См. также ==
  
 
*[[Обработка естественного языка]]
 
*[[Обработка естественного языка]]
 +
*[[Механизм внимания]]
 +
*[[Синтез речи]]
  
 
== Примечания ==
 
== Примечания ==
Строка 157: Строка 267:
 
== Источники информации ==
 
== Источники информации ==
  
* [упс]
+
* [https://www.youtube.com/watch?v=uLsI4fanlRI&t=4327s Лекция по подходам к построению диалоговых систем от Михаила Бурцева]
 
+
* [https://www.youtube.com/watch?v=Asftac_wcs8 Семинар Multitask vs Transfer от Антона Астахова]
 
+
* [http://datareview.info/article/neyronnyiy-mashinnyiy-perevod-s-primeneniem-gpu-vvodnyiy-kurs-chast-2/ Нейронный машинный перевод с применением GPU. Вводный курс. Часть 2]
 +
* [https://www.cs.cmu.edu/~tianchez/data/TianchezPhdProposal.pdf Tiancheng Zhao, Learning Generative End-to-end Dialog Systems with Knowledge]
 +
* [https://www.alibabacloud.com/blog/progress-in-dialog-management-model-research_596140 Alibaba Clouder, Progress in Dialog Management Model Research]
 +
* [https://github.com/voicy-ai/DialogStateTracking DialogStateTracking]
 +
* [https://habr.com/ru/company/abbyy/blog/437008/ NLP. Основы. Техники. Саморазвитие. Часть 1]
 +
* [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]
  
 
[[Категория: Машинное обучение]]
 
[[Категория: Машинное обучение]]
 
[[Категория: Обработка естественного языка]]
 
[[Категория: Обработка естественного языка]]

Текущая версия на 14:06, 9 февраля 2021

Диалоговые системы стремительно набирают популярность. Это связано с тем, что

  • люди стали чаще общаться при помощи текста, используя мессенджеры [1],
  • могие компании заинтересованы в анализе и автоматизации общения с клиентами [2],
  • растет число «умных» бытовых предметов, которыми можно управлять [3].

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

Определение[править]

Диалоговые системы (англ. conversational agents, CAs) — компьютерные системы, предназначенные для общения с человеком. Они имитируют поведение человека и обеспечивают естественный способ получения информации, что позволяет значительно упростить руководство пользователя и тем самым повысить удобство взаимодействия с такими системами.

Диалоговую систему также называют разговорным искусственным интеллектом или просто ботом.

Диалоговая система может в разной степени являться целеориентированной системой (англ. goal/task-oriented) или чат-ориентированной (англ. chat-oriented). Как правило, чат-ориентированные системы, в отличие от целеориентированных, поддерживают большое количество доменов, но не способны различать много вопросов в рамках кажного из них.


Определение:
Домен (англ. domain) — область знаний, которая относится к запросу пользователя.


Обычно целеориентированные и чат-ориентированные системы исследуют отдельно, но на практике многие системы являются универсальными. Схема идеальной универсальной модели диалоговой системы приведена на рисунке 1. Модель является абстрактной, ее полной реализации не существует.

Рисунок 1. Схема идеальной диалоговой системы

Этапы обучения общего кодера (блок 3):

  • обучение с моделированием языка на данных диалога,
  • тонкая настройка на всех специфичных для задач данных.

Обучение блоков 4 и 5:

  • предобучение для каждой задачи,
  • тонкая настройка на всех специфичных для задач данных.

Блоки 6 и 7 обучаются на всех специфичных для задач данных.


Определение:
Тонкая настройка (англ. fine-turning) — подход к обучению, когда модель, обученная на большом количестве данных, повторно обучается на сравнительно небольшом количестве специфичных данных, чтобы скорректировать веса.


История диалога (блок 0) используется, чтобы обратиться к множеству внешних источников информации (блок 1). Затем формируется полный контекст диалога, который включает персональные данные пользователя, информацию из внешних источников, историю диалога (блок 2). Контекст при помощи трансформера структурируется и передается множеству компонентов, которые решают определенные задачи: в блоке 4 выполняется оценка настроения пользования (англ. sentiment), поиск именованных сущностей (NER), выделение частей речи (POS), разрешение кореферентности; в блоке 5 множество специфичных диалоговых моделей выдают свой ответ. Набор полученных ответов кодируется (блок 6) и ранжируется (блок 7) с учетом контекста.


Определение:
Разрешение кореферентности (англ. сoreference resolution) — задача поиска в тексте всех выражений, которые ссылаются на определенную сущность в тексте.


Целеориентированные диалоговые системы[править]

Задачей целеориентированных систем является достижение определенных целей при помощи общения с пользователем. Примером цели может быть поиск книги или включение света.

Классическая архитектура[править]

Классический метод построения целеориентированных систем заключается в использовании цепочки модулей (конвейера), которая изображена на рисунке 2.

Рисунок 2. Диаграмма классической архитектуры диалоговой системы

Описание модулей:

  • ASR. На вход поступает речь пользователя, которая затем распознается и переводится в текст. Результат работы компонента называют гипотезой, так как полученный текст может соответствовать исходному сообщению не полностью.
  • NLU. Фраза в текстовом виде анализируется системой: определяется домен, намерение, именованные сущности. Для распознавания намерений может применяться обученный на векторном представлении фраз классификатор. Распознавание именованных сущеностей является отдельной задачей извлечения информации. Для ее решения используются формальные языки, статистические модели и их комбинации. В результате работы компонента создается формальное описание фразы — семантический фрейм.
  • DM. Состоянием диалога или контекстом является информация, которая была получена при общении с пользователем ранее. В соответствии с текущим состоянием выбирается политика поведения системы, корректируется семантический фрейм. В качестве поставщика знаний может выступать СУБД или Web API.
  • NLG. В соответствии с выбранным действием осуществляется генерация ответа пользователю на естественном языке. Для генерации применяются генеративные модели или шаблоны.


Определение:
Намерение (англ. intent) — желание пользователя в рамках произесенной фразы.


Определение:
Именованная сущность (англ. named entity) — слово во фразе пользователя, которое можно отнести к определенному типу.


Определение:
Слот (англ. named entity) — параметр запроса пользователя, ограниченный множеством допустимых значений.


Обычно после распознавания именованных сущностей выполняется заполнение слотов (англ. slot filling), в ходе которого каждая найденная сущность приводится к своей нормальной форме с учетом ее типа и множества возможных значений. Заполнение слотов позволяет не учитывать морфологию сущности при дальнейшей ее обработке. Простейшим подходом к нормализации сущностей является поиск с использованием расстояния Левенштейна. После определения типа сущности, она сравнивается с другими сущностями того же типа из базы данных. В качестве нормальной формы выбирается та, до которой расстояние наименьшее, либо можно выбрать несколько сущностей с наименьшим расстоянием и предоставить выбор пользователю (такой подход также применим для исправления опечаток).

Для получения численного представления текста используются различные языковые модели: Word2Vec, ESIM, GPT, BERT. Каждой определяется свой способ представления слов или их последовательности для наиболее точного извлечения смысловых значений. С хорошей языковой моделью достаточно около 100 примеров для хорошей классификации намерения [4].

Система с классической архитектурой плохо масштабируется. Так как сценарии диалога нужно определять вручную, их становится сложно согласовывать при большом количестве.

Нейросетевая архитектура[править]

Если заменить каждую часть классической архитектуры искусственной нейронной сетью, то получим архитектуру изображенную на рисунке 3.

Входом у модели с данной архитектурой может быть компонент, который выполняет предобработку фразы пользователя и передает результаты внешним сетям (Intent Network и Belief Tracker).

Описание каждой части:

Рисунок 3 [5]. Нейросетевая архитектура диалоговой системы
  • Intent Network. Кодирующая сеть, которая преобразует последовательность токенов [math] w_0^t, w_1^t, \ldots, w_N^t [/math] в вектор [math] \mathbf{z}_t [/math]. В качестве вектора [math] \mathbf{z}_t [/math] может выступать скрытый слой LSTM-сети [math] \mathbf{z}_t^N [/math]:
    [math] \mathbf{z}_t = \mathbf{z}_t^N = \operatorname{LSTM}(w_0^t, w_1^t, ..., w_N^t) [/math]
  • Belief Tracker. В реализации используется RNN-сеть, на вход которой поступает предобработанная фраза пользователя. Дает распределение вероятностей [math] \mathbf{p}_s^t [/math] по всем значениям определенного слота [math] s [/math].
  • Database Operator. Выполняет запрос к базе данных по сущностям [math] \{ \operatorname{argmax} \mathbf{p}_s^t \} [/math] и возвращает вектор [math] \mathbf{x}_t [/math], где единицей отмечается та запись (сущность в БД), которая соответствует запросу.
  • Policy network. Объединяет системные модули. Выходом является вектор [math] \mathbf{o}_t [/math], который представляет системное действие. Распределение вероятностей для каждого слота [math] \mathbf{p}_s^t [/math] пребразуется в вектор [math] \mathbf{\hat p}_s^t [/math], который состоит из трех компонент: суммарная вероятность, вероятность, что пользователь выразил безразличие к слоту, и вероятность, что слот не был упомянут. Также вектор [math] \mathbf{x}_t [/math] сжимается в one-hot-вектор [math] \mathbf{\hat x}_t [/math], где каждая компонента определяет количество подходящих записей.
    [math] \mathbf{o}_t = \tanh(W_{zo} \mathbf{z}_t + W_{po} \mathbf{\hat p}_t + W_{xo} \mathbf{\hat x}_t), [/math]
    где матрицы [math] W_{zo} [/math], [math]W_{po} [/math] и [math] W_{xo} [/math] — параметры, а [math] \mathbf{\hat p}_t = \bigoplus \mathbf{\hat p}_s^t [/math] — конкатенация.
  • Generation Network. Генерирует предложение, используя вектор действия [math] \mathbf{o}_t [/math] и генератор языка. Предложение содержит специальные токены, которые заменяются на сущности из базы данных по указателю.

Данную архитектуру также называют сквозной (англ. end-to-end trainable), так как на данных обучается каждая ее часть. Модель с данной архитектурой можно обобщить на намерения, которые не наблюдались во время обучения.


Преимущества и недостатки подходов к построению диалога
Классический (на основе правил) Нейросетевой
Преимущества
  • Детерминированность,
  • свободное расширение,
  • интерпретируемость.
  • Самостоятельно обучается,
  • не нужно думать о структуре разговора.
Недостатки
  • Может быть громоздким,
  • надо прописывать руками,
  • сложнее разрабатывать нелинейные диалоговые модели.
  • Черный ящик,
  • нельзя быть уверенным в результате,
  • сложно изменять,
  • может долго обучаться и работать.

Чат-ориентированные диалоговые системы[править]

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

Системы с ограниченными ответами[править]

Системы с ограниченными ответами (англ. retrieval/example-based) по последовательности фраз выдают наиболее подходящий ответ из списка возможных. Преимуществом таких систем является то, что ответы строго контролируются: можно удалить нежелательные шутки, нецензурные или критикующие выражения.

Интерактивная система неформальных ответов (англ. informal response interactive system, IRIS) представлена на рисунке 4. Прямоугольником обозначены функциональные модули, цилиндром — базы данных. Здесь выполняется сравнение не только текущей фразы пользователя, но и вектора текущей истории диалога с другими диалогами в базе данных, что позволяет учесть контекст.

Рисунок 4 [6]. Архитектура IRIS

Первая фраза пользователя попадает в модуль инициализации, который обеспечивает приветствие пользователя и извлечение его имени. Имя пользователя используется менеджером диалога, чтобы инициализировать вектор истории диалога. Если пользователь не известен системе (его имя отуствует в Vocabulary Learning), то система инициализирует историю случайным вектором из хранилища историй. Когда инициализация заканчивается, система спрашивает пользователя, чего он хочет.

В каждой новой фразе менеджер диалога при помощи модуля Dynamic replacement выполняет замену слов из словаря на плейсхолдеры (их определения, например, Иван [math] \to [/math] имя), после чего выполняется токенизация и векторизация фразы. Если встречаются токены, которых нет ни в истории, ни в словаре, то они считаются неизветсными (англ. unknown vocabulary terms, OOVs). Неизвестные токены обрабатываются модулем Vocabulary learning, который получает определение от пользователя или из внешнего источника информации. Система вычисляет косинусное расстояние [math]c_1[/math] между текущей фразой пользователя и всеми фразами, хранимыми в базе данных. Полученное значение используется, чтобы извлечь от 50 до 100 фраз, которые могут стать ответами. Затем вычисляется та же метрика, но уже между вектором текущей истории диалога (которая включает высказывания как пользователя, так и системы) и векторами других историй [math]c_2[/math]. Чтобы усилить последние фразы в текущей истории, используется коэффициент забывания. Полученные метрики объединяются при помощи лог-линейной комбинации [math] e^{w_1c_1 + w_2c_2} [/math], где [math]w_1, w_2[/math] — настраиваемые веса, а результат используется для ранжирования потенциальных ответов. Итоговый ответ выбирается случайно среди нескольких ответов на вершине списка.

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

Модель с такой архитектурой можно обучить на субтитрах фильмов. Данные для русского языка можно найти на Толоке[7] [8].

Системы с генерацией ответов[править]

Системы с генерацией ответов (англ. generation-based) генерируют ответ пословно. Такие системы более гибкие, но фильтровать их сложней. Часто для генерации диалога используются seq2seq-модели, другими вариантами являются расширенный вариационный автокодировщик или генеративно-состязательная сеть. Высокую производительность при генерации диалогов позволяют получить предобученные языковые модели на основе Трансформера.

Существующие диалоговые системы[править]

AliMe Assist — помощник для пользователей магазина AliExpress. Его архитектура представлена на рисунке 5. Серым цветом выделены блоки, где используются методы машинного обучения. Система состоит из 3 подсистем: поиск информации или решения, выполнение задачи для клиента и простое общение в чате. Для извлечения намерения вопрос [math] q [/math] проверяется на соответствие шаблонам при помощи бора (англ. trie-based pattern matching). Если соответствие найти не удалось, то вопрос передается классификатору, построенному на сверточной сети. На вход сети подаются вектора слов вопроса и семантических тэгов, которые относятся к нему и контексту (предыдущему вопросу). Для получения векторного представления используется FastText. Выбор CNN-сети вместо RNN основан на том, что первая сеть учитывает контекстную информацию слов (слова перед и после текущего слова) и работает быстрей. Точность классификации 40 намерений составляет 89,91%.

Рисунок 5[9]. Архитектура AliMe Assist

Xiaolce — чат-бот, развиваемый китайским отделением Microsoft. Состоит из множества навыков, которые делятся на эмоциональные и рациональные. Имеется навык для комменирования картинок или сочинения по ним стихов. Сценарии диалога делятся на персональные и социальные. Бот старается установить эмоциональную связь с пользователем, чтобы продлить диалог с ним.

Microsoft Cortana — виртуальный голосовой помощник. Состоит из можества навыков, натренированных на конкретные задачи. В отличие от классической архитектуры, где выбирается подходящий навык, здесь текст проходит через все навыки, после чего выбирается подходящий ответ. Каждый навык использует контекст (результаты обработки предыдущей фразы), сформированный всеми навыками. При таком подходе требуется больше ресурсов, но он позволяет существенно увеличить точность. Схематично процесс обработки фразы пользователя представлен на рисунке 6.

Рисунок 6[10]. Архитектура Кортаны

Яндекс Алиса — виртуальный голосовой помощник от компании Яндекс. Относится к классу чат-ориентированных систем, но имеет множество навыков, каждый из которых может быть представлен в виде целеориентированной системы. Алиса запускает навык по его активационной фразе. Фактически навык является веб-сервисом, который реализует DM и NLG модули классической архитектуры. При помщи платформы Яндекс Диалоги разработчики могут создавать свои навыки и монетизировать их, но перед публикацией навык проходит обязательную модерацию. Распознавание голоса выполняется сервисом SpeechKit.

Сири — виртуальный помощник компании Apple. Является неотъемлемой частью iOS и доступна для большинства устройств, выпускаемых компанией. Поддерживает широкий спектр пользовательских команд, включая выполнение действий с телефоном, проверку основной информации, планирование событий и напоминаний, управление настройками устройства, поиск в интернете, взаимодействие с приложениями. Приспосабливается к каждому пользователю индивидуально, изучая его предпочтения в течение долгого времени.

Фреймворки[править]

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

DeepPavlov.ai[править]

Основывается на таких библиотеках как TensorFlow, Keras и PyTorch. Включает множество компонентов, каждый из которых решает отдельную задачу диалоговых систем. Имеется модель для распознавания именованных сущностей, намерений, обработки истории диалога, анализа поведения пользователя и другие. Поведение агента диалоговой системы определяется набором навыков, каждый из которых строится из модулей. Когда агент получает фразу пользователя, специальный менеджер решает, какому навыку передать ее для обработки. Схема ядра представлена на рисунке 7. Пример использования на языке 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
 # Создание сконфигурированных навыков
 hello = PatternMatchingSkill(responses=['Hello wordl! :)'], patterns=['hi', 'hello', 'good day'])
 bye = PatternMatchingSkill(['Goodbye word! :(', 'See you around.'], ['bye', 'chao', 'see you'])
 fallback = PatternMatchingSkill(['I don\'t understand, sorry :/', 'I can say "Helo world!" 8)'])
 # Создание менеджера, который выбирает наиболее вероятный навык
 skill_manager = HighestConfidenceSelector()
 # Создание агента
 HelloBot = Agent([hello, bye, fallback], skills_selector=skill_manager)
 # Тестирование
 print(HelloBot(['Hello!', 'Boo...', 'Bye.']))
Рисунок 7. Схема ядра DeepPavlov

Rasa[править]

Архитектура схематично изображена на рисунке 8. Для передачи сообщений по каналу используются коннекторы. Имеются коннекторы для Телеграма, собственного веб-сайта, Slack, можно создавать свои коннекторы.

Рисунок 8. Архитектура Rasa

Данные для тренировки хранятся в формате YAML [11]. Имеется несколько типов тренировочных данных. Данные для NLU содержат намерения и примеры к ним. Опционально в примерах можно выделить тип сущности и ее значение или указать сентимент (настроение пользователя). Ответы бота (responses) разбиваются на именованные группы, откуда итоговый ответ выбирается случайно. Истории (stories) используются для выявления шаблонов диалога, чтобы система могла правильно реагировать на последовательности фраз пользователя, которые не были описаны явно. Каждая история описывает последовательность шагов. Шагом может быть намерение, которым определяется фраза пользователя, или действие, которым может быть группа ответов бота. Имеется возможность описать форму, чтобы пользователь мог ввести данные (например, электронную почту), и использовать ее в качестве действия. Правила похожи на истории, но они определяют последовательность шагов более строго, без применения машинного обучения.

Оценка качества модели[править]

Лучшие модели по качеству отслеживания состояния диалога (англ. dialogue state tracking):

Модель Точность связок Точность слотов Особенности
CHAN 52.68 97.69 Использование контекстной иерархической сети внимания, динамическое регулирование весов различных слотов во время обучения.
SAS 51.03 97.20 Применение механизма внимания к слотам, разделение информации слотов.
MERET 50.91 97.07 Обучение с подкреплением.

Качество определяется по двум метрикам: точность слотов (англ. slot accuracy) — запрошенный слот верный, и точность связок (англ. joint goal accuracy) — каждый слот в стостоянии верный. Для оценки по данному криетрию обычно используется набор данных MultiWOZ.

Лучшие модели по качеству заполнения слотов:

Модель F1 Особенности
Enc-dec + BERT 97.17 Применение кодера-декодера с языковой моделью BERT.
Stack-Propagation + BERT 97.0 Использование намерений для заполнения слотов, обнаружение намерений на уровне токенов.
Joint BERT 97.0 Модель заполнения слотов на основе BERT.

Набор данных: Snips.

Лучшие модели по качеству определения намерений:

Модель Точность (accuracy) Особенности
ELMo + BLSTM-CRF 99.29 Улучшение языковой модели ELMo, обучение без учителя для повышения производительности.
Enc-dec + ELMo 99.14 Применение кодера-декодера с языковой моделью ELMo.
Stack-Propagation + BERT 99.0 -//-

Набор данных: Snips.

См. также[править]

Примечания[править]

Источники информации[править]