В предыдущем посте мы говорили о поисковых чат-ботах. В этом посте мы рассмотрим генеративные чат-боты.

Недостатком ботов, основанных на поиске, является то, что они ограничены хранилищем возможных ответов. Модели на основе генерации имеют возможность генерировать динамические ответы в зависимости от текущего высказывания пользователя и истории диалога. Как правило, вы должны использовать модель Seq2Seq, состоящую из двух компонентов: кодировщик LSTM и декодер LSTM. Кодер кодирует входную последовательность (также называемую исходной последовательностью) в вектор фиксированной размерности, вывод последнего скрытого слоя кодировщика. Этот вектор вводится в декодер, который генерирует выходные данные (также называемые целевой последовательностью). На следующем рисунке показано, как это будет работать

Формально мы вычисляем условную вероятность выходной последовательности 'y' при заданной входной последовательности 'x', обусловленной предыдущими значениями метки времени для 'y. em>' и представление промежуточного вектора 'v' (эквивалентно 'мысленному вектору', показанному на рисунке выше) . Кодер кодирует исходную последовательность в представление скрытого состояния ‘v’, которое затем используется декодером для создания целевой последовательности.

Потенциальная проблема с этим подходом кодировщик-декодер заключается в том, что модель должна иметь возможность сжимать всю необходимую информацию об исходном предложении в вектор фиксированной длины, что затрудняет работу с длинными предложениями. Чтобы решить эту проблему, исследователи представили модель, которая использует механизм мягкого поиска, чтобы сосредоточиться на определенном наборе позиций в исходной последовательности. Эти позиции составляют части последовательности, которые содержат наиболее важную информацию, которая может помочь процессу генерации. Затем модель предсказывает целевое слово на основе векторов контекста, связанных с этими позициями в исходной последовательности, и всеми ранее сгенерированными целевыми словами. Есть очень интересное чтение о нейронном машинном переводе, которое объясняет использование механизма внимания для последовательностей моделей в языковом переводе. На следующем рисунке показано, как слои внимания учатся фокусироваться на разных частях входных данных при создании выходных данных.

Ради забавы я обучил модель seq2seq с вниманием к
Корнеллскому корпусу диалогов фильмов. Набор данных включает 220 579 разговоров между 10 292 парами киногероев с участием 9 035 персонажей из 617 фильмов. Ниже приведен скриншот того, как выглядел разговор:

Бот, кажется, уловил смесь символов и говорит бегло, но абсолютно бессвязно.

Улучшения

Было проведено много исследований по усовершенствованию простой архитектуры кодер-декодер, описанной выше. Один из подходов называется Декодер иерархического рекуррентного кодирования (HRED), который фокусируется не только на текущем входном запросе, но и на всей истории диалога. Каждая выходная последовательность моделируется двухуровневой иерархией — все последовательности высказываний и каждое высказывание как последовательности слов. Для этого он использует два кодировщика — один кодировщик для представления на уровне высказывания и один кодировщик для представления на уровне сеанса. Каждое высказывание детерминировано кодируется в вектор, который передается кодировщику уровня сеанса, который обновляет свое внутреннее скрытое состояние, чтобы обобщить разговор до этого момента времени. Выходные данные кодера уровня сеанса передаются декодеру для генерации ответа. Подробнее можно узнать здесь

Иерархическая сеть периодического внимания (HRAN)

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

Вывод

Мы рассмотрели несколько возможных подходов для генеративных чат-ботов. Хотя ответы беглые, генеративным чат-ботам все еще трудно поддерживать согласованность ответов. В следующем посте мы увидим некоторые гибридные системы, которые сочетают поисковые чат-боты с генеративными чат-ботами.

использованная литература

Дмитрий Богданов, Кёнхён Чо и Йошуа Бенгио. 2015. Нейронный машинный перевод путем совместного обучения выравниванию и переводу. ICLR

Минь-Тханг Луонг, Хье Фам и Кристофер Д. Мэннинг. 2015. Эффективные подходы к нейронному машинному переводу на основе внимания. ЭМНЛП.

Илья Суцкевер, Ориол Виньялс и Куок В. Ле. 2014. Последовательность за последовательностью обучения с помощью нейронных сетей. НИПС

Алессандро Сордониф, Йошуа Бенгиоф, Хоссейн Вахабиг, Кристина Лиома, Якоб Г. Симонсен, Цзянь-Юн Ни. Иерархический рекуррентный кодировщик-декодер для генеративных контекстно-зависимых предложений запросов

Чэнь Син, Вэй Ву, Юй Ву, Мин Чжоу, Ялоу Хуан, Вэй-Ин Ма. Иерархическая сеть периодического внимания для генерации ответов

http://colah.github.io/posts/2015-08-Понимание-LSTMs/