Изменения

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

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

1879 байт убрано, 03:18, 19 января 2021
Нет описания правки
'''Домен (англ. domain)''' {{---}} область знаний, которая относится к запросу пользователя.
}}
 
Часто целеориентированные и чат-ориентированные системы исследуют отдельно, но на практике многие системы являются универсальными. Схема идеальной универсальной модели диалоговой системы приведена на рисунке 1.
 
[[Файл : Perfect-n2n.png | 200px | thumb | right | Рисунок 1. Схема идеальной диалоговой системы]]
 
История диалога используется, чтобы обратиться к множеству внешних источников инфомрации. Затем формируется полный контекст диалога, который включает персональные данные пользователя, информацию из внешних источников, историю диалога. Контекст при помощи трансформера структурируется и передается множеству компонентов, которые решают определенные задачи. Набор полученных ответов кодируется и ранжируется с учетом контекста.
== Целеориентированные диалоговые системы ==
=== Классическая архитектура ===
Классический метод построения целеориентированных систем заключается в использовании цепочки модулей (пайплайна), которая изображена на рисунке 12.
[[Файл : Ds-pipeline-to.png | 400px | thumb | right |
Рисунок 12. Диаграмма классической архитектуры диалоговой системы]]
* '''ASR'''. На вход поступает речь пользователя, которая затем распознается и переводится в текст. Результат работы компонента называют ''гипотезой'', так как полученный текст может соответствовать исходному сообщению не полностью.
{{Определение | definition=
'''Именованная сущность (англ. named entity)''' {{---}} слово во фразе пользователя, которое можно отнести к определенному типу.<br />
'''Слот (англ. named entity)''' {{---}} параметр запроса пользователя, ограниченный множеством допустимых значений.
}}
Обычно после распознавания именованных сущностей выполняется ''заполнение слотов'' (англ. slot filling), в ходе которого каждая найденная сущность приводится к своей нормальной форме с учетом ее типа и множества возможных значений. Заполнение слотов позволяет не учитывать морфологию сущности при дальнейшей ее обработке. Простейшим подходом к решению данной задачи является поиск с использованием расстояния Левенштейна.
 
Для получения эмбеддингов используются различные языковые модели: Word2Vec, ESIM, GPT, BERT. Хорошей языковой модели достаточно около 100 примеров для хорошей классификации намерения <ref> https://www.slideshare.net/KonstantinSavenkov/nlu-intent-detection-benchmark-by-intento-august-2017 </ref>
Система с классической архитектурой плохо масштабируется. Так как сценарии диалога нужно определять вручную, их становится сложно согласовывать при большом количестве.
=== Нейросетевая архитектура ===
Если заменить каждую часть классической архитектуры искусственной нейронной сетью, то получим архитектуру изображенную на рисунке 23.
[[Файл : Ds-nn-to.png | 400px | thumb | right | Рисунок 23. Нейросетевая архитектура диалоговой системы]]
* '''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>, где единицей отмечается та запись (сущность в БД), которая соответствует запросу.
* '''Policy network'''. Объединяет системные модули. Выходом является вектор <tex> \mathbf{o}_t </tex>, который представляет системное действие. Распределение вероятностей для каждого слота <tex> \mathbf{p}_s^t </tex> пребразуется в вектор <tex> \hat \mathbf{\hat p}_s^t </tex>, который состоит из трех компонент: суммарная вероятность, вероятность, что пользователь выразил безразличие к слоту, и вероятность, что слот не был упомянут. Также вектор <tex> \mathbf{x}_t </tex> сжимается в one-hot-вектор <tex> \hat \mathbf{\hat x}_t </tex>, где каждая компонента определяет количество подходящих записей. : <br /> <tex> o_t \mathbf{o}_t = \tanh(W_{zo} z_t \mathbf{z}_t + W_{po} \mathbf{\hat p_t p}_t + W_{xo} \mathbf{\hat x_tx}_t), </tex> : <br /> где матрицы <tex> W_{zo} </tex>, <tex>W_{po} </tex> и <tex> W_{xo} </tex> {{---}} параметры, а <tex> \hat \mathbf{\hat p}_t = \bigoplus \hat \mathbf{\hat p}_s^t </tex> {{---}} конкатенация,  * '''Generation Network'''. Генерирует предложение, используя вектор действия o и генератор языка.  Данную архитектуру также называют сквозной (англ. end-to-end trainable), так как каждая ее часть обучается на данных.  Полиси нетворк -- рекурентная сеть, которая хранит состояния, из которых декодируется ответ. В ответе есть специальные токены, вместо которых подставляются данные.  Такая значительно лучше (ссылка) https://arxiv.org/abs/1604.04562 Эмбединги предложений попадают в энекодер. Закодированный диалог попадает в память. Там вектора усредняются и получается вектор состояния.  End-to-end (E2E) генеративные диалоговые модели основаны на кодер-декодер нейронных сетях. Идея заключается в использвании кодирующей сети для трансляции конекста диалога в распределение и затем использовать декодирующуюю сеть для генерации ответа системы. Такие модели не требуют создавать промежуточные состояния вручную и могут обобщаться на реакции, которые не наблюдались во время обучения.  Именованная сущность (просто сущность) -- параметр запроса   Эмбидинг -- 2 Контекст Для генерации ответа используют генеративные модели, либо шаблоны. Системы имеющие такую структуру имеют проблему масштабирования. Накапливается большое число правил, которые сложно согласовывать друг с другом. Время на сопровождение системы быстро растет, а затраченных ресурсов становится больше, чем нанят живого человека  Каноническая архитектура показана на рисунке. === Нейросетевая архитектура ===   Как извлекать намерение? Можно использовать регулярные выражения. Но один и тот же запрос на естественном языке можно построить по-разному, часто такой подход будет ошибаться. Сложно описать все возможные способы задания запроса Целеориентированные диалоговые системы. Позволяет решать одну задачу.  Модель на основе нейронных сетей (end-to-end): Энкодер-Декодер с вниманием. Проблемы: валидных ответов может быть несколько, контекст может находится за пределами диалога.
== Чаториентированные системы ==* '''Generation Network'''. Генерирует предложение, используя вектор действия <tex> \mathbf{o}_t </tex> и генератор языка. Предложение содержит специальные токены, которые заменяются на сущности из базы данных по указателю.
Чатоирентированные системы Данную архитектуру также называют сквозной (англ. end-to-end trainable), так как правило используются для развлечения и общения в чатена данных обучается каждая ее часть. В разработке так же используются либо retrieval-based methods и генеативные Для моделис данной архитектурой не требуется создавать промежуточные состояния вручную, а также ее можно обобщить на намерения, которые не наблюдались во время обучения.
Проблема в проектировании таких систем:невозможно вручную спроектировать изменение состояния диалога, как в целеориентированных системах. Одним из решений является использование иерархического кодера, чтобы определить иерархическую структуру в диалоге.Seq2seq, поддержа большого количества тем, но неглубокая. == Чат-ориентированные диалоговые системы ===
=== С ограниченными ответами ===
=== С генерацией ответов===
== Примеры диалоговых систем==
ELIZA
== Другое ==
Языковые модели: word2vec, esim, gpt, bert. Хорошей языковой модели достаточно около 100 примеров для хорошей классификации намерения.
[[Файл : Perfect-n2n.png | 200px | thumb | right | ]]
== См. также ==
31
правка

Навигация