на главную ] 

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

Евгений Борисов

среда, 28 июня 2017 г.


В этой статье мы поговорим о методе построения трансляторов для текстов на естественных языках.

1. Введение

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

Далее мы рассмотрим устройство такого транслятора.

2. Использование нейронных сетей для построения транслятора

Неросетевой транслятор текстов состоит из трёх частей.
  1. кодировщик - превращает слова в последовательность цифр
  2. нейронная сеть - отображает коды одних слов в коды других слов
  3. декодировщик - превращает последовательность цифр обратно в слова
Для реализации кодировщика и декодировщика можно воспользоваться методом word2vec [1]. Если мы конструируем чатбот, то входные и выходные последовательности слов принадлежат одному языку и нам достаточно одного словаря word2vec, для задачи машинного перевода нам понадобятся два словаря, т.е. свой словарь для каждого языка.

В качестве транслятора кодов слов мы будем использовать рекуррентную нейронную сеть и в следующем разделе рассмотрим эту подзадачу подробней.

3. Рекуррентная нейронная сеть как транслятор текстов

Рекуррентная нейронная сеть [2] предназначена для работы с последовательностями, что как раз соответствует случаю обработки текстов, где мы имеем дело с последовательностями слов. Сеть должна работать по схеме "последовательность в последовательность" (sequence 2 sequence).

rnn neural net one-many
Рис 1: схема работы рекуррентной нейронной сети

На рис.1 представлена развёрнутая во времени схема работы такой рекуррентной нейронной сети, где $h_t$ - состояние памяти сети в момент времени $t$, $x_i$ - входной образ номер $i$, $y_j$ - цепочка выходов сети.

Для реализации схемы на рис.1 будем использовать пару [3] рекуррентных нейронных сетей LSTM [4].

rnn seq2seq
Рис 2: схема соединения пары рекуррентных сетей

Первая сеть принимает входную последовательность (рис.2) и генерирует её внутреннее представление для входа второй сети, которая генерирует выходную последовательность.

4. Предварительная подготовка набора данных

Для того чтобы использовать методы машинного обучения нам понадобятся учебные данные, которые представляют собой пары <запрос, ответ>, обе части пары это последовательности слов.

Q: How are you? A: I am fine
Листинг 1: текст из учебного набора

Сеть LSTM обучается на последовательностях фиксированного размера, её размер может определяться размером самой длинной последовательности из учебного набора. Последовательности слов меньшего размера дополняются служебным словом PAD до нужной длинны. Кроме того, входная последовательность перестраивается в обратном порядке, выходная последовательность завершается служебным словом EOS. Это может выглядеть следующим образом.

Q: [ PAD, PAD, PAD, ?, you, are, how ] A: [ i, am, fine, EOS, PAD, PAD, PAD ]
Листинг 2: предварительно обработанный текст из учебного набора

5. Реализация

В этом разделе представим реализацию чатбота на языке python. Чатбот обучался на наборе данных из полутора тысяч пар <запрос, ответ>, собранный из диалогов пьес разных авторов. Код чатбота состоит из следующих четырёх частей.
  1. предварительная подготовка текста
  2. кодировщик word2vec с использованием python-библиотеки gensim
  3. нейросетевой транслятор основанный на библиотеках Keras и Seq2Seq [5]
  4. тест результатов обучения чатбота

Ниже (листинг 3) представлены результат тестов, более подробный отчёт можно посмотреть [здесь].

Keras: 2.0.5 [i] загружаем данные [i] загружаем W2V [i] загружаем параметры сети - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 395 : предположим я не выйду замуж что тогда ? => не знаю 572 : а разве плохо быть странной ? => ну не до такой степени 1189 : вовсе нет настоящий мир — это свой дом и сад все остальное — гостиница => в этом настоящем мире иногда бывает так тоскливо 1330 : не всегда что например мы с тобой нажили вместе ? => всё
Листинг 3: результаты тестов

Полный текст программы можно скачать [здесь].

Литература

  1. Е.С.Борисов О методе кодирования слов word2vec. -- http://mechanoid.kiev.ua/ml-w2v.html
  2. Е.С.Борисов О рекуррентных нейронных сетях -- http://mechanoid.kiev.ua/neural-net-rnn.html
  3. Ilya Sutskever, Oriol Vinyals, Quoc V. Le Sequence to Sequence Learning with Neural Networks
    -- http://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf
  4. Е.С.Борисов Рекуррентная сеть LSTM -- http://mechanoid.kiev.ua/neural-net-lstm.html
  5. Fariz Rahman Seq2Seq for Keras -- https://github.com/farizrahman4u/seq2seq
При использовании материалов этого сайта, пожалуйста вставляйте в свой текст ссылку на мою статью.