Неросетевой транслятор текстов. Использование рекуррентных нейронных сетей для создания систем машинного перевода и чатботов.
Евгений Борисов среда, 28 июня 2017 г.В этой статье мы поговорим о методе построения трансляторов для текстов на естественных языках.
1. Введение
Методы машинного обучения можно успешно применять для построения трансляторов текстов на естественных языках. К задаче построения транслятора сводится и задача конструирования искусственных собеседников (чатботов), для которой вопросы (входные последовательности слов) транслируются в ответы (выходные последовательности слов) на том же языке. Далее мы рассмотрим устройство такого транслятора.2. Использование нейронных сетей для построения транслятора
Неросетевой транслятор текстов состоит из трёх частей.- кодировщик - превращает слова в последовательность цифр
- нейронная сеть - отображает коды одних слов в коды других слов
- декодировщик - превращает последовательность цифр обратно в слова
3. Рекуррентная нейронная сеть как транслятор текстов
Рекуррентная нейронная сеть [2] предназначена для работы с последовательностями, что как раз соответствует случаю обработки текстов, где мы имеем дело с последовательностями слов. Сеть должна работать по схеме "последовательность в последовательность" (sequence 2 sequence).Рис 1: схема работы рекуррентной нейронной сети
Рис 2: схема соединения пары рекуррентных сетей
4. Предварительная подготовка набора данных
Для того чтобы использовать методы машинного обучения нам понадобятся учебные данные, которые представляют собой пары <запрос, ответ>, обе части пары это последовательности слов.Q: How are you?
A: I am fine
Листинг 1: текст из учебного набора
Q: [ PAD, PAD, PAD, ?, you, are, how ]
A: [ i, am, fine, EOS, PAD, PAD, PAD ]
Листинг 2: предварительно обработанный текст из учебного набора
5. Реализация
В этом разделе представим реализацию чатбота на языке python. Чатбот обучался на наборе данных из полутора тысяч пар <запрос, ответ>, собранный из диалогов пьес разных авторов. Код чатбота состоит из следующих четырёх частей.- предварительная подготовка текста
- кодировщик word2vec с использованием python-библиотеки gensim
- нейросетевой транслятор основанный на библиотеках Keras и Seq2Seq [5]
- тест результатов обучения чатбота
Keras: 2.0.5
[i] загружаем данные
[i] загружаем W2V
[i] загружаем параметры сети
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
395 : предположим я не выйду замуж что тогда ?
=> не знаю
572 : а разве плохо быть странной ?
=> ну не до такой степени
1189 : вовсе нет настоящий мир — это свой дом и сад все остальное — гостиница
=> в этом настоящем мире иногда бывает так тоскливо
1330 : не всегда что например мы с тобой нажили вместе ?
=> всё
Листинг 3: результаты тестов
Литература
- Е.С.Борисов О методе кодирования слов word2vec. -- http://mechanoid.kiev.ua/ml-w2v.html
- Е.С.Борисов О рекуррентных нейронных сетях -- http://mechanoid.kiev.ua/neural-net-rnn.html
- 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 - Е.С.Борисов Рекуррентная сеть LSTM -- http://mechanoid.kiev.ua/neural-net-lstm.html
- Fariz Rahman Seq2Seq for Keras -- https://github.com/farizrahman4u/seq2seq