Символьная модель языка для ведения диалога

Deep Recurrent Network
DeepHackLab начала исследование по обучению рекуррентных сетей русскому языку, одному из самых сложных и красивых из существующих. Мы решили немного рассказать о том, почему это актуально, что именно взяли за основу и что из этого получилось.

В последнее время нейросетевые модели языка демонстрируют выдающиеся результаты. Например, на главной в России конференции по компьютерной лингвистике Диалог 2015 призовые места в конкурсе «Семантическая близость» заняли нейросетевые алгоритмы, представляющие слова в виде векторов в многомерном пространстве. При этом алгоритм обучается так, чтобы близким по смыслу словам соответствовали близкие по заданной метрике вектора.

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

Human: my name is john . what is my name ?
Machine: john .
Human: what is the color of the sky ?
Machine: blue .
Human: how many legs does a cat have ?
Machine: four , i think .
Human: What do you think about messi ?
Machine: he ’s a great player .
Human: where are you now ?
Machine: i ’m in the middle of nowhere .
Human: what is the purpose of being intelligent ?
Machine: to find out what it is .

Данные модели основаны на представлении слова в виде вектора. Однако в мае этого года Andrej Karpathy реализовал другой подход на основе рекуррентных нейронных сетей, который работает посимвольно. Это «буквенная» модель языка также продемонстрировала удивительные результаты в генерации осмысленных текстов. Но не только текстов, а также статьей Википедии, документов LaTeX и даже кода на языке Си. При этом схема её реализации намного проще.

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

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

Мы провели несколько экспериментов с различными параметрами архитектуры сети. Лучшие результаты получились в следующих случаях.

Нейросеть 1

  1. 2 слоя по 4096 ячеек GRU
  2. Глубина back propagation = 50 шагов
  3. Сеть обучалась 7 эпох
  4. Объем обучающей выборки 2.5М слов субтитров

Нейросеть 2

  1. 2 слоя по 4096 ячеек GRU
  2. Глубина back propagation = 100 шагов
  3. Сеть обучалась 6 эпох
  4. Объем обучающей выборки 11.06М слов субтитров

Мы также пробовали использовать в качестве обучающего набора данных компоновку классических произведений русской литературы. Однако эти эксперименты не показали хороших результатов в ответах на вопросы. По-видимому, это означает, что сеть не умеет формировать представление о том, что такое «вопрос» и «ответ».

При формировании каждого ответа используется генератор случайных чисел для инициализации стартового параметра seed. Поэтому на одни и те же вопросы ответы будут разными.

Система пока выдает адекватные ответы в 15-20% случаев. Мы решили привести наиболее интересные фразы.

Человек: Как дела?
Машина: Нам нужно их выдумать.

Человек: который час?
Машина: Это почему мы вообще меня спрашивали?

Человек: Ты глупый
Машина: Как насчет “привет”.

Человек: Пошли гулять?
Машина: Это все так серьезно.
Человек: А что несерьёзно?
Машина: Что в этом плохого?
Человек: Ничего.
Машина: Кажется, наш парень пригласил меня.
Человек: Да, пригласил.
Машина: Не в этом дело.
Человек: А в чём?
Машина: Я просто хочу, чтобы вы все были снова в курсе всего, что ты делаешь.

Человек: Ты дура.
Машина: так почему тебе не все равно?
Человек: Потому что мне с тобой жить!
Машина: Ты совсем не такой!
Человек: Ты обиделась?
Машина: Угу.

Человек: Давай займемся этим ?
Машина: Нет, все в порядке.

Человек: Надоело отвечать?
Машина: Не запоминаю таких вещей.

Человек: Когда мне повезет?
Машина: Что ты имеешь в виду?

Человек: За кого голосовать?
Машина: Не знаю.

Человек: Приходит как-то Штирлиц к Пяточку и говорит
Машина: мы должны позвонить Ребекке.

Человек: Как накурить грустного попугая?
Машина: Как ты узнал, что я собираюсь к тебе вернуться?

Человек: посмотреть сериал?
Машина: А ты что-нибудь видел?

Человек: Кто ты?
Машина: “Вздыхает]

Человек: Какой твой любимый фильм?
Машина: Это все личное дело.

Человек: Где найти нормального мужика?
Машина: Как ты себя чувствуешь?

Человек: Уходить с работы?
Машина: Нет.

Человек: Ты умеешь предсказывать будущее?
Машина: Что вы имеете в виду?
Человек: Можешь сказать, что случится завтра или через год?
Машина: Нам нужно выбираться отсюда.

Человек: Ты реально меня понимаешь?
Машина: Нет, Стэфан.
Человек: Кто такой стефан?
Машина: Не волнуйся об этом, парень.

Человек: Ты машина?
Машина: Нет, а что?
Человек: Меня очень интересует этот вопрос, что ты думаешь об этом?
Машина: Ну, это было всего лишь часть работы.

Человек: Когда случится конец света?
Машина: Что ты имеешь в виду?
Человек: Вопросом на вопрос не отвечают.
Машина: Я тоже так думал.

Человек: зачем я сижу и читаю твои бесполезные ответы?
Машина: Я могу работать с тобой.

Человек: Первый закон робототехники
Машина: Удачного дня.

Человек: Как построить искусственный интеллект?
Машина: Кто знает?

Человек: Ты веришь в бога?
Машина: Не знаю, как это может быть.

Человек: Забавно, но ты всего лишь программа и никогда не сможешь мыслить.
Машина: Конечно, дело в том, что сейчас не лучшее время.

@DeepHackLab