Нейронный машинный перевод с применением GPU. Вводный курс. Часть 1

Автор оригинальной публикации: Киунхьюн Чо (Kyunghyun Cho)

Нейронный машинный перевод (НМП, neural machine translation, NMT) – это недавно предложенная концепция машинного перевода, основанная исключительно на нейронных сетях. В этой статье мы рассмотрим простую модель типа кодер-декодер (encoder-decoder model), используемую для создания системы нейронного машинного перевода [Cho et al., 2014; Sutskever et al., 2014; Kalchbrenner and Blunsom, 2013]. В следующей статье я расскажу, каким образом в рамках данной модели может быть реализован механизм внимания (attention mechanism) [Bahdanau et al., 2015], позволяющий получить передовую модель машинного перевода для нескольких языковых пар, включая такие, как анг-фра, анг-нем, анг-тур и анг-кит [Gulcehre et al., 2015; Jean et al., 2015]. Кроме того, я представлю недавно опубликованную работу, в которой нейронный машинный перевод применяется для создания описаний к изображениям и видеоматериалам [Xu et al., 2015; Li et al., 2015].

Статистический машинный перевод

Начнем с краткого обзора машинного перевода. Термин «машинный перевод» говорит сам за себя. Мы хотим, чтобы машина перевела предложение на одном языке, называемое исходным предложением, в соответствующее предложение на другом языке, называемое целевым предложением. (В идеале, машина должна быть в состоянии перевести весь документ, но в этой статье мы сосредоточимся на машинном переводе уровня предложения.)

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

Статистический подход к машинному переводу называется статистическим машинным переводом. Цель та же (создать машину, способную переводить предложения с одного языка на другой), но вместо того, чтобы формировать для машины набор правил перевода, мы даем ей возможность самостоятельно обучиться этим правилам (см. рис. 1). Обучение основывается на статистических методах, знакомых каждому, кто прошел базовый курс машинного обучения. По сути, статистический машинный перевод – это не что иное, как частное приложение машинного обучения, где задачей является поиск функции, выполняющей отображение исходного предложения на целевое предложение.

Рисунок 1. Статистический машинный перевод

Важной характеристикой машинного перевода является то, что искомая функция выполняет отображение, не являющееся отображением «один к одному» или «многие к одному», как в ряде других приложений машинного обучения (например, в задаче классификации происходит отображение «многие к одному»). Вместо этого выполняется отображение «один ко многим», в том смысле, что одно исходное предложение, может иметь много вариантов перевода. В связи с этим мы моделируем функцию перевода не как детерминированную функцию, а как условную вероятность p(y|x) целевого предложения (перевода) y при данном x. Условная вероятность может присвоить одинаково высокую вероятность нескольким различным конфигурациям (предложениям), в результате чего мы получаем взаимосвязь «один ко многим» между исходным и целевыми предложениями.

Предположим, что мы хотим создать систему статистического машинного перевода с английского на французский. В качестве первого и, вероятно, самого важного шага необходимо собрать пары исходных предложений и их переводов. Я буду использовать xn и yn для обозначения исходного предложения и целевого предложения соответственно. Верхний индекс n означает, что это n-ая пара из большого набора пар (обычно, чтобы обучить хорошую модель, требуются десятки или сотни тысяч пар). Набор данных, содержащий N пар, обозначим как D = (x1, y1), …, (xN, yN).

Где же нам взять эти обучающие пары? В случае широко распространенных языков можно обратиться к материалам «Семинара по статистическому машинному переводу» (Workshop on Statistical Machine Translation) или «Международного семинара по переводу разговорного языка» (International Workshop on Spoken Language Translation).

Имея в наличии обучающий набор данных D = (x1, y1), …, (xN, yN), мы можем оценить модель, определив, насколько хорошо она работает на обучающих данных D. Для оценки модели применяется логарифмическая функция правдоподобия (log-likelihood). Лог-правдоподобие модели представляет собой среднее значение лог-правдоподобия для каждой пары (xn, yn). В рамках вероятностной интерпретации модели машинного перевода лог-правдоподобие модели для каждой пары показывает, насколько высокую лог-вероятность (log-probability) модель присвоила данной паре: log p(yn|xn, θ), где θ – набор параметров модели. Тогда общая оценка модели на обучающих данных будет следующей:

Если лог-правдоподобие L имеет малое значение, это говорит о том, что модель не присваивает достаточную вероятностную массу правильно переведенным парам, то есть расходует ее впустую на неправильно переведенные пары. Следовательно, необходимо найти такую конфигурацию модели, то есть такие значения параметров θ, которые максимизируют лог-правдоподобие.

