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

Материал из Викиконспекты
Перейти к: навигация, поиск
(Метки: правка с мобильного устройства, правка из мобильной версии)
(Метки: правка с мобильного устройства, правка из мобильной версии)
Строка 73: Строка 73:
 
Данный тип систем обычно используется чтобы занять пользователя, например, во время ожидания выполнения задачи. Система поддерживает бессодержательный, но связный диалог.
 
Данный тип систем обычно используется чтобы занять пользователя, например, во время ожидания выполнения задачи. Система поддерживает бессодержательный, но связный диалог.
  
Системы с ограниченными ответами (англ. retrieval-base) по последовательности фраз выдают наиболее подходящий ответ из списка возможных. Преимуществом таких систем является то, что ответы строго контролируются: можно удалить нежелательные шутки, нецензурные или критикующие выражения.
+
=== С ограниченными ответами ===
 +
 
 +
Системы с ограниченными ответами (англ. retrieval/example-based) по последовательности фраз выдают наиболее подходящий ответ из списка возможных. Преимуществом таких систем является то, что ответы строго контролируются: можно удалить нежелательные шутки, нецензурные или критикующие выражения.
 +
 
 +
Интерактивная система неформальных ответов (англ. informal response interactive system, IRIS) основана на модели векторного пространства. Текущая фраза пользователя сравнивается со всеми существующим фразами в базе данных. Векторное прдставление текущей истории диалога также сравнивается с векторным представлением диалогов в базе данных. Такой подход позволяет включить информацию о контексте диалога в процесс выбора ответа. Архитектура системы представлена на ирсуке. Прямоугольником обозначены функциональные модули, цилиндром -- репозитории.
 +
 
 +
Модель с такой архитектурой можно обучить на фильмах,
 +
 
 +
=== С генерацией ответов ===
  
 
Системы с генерацией ответов (англ. generation-base) генерируют ответ пословно. Такие системы более гибкие, но фильтровать их сложней.
 
Системы с генерацией ответов (англ. generation-base) генерируют ответ пословно. Такие системы более гибкие, но фильтровать их сложней.
  
== Примеры диалоговых систем ==
+
== Существующие диалоговые системы ==
 
   
 
   
 
ELIZA
 
ELIZA
Строка 90: Строка 98:
  
 
Xiaolce {{---}} чат-бот, развиваемый китайским отделением Microsoft. Состоит из множества навыков, которые делятся на эмоциональные и рациональные. Имеется навык, который комментирует картинки или сочиняет по ним стихи. Сценарии диалога делятся на персональные и социальные. Бот старается установить эмоциональную связь с пользователем, чтобы продлить диалог с ним.
 
Xiaolce {{---}} чат-бот, развиваемый китайским отделением Microsoft. Состоит из множества навыков, которые делятся на эмоциональные и рациональные. Имеется навык, который комментирует картинки или сочиняет по ним стихи. Сценарии диалога делятся на персональные и социальные. Бот старается установить эмоциональную связь с пользователем, чтобы продлить диалог с ним.
 +
 +
Microsoft Cortana {{---}} виртуальный голосовой помощник. Состоит из можества навыков, натренированных на конкретные задачи.  В отличие от классической архитектуры, где выбирается подходящий навык, здесь текст проходит через все навыки, после чего выбирается подходящий ответ. Также каждый навык использует результаты обработки предыдущей фразы от всех навыков. При таком подходе требуется больше ресурсов, но он позволяет существенно увеличить точность. Схематично процесс обработки фразы пользователя представлен на рисунке .
 +
 +
[[Файл : Ds-cortana-arch.png | 350px | thumb | right |
 +
Рисунок . Архитектура]]
  
 
== Фреймворки ==
 
== Фреймворки ==
Строка 97: Строка 110:
 
===  DeepPavlov.ai ===
 
===  DeepPavlov.ai ===
  
Включает множество компонентов, при помощи которых создаются скилы. Множество скилов объединяются в диалоговый агент с которым взаимодействуют пользователи на естественном языке.  
+
Основывается на таких библиотеках как TensorFlow, Keras и PyTorch. Включает множество компонентов, каждый из которых решает отдельюу задачу диалоговых систем. Имеется модель для распознавания именованных сущностей, намерений, обработки истории диалога, анализа поведения пользователя и другие. Поведение агента диалоговой системы определяется набором навыков, каждый из которых строится из модулей. Когда агент получает фразу пользователя, специальный менеджер решает, какому навыку передать ее для обработки.  
  
