Инструменты, которые позволяют любому человеку общаться с любым другим человеком, действительно делают мир лучше. Розеттский камень был первым из таких инструментов, который превратился в словари и, в конечном итоге, до сложных систем, таких как языковой переводчик, который вы, вероятно, использовали раньше, Google Translate. Глубокое обучение скоро изменит принцип работы этих систем, и модели, которые сделают это возможным, найдут в НЛП всевозможные приложения даже за пределами области машинного перевода (например, создание генератора мнений, который на самом деле будет выполнять часть команды AI-Society взломайте, так что следите за обновлениями).

Давайте сначала поговорим о языковых моделях на основе рекуррентных нейронных сетей (RNN). Йошуа Бенжио предложил использовать статистическое моделирование на основе искусственной нейронной сети для вычисления вероятности появления последовательности слов. Этот подход оказался успешным; однако нейронные сети с прямой связью не позволяют получать последовательности переменной длины в качестве входных данных, что ограничивает возможности модели. Поскольку RNN допускают последовательности переменной длины как на входе, так и на выходе, они, естественно, являются следующим шагом в статистическом моделировании языка. [1] Архитектура RNN представлена ​​на схеме ниже.

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

Это основы RNN. Однако простые архитектуры RNN имеют проблемы, которые были исследованы Bengio et al. На практике простые RNN не могут изучать долгосрочные зависимости. Давайте проанализируем следующий пример, в котором мы пытаемся предсказать последнее слово в предложении:

«Я предпочитаю писать свой код на Node JS, потому что я свободно говорю на ______.»

Пробел, вероятно, можно заполнить языком программирования, и если вы знаете о бэкэнд-разработке, вы можете знать, что ответ - JavaScript. Для того, чтобы программа знала это, ей нужен некоторый контекст о Node JS и JavaScript из другого места в тексте. Эту проблему решают два причудливых типа RNN: Long-Short-Term Memories (LSTM) и Gated Recurrent Units (GRU). В документации TensorFlow есть потрясающий учебник по языковому моделированию с помощью LSTM, поэтому для целей этого сообщения в блоге мы сделаем то же самое с GRU.

Стробированные рекуррентные единицы

ГРУ были введены Чо и др. Основная идея, лежащая в основе этой архитектуры, состоит в том, чтобы сохранить память для фиксации зависимостей на большом расстоянии и позволить сообщениям об ошибках передаваться с разной интенсивностью в зависимости от входных данных.

Вместо вычисления скрытого слоя на следующем временном шаге GRU сначала вычисляет вентиль обновления (который является другим слоем), принимая текущий вектор слова и скрытое состояние в качестве параметров.

Затем вычисляется вентиль сброса по тому же уравнению, но с разными весами.

Если вентиль сброса равен 0, он сохраняет в памяти только информацию о новом слове (сброс).

Текущий временной шаг объединяет текущий и предыдущий временные шаги для вычисления окончательной памяти.

Теперь, когда вы понимаете архитектуру ячейки ГРУ, вы можете делать несколько действительно интересных вещей. Например, вы можете обучить эту модель и сравнить недоумение, которое дает LSTM по сравнению с ГРУ. Вы также можете изменить этот фрагмент кода и создать свой собственный языковой переводчик, используя GRU вместо LSTM.

Последние мысли

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

РЕДАКТИРОВАТЬ: статьи, цитируемые в этом сообщении, относятся к 2015 году и ранее. В марте 2017 года - в день написания этой статьи - нам сообщили, что эти системы уже используются в производственной среде и заменяют упомянутые байесовские системы.

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