людей
Святой Грааль машинного перевода — это система «черного
ящика», которая учится переводить самостоятельно, просто просматривая
обучающие данные. А статистический машинный перевод все еще требует
участия людей в создании и настройке многошаговых статистических
моделей.
В 2014 году команда KyungHyun Cho сделала прорыв. Она нашли
способ применить глубокое обучение для создания системы «черного
ящика». Их модель обучения принимает параллельный корпус и
использует его, чтобы научиться переводить два языка без вмешательства
человека.
Это становится возможным благодаря двум идеям — рекуррентные
нейронные сети (recurrent neural networks) и кодировки (encodings).
Грамотно комбинируя эти две идеи, мы можем создать самообучающуюся
систему перевода.
Рекуррентная нейронная сеть (сокращенно RNN — Recurrent Neural
Network) представляет собой немного измененную версию нейронной
сети, где предыдущее состояние нейронной сети является одним из входов
к следующему вычислению. Это означает, что предыдущие расчеты
влияют на результаты будущих расчетов. Этот трюк позволяет нейронным
сетям находить закономерности и шаблоны в последовательности данных.
Например, вы можете использовать его, чтобы предсказать следующее
наиболее вероятное слово в предложении, если знаете первые несколько
слов. RNN полезны тогда, когда вы хотите работать с шаблонами данных.
Поскольку человеческий язык — всего лишь один большой, сложный
шаблон, RNN все чаще используются во многих областях для обработки
естественного языка.
Кодировки
Мы можем придумать кодировку, которая представляет все
возможные предложения в виде последовательности уникальных чисел.
Чтобы сгенерировать кодировку, мы будем давать RNN по одному слову
за раз. После обработки последнего слова мы получим значение,
соответствующее всему предложению. теперь у нас есть способ
представить целое предложение как набор уникальных чисел! Мы не
знаем, что означает каждый номер в кодировке, но это не имеет большого
значения. Пока каждое предложение однозначно идентифицируется
собственным набором чисел, нам не нужно точно знать, как эти числа
были сгенерированы. Итак, мы знаем, как использовать RNN для
кодирования предложения в виде набора уникальных чисел.
Что, если мы возьмем две RNN и соединим их? Первая RNN может
генерировать кодировку, представляющую предложение. Тогда вторая
RNN могла бы принять эту кодировку и выполнить обратную операцию,
декодировать исходное предложение. Конечно, кодировать и снова
декодировать исходное предложение не особо-то полезно. Но что, если
мы могли бы обучить вторую RNN декодировать предложение не на языке
ввода, а другом языке? Мы могли бы использовать наши параллельные
корпуса, чтобы обучить ее этому. Таким образом мы получим общий
способ преобразования последовательности слов одного языка в
эквивалентную последовательность слов другого.
Это очень сильная идея:
Во-первых, этот подход ограничен лишь количеством обучающих
данных и количеством вычислительной мощности, которую вы можете
выделить на перевод. Исследователи машинного обучения изобрели этот
метод всего 5 лет назад, но такие системы уже работают лучше, чем
статистические системы машинного перевода, на разработку которых
ушло 20 лет.
Во-вторых, система не зависит от знания каких-либо правил языка.
Алгоритм сам определяет эти правила. Это означает, что вам не нужны
эксперты, которые должны настраивать каждый шаг вашего конвейера
переводов. Компьютер сделает это за вас.
И наконец, этот подход работает практически для всех
последовательных задач.
Обратите внимание, что мы опустили некоторые проблемы, которые
необходимо решить, чтобы запустить эту систему на реальных данных.
Например, нам нужно решить проблему с различными длинами
предложений ввода и вывода (см. bucketing and padding). Также есть
проблемы с переводом редких слов.
На практике качество NMT зависит от
Огромный объем переведенных данных (слова, сегменты
предложений и уже переведенные тексты)
Качество перевода, обеспечиваемое для повышения
надежности и сложности результатов.
Мощность компьютеров, используемых для создания моделей,
а также в некоторых случаях для обработки переводов в
реальном времени.
Сервисы перевода компаний Google, Яндекс, Microsoft и PROMT
уже используют нейронный перевод. Google использует нейронный
машинный перевод Google (GNMT) вместо ранее используемых
статистических методов. Майкрософт использует похожую технологию
для перевода речи (в том числе в Майкрософт Переводчике и Skype
Переводчике). Гарвардской группой по обработке естественного языка
была выпущена OpenNMT, система нейронного машинного перевода с
открытым исходным кодом. Яндекс.Переводчик имеет гибридную модель:
свой вариант перевода предлагает и статистическая модель, и нейросеть.
После этого технология CatBoost, в основе которой лежит машинное
обучение, будет выбирать лучший из полученных результатов.