'''from''' deeppavlov.agents.default_agent.default_agent '''import''' DefaultAgent
+
[[Файл : Ds-dp-arch.png | 300px | thumb | right |
'''from''' deeppavlov.skills.pattern_matching_skill '''import''' PatternMatchingSkill
+
Рисунок . Схема ядра DeepPavlov]]
'''from''' deeppavlov.agents.processors.highest_confidence_selector '''import''' HighestConfidenceSelector
 
  
<font color="green"># Настраиваем качество, выставляя ef:</font>
+
{|-valign="top"
hello = PatternMatchingSkill(
+
|[[Файл: Ds-deeppavlov-hello.png | thumb | 600px | Рисунок . Тривиальный бот на DeepPavlov ]]
        responses=['Hello world!'],
+
  |}
        patterns=['hi', 'hello', 'good day'])
 
<font color="green"># Настраиваем качество, выставляя ef:</font>
 
bye = PatternMatchingSkill(
 
        ['Goodbye word!', 'See you around.'],
 
        ['bye', 'chao', 'see you'])
 
  <font color="green"># Настраиваем качество, выставляя ef:</font>
 
fallback = PatternMatchingSkill([
 
        'I don\'t understand, sorry.',
 
        'I can say "Hello world!"'])
 
skill_manager = HighestConfidenceSelector()
 
HelloBot = Agent([hello, bye, fallback], skills_selector=skill_manager)
 
'''print'''(HelloBot(['Hello!', 'Boo...', 'Bye.']))
 
  
'''import''' hnswlib
 
'''import''' numpy '''as''' np
 
 
dim = 128
 
num_elements = 10000
 
 
<font color="green"># Создаём тестовые данные.</font>
 
data = np.float32(np.random.random((num_elements, dim)))
 
data_labels = np.arange(num_elements)
 
 
<font color="green"># Создаём иерархический маленький мир в L2.</font>
 
<font color="green"># Возможные метрики {{---}} l2, cosine, ip (L2, косинус угла между векторами, скалярное произведение).</font>
 
p = hnswlib.Index(space = 'l2', dim = dim)
 
 
<font color="green"># Инициализируем структуру.</font>
 
p.init_index(max_elements = num_elements, ef_construction = 200, M = 16)
 
 
<font color="green"># Добавляем данные (можно вызывать много раз).</font>
 
p.add_items(data, data_labels)
 
 
<font color="green"># Настраиваем качество, выставляя ef:</font>
 
p.set_ef(50) <font color="green"># ef должно быть > k</font>
 
 
<font color="green"># Делаем запрос.</font>
 
<font color="green"># k - количество ближайших вершин</font>
 
labels, distances = p.knn_query(data, k = 1)
 
  
 
=== LTP ===
 
=== LTP ===

Версия 22:33, 20 января 2021

Определение

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

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

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


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


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

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

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

Целеориентированные диалоговые системы

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

Классическая архитектура

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

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


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


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


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

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

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

Нейросетевая архитектура

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

Рисунок 3. Нейросетевая архитектура диалоговой системы
  • 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) основана на модели векторного пространства. Текущая фраза пользователя сравнивается со всеми существующим фразами в базе данных. Векторное прдставление текущей истории диалога также сравнивается с векторным представлением диалогов в базе данных. Такой подход позволяет включить информацию о контексте диалога в процесс выбора ответа. Архитектура системы представлена на ирсуке. Прямоугольником обозначены функциональные модули, цилиндром -- репозитории.

Модель с такой архитектурой можно обучить на фильмах,

С генерацией ответов

Системы с генерацией ответов (англ. generation-base) генерируют ответ пословно. Такие системы более гибкие, но фильтровать их сложней.

Существующие диалоговые системы

ELIZA иалоговая система-психоаналитик (сейчас, ее назвали бы чат-бот), родом из 60-ых годов.

DOS (Dialog Operating System) — диалоговая операционная система на основе DeepPavlov.

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

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

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

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

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

Фреймворки

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

DeepPavlov.ai

Основывается на таких библиотеках как TensorFlow, Keras и PyTorch. Включает множество компонентов, каждый из которых решает отдельюу задачу диалоговых систем. Имеется модель для распознавания именованных сущностей, намерений, обработки истории диалога, анализа поведения пользователя и другие. Поведение агента диалоговой системы определяется набором навыков, каждый из которых строится из модулей. Когда агент получает фразу пользователя, специальный менеджер решает, какому навыку передать ее для обработки.

Рисунок . Схема ядра DeepPavlov
Рисунок . Тривиальный бот на DeepPavlov


LTP

Rasa

spaCy

См. также

Примечания

Источники информации