В области машинного обучения этот метод называется методом максимального правдоподобия (maximum likelihood estimation). Но у нас остался нерешенным, возможно, более важный вопрос: каким образом моделировать p(y|x, θ)?

Статистический машинный перевод (почти) с нуля

Вопрос о том, как моделировать условное распределение p(y|x), является открытым уже в течение длительного времени. Впервые он был рассмотрен более 20 лет назад в научно-исследовательском центре имени Т. Дж. Уотсона компании IBM (IBM T.J. Watson Research Center) [Brown et al., 1993]. С тех пор основным направлением исследований в области статистического машинного перевода является лог-линейная модель (log-linear model), в которой логарифм истинной p(y|x) аппроксимируется с помощью линейной комбинации многих признаков:

где C – константа нормализации. В этом случае большая часть исследований сводится к поиску хорошего набора функций признаков (feature function) fi. По данной теме существует очень хорошая книга, охватывающая все детали [Koehn, 2009].

При таком подходе к статистическому машинному переводу часто единственной задачей машинного обучения является поиск хорошего набора параметров θi, которые балансируют между различными признаками, или фильтрация/переранжирование (filter/re-rank) набора потенциальных переводов, декодированных из лог-линейной модели [Schwenk, 2007]. Более конкретно, нейронные сети были использованы, как часть функций признаков, и для переранжирования так называемых списков n-лучших возможных переводов, как показано в средней и правой секциях рисунка 2.

Рисунок 2. Нейронный машинный перевод. Статистический машинный перевод + переранжирование с помощью нейронной сети. Статистический машинный перевод — нейронная сеть. Источник: слайды для конференции ICLR 2015 [Bahdanau et al., 2015].

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

Нейронный машинный перевод

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

Полностью обучаемая НМП-модель M получает как можно более естественное представление (raw representation) исходного предложения и генерирует как можно более естественное представление целевого предложения. В данном случае наиболее естественным представлением предложения будем считать последовательность слов. (Это неверно для большинства языков, но без потери общности, мы будем рассматривать слово, как наименьшую единицу.) Каждое слово последовательности представлено целочисленным индексом в словаре. Например, в словаре английского языка, отсортированном по частоте, перовое слово будет представлено целым числом 1. Обозначим исходное предложение как X = (x1, x2, …, xT), а целевое предложение как Y = (y1, y2, …, yT ‘).

При данной исходной последовательности индексов слов X = (x1, x2, …, xT) НМП-модель M вычисляет условную вероятность для Y = (y1, y2, …, yT ‘). Далее мы обсудим, как создать нейронную сеть, чтобы аппроксимировать эту условную вероятность p(Y|X).

Рекуррентные нейронные сети

Важной особенностью машинного перевода, а также любой другой задачи, связанной с естественным языком, является переменная длина входа X = (x1, x2, …, xT) и выхода Y = (y1, y2, …, yT ‘). Другими словами, T и T не являются фиксированными.

Чтобы работать со входом и выходом переменной длины, необходимо использовать рекуррентную нейронную сеть (РНС, recurrent neural network, RNN). Широко применяемые нейронные сети прямого распространения (feedforward neural network), такие как сверточные нейронные сети (convolutional neural network), не хранят информацию о внутреннем состоянии, используя только собственные параметры сети. Каждый раз, когда элемент данных подается в нейронную сеть прямого распространения, внутреннее состояние сети (то есть функции активации скрытых нейронов) вычисляется заново. При этом на него не оказывает влияние состояние, вычисленное при обработке предыдущего элемента данных. В отличие от этого, РНС сохраняет свое внутренне состояние при чтении входной последовательности элементов данных, являющейся в нашем случае последовательностью слов. Следовательно, РНС способна обрабатывать входные данные произвольной длины.

Давайте рассмотрим этот вопрос более подробно. Основная идея РНС заключается в том, чтобы с помощью рекурсии сформировать из входной последовательности символов вектор фиксированной размерности. Предположим, что на шаге t мы имеем вектор ht-1, представляющий собой историю всех предыдущих символов. РНС вычислит новый вектор ht (то есть свое внутреннее состояние), который объединяет все предыдущие символы (x1, x2, …, xt-1), а также новый символ xt с помощью:

где φθ – функция, параметризованная посредством θ, которая принимает на входе новый символ xt и историю ht-1 до (t-1)-го символа. Изначально мы можем смело предположить, что h0 – нулевой вектор.

Рисунок 3. Различные типы рекуррентных нейронных сетей. Источник: [Pascanu et al., 2014]

Рекуррентная функция активации φ обычно реализуется, например, как простое аффинное преобразование (affine transformation), за которым следует поэлементная нелинейная функция:

В этом выражении присутствуют следующие параметры: входная весовая матрица W, рекуррентная весовая матрица U и вектор смещения (bias vector) b. Следует отметить, что это не единственный вариант. Существует обширное пространство для разработки новых рекуррентных функций активации. Некоторые примеры изображены на рисунке 3.

Этот простой тип РНС может быть очень легко реализован, например, с помощью библиотеки Theano, благодаря которой РНС может работать как на CPU, так и на GPU. Обратитесь к руководству «Рекуррентные нейронные сети с векторным представлением слов» (Recurrent Neural Networks with Word Embeddings). Примечательно, что весь код, реализующий РНС, содержит менее 10 строк!

Недавно было обнаружено, что можно повысить эффективность обучения РНС с помощью более сложных функций активации, например, используя нейроны с длительной кратковременной памятью (long short-term memory unit, LSTM) [Hochreiter and Schmidhuber, 1997] и управляемые рекуррентные нейроны (gated recurrent unit) [Cho et al., 2014].

Как и в случае с простой рекуррентной функцией активации, в данном случае присутствуют следующие параметры: входные весовые матрицы W, Wr, Wu; рекуррентные весовые матрицы U, Ur, Uu; векторы смещения b, br, bu.

Хотя этот подход кажется намного более сложным, чем обычная РНС, тем не менее реализация с помощью Theano или любого другого фреймворка для глубокого обучения, такого как Torch, является настолько же простой. Вы можете обратиться к следующему руководству: «Применение LSTM-сетей для анализа тональности текста» (LSTM Networks for Sentiment Analysis) (пример кода).

Я рассмотрел РНС в свете формирования истории, но они также могут быть использованы для вероятностного моделирования последовательности. Под вероятностным моделированием последовательности я подразумеваю применение такой модели машинного обучения, которая вычисляет вероятность p(X) для любой заданной последовательности X = (x1, x2, …, xT). Как мы можем представить p(X) в рекуррентной форме?

Перепишем выражение p(X) = p(x1, x2, …, xT) в следующем виде:

который вытекает из определения условной вероятности:

Отсюда мы можем вывести рекуррентную формулу:

Затем РНС моделирует p(xt|xt) в каждый момент времени t с помощью следующих формул:

gθ дает на выходе распределение вероятностей, обусловленное всей историей до (t-1)-го символа, посредством ht-1. Другими словами, на каждом шаге РНС пытается предсказать следующий символ на основании истории входных символов.

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

  • Graves, Alex. “Generating sequences with recurrent neural networks.” arXiv preprint arXiv:1308.0850 (2013).
  • Pascanu, Razvan et al. “How to construct deep recurrent neural networks.” arXiv preprint arXiv:1312.6026 (2013).
  • Boulanger-Lewandowski, Nicolas, Yoshua Bengio, and Pascal Vincent. “Modeling temporal dependencies in high-dimensional sequences: Application to polyphonic music generation and transcription.” arXiv preprint arXiv:1206.6392 (2012).
  • Mikolov, Tomas et al. “Recurrent neural network based language model.” INTERSPEECH 2010, 11th Annual Conference of the International Speech Communication Association, Makuhari, Chiba, Japan, September 26-30, 2010 1 Jan. 2010: 1045-1048.
  • Hochreiter, Sepp, and Jürgen Schmidhuber. “Long short-term memory.” Neural computation 9.8 (1997): 1735-1780.
  • Cho, Kyunghyun et al. “Learning phrase representations using rnn encoder-decoder for statistical machine translation.” arXiv preprint arXiv:1406.1078 (2014).
  • Bengio, Yoshua, Patrice Simard, and Paolo Frasconi. “Learning long-term dependencies with gradient descent is difficult.” Neural Networks, IEEE Transactions on 5.2 (1994): 157-166.

Что пройдено, и что дальше?

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

Целью этой серии статей является знакомство читателя с парадигмой нейронного машинного перевода. В данной статье были рассмотрены базовые понятия, в частности, две ключевые возможности РНС: обобщение последовательностей и вероятностное моделирование последовательностей.

Опираясь на пройденный материал, в следующей статье мы непосредственно рассмотрим систему нейронного машинного перевода, реализованную на основе РНС. Также я объясню вам, почему GPU так важны для нейронного машинного перевода.

По материалам: Nvidia

Перевод Станислава Петренко

Добавить комментарий

Ваш адрес email не будет опубликован.

закрыть

Поделиться

Отправить на почту
закрыть

Вход

закрыть

Регистрация

+ =