Когда-то мы уже рассказывали о том, как появился и развивался машинный перевод. С тех пор произошло ещё одно историческое событие – его наконец-то покорили нейронные сети и глубокое обучение. Среди задач обработки естественного языка (Natural Language Processing, NLP) машинный перевод одним из первых получил строгое статистическое основание — еще в начале 1990-х. Но в сфере глубокого обучения он оказался относительно запоздавшим участником. В этом посте мы — команда Яндекса по машинному переводу — обсуждаем, почему это заняло так много времени и какие новые возможности открыл машинный перевод на основе нейросетей.

Мы также будем рады ответить на вопросы на встрече «Яндекс изнутри: от алгоритмов до измерений — в Переводчике, Алисе и Поиске» 1 марта (можно зарегистрироваться или задать вопрос в чате трансляции).



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


Всего три года назад почти все серьезные промышленные и исследовательские системы машинного перевода были построены с использованием конвейера статистических моделей («фразовый машинный перевод», ФМП), в котором нейронные сети не участвовали. Фразовый машинный перевод впервые сделал машинный перевод доступным для массового пользователя в начале 2000-х годов. При наличии достаточного количества данных и достаточных вычислительных ресурсов ФМП позволял разработчикам создавать системы перевода, которые в основном давали представление о смысле текста, но изобиловали грамматическими, а иногда и семантическими ошибками.

Конвейер статистических моделей, который использовался для построения систем ФМП, на самом деле довольно замысловат. На основании выровненных обучающих предложений — например, переводов русской новостной статьи на английский — система строит статистическую модель, которая пытается «объяснить» каждое из слов целевого языка словами исходного языка, используя «скрытые» переменные, известные как «выравнивания по словам» (word alignments). Идея интуитивно понятна, а математика (максимизация ожидания, EM-алгоритм) довольно хороша.



Итеративный ЕМ-алгоритм — когда на каждом шаге мы строим наилучшее предположение о том, какие исходные слова соответствуют каким целевым словам, а затем эти «догадки» используются в качестве обучающих данных для следующей итерации — вполне похож на подход, который мы могли бы применить для расшифровки меню на иностранном языке. Проблема в том, что он основан на отдельных словах, а пословный перевод зачастую невозможен.

Модели выравнивания слов вводят различные предположения о независимости, чтобы упростить задачу слишком большой вычислительной сложности (принятие решения о том, какие из 2^{JI} возможных способов выровнять слова в исходном предложении длины I со словами в целевом предложении длины J) до более приемлемых размеров. Например, может быть разработана скрытая марковская модель для решения этой задачи со сложностью O(I^2J).

Модели на основе слов никогда не показывали особенно хороших результатов. И все выглядело довольно печально, пока не был предложен метод построения модели перевода на уровне фразы, поверх выравнивания слов. После этого машинный перевод стал применяться в интернете — для перевода веб-сайтов на иностранных языках или просто в качестве неисчерпаемого источника вдохновения для мемов.

ФМП использует матрицы выравнивания слов, чтобы определить, какие пары фраз в паре предложений могут служить переводами друг для друга. Полученная таблица фраз становится главным фактором в линейной модели, которая вместе с такими компонентами, как языковая модель, используется для генерации и отбора потенциальных переводов.

ФМП очень хорошо запоминает фразы из параллельного корпуса текстов. Теоретически ему достаточно одного единственного примера, чтобы выучить фразовый перевод, если только слова в этом примере относительно хорошо выровнены. Хотя это может производить впечатление беглого владения языком, на самом деле система не очень понимает, что она делает.

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



Что же нам дают нейросети?


Исследователи, занимавшиеся распознаванием речи или изображений, уже давно задумывались о том, как кодировать данные, ведь непрерывный сигнал трудно представить в дискретном мире компьютеров. А вот работающие над обработкой естественного языка об этом не особенно беспокоились. Это казалось довольно простым — можно заменить слова целочисленными идентификаторами и индексировать параметры модели этими числами. Именно так поступают N-граммные языковые модели и системы ФМП.



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

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

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

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

Однако процесс обучения векторным представлениям явно более статистически требователен, чем механическое запоминание примеров, используемое ФМП. Кроме того, непонятно, что делать с теми редкими входными словами, которые недостаточно часто встречались, чтобы сеть могла построить для них приемлемое векторное представление.

Нет предположений о независимости


Переход от дискретных к непрерывным представлениям позволяет нам гораздо более гибко моделировать зависимости. Это в буквальном смысле видно в переводах, которые производит система машинного перевода на основе нейросетей, построенная нами в Яндексе (НМП).



Система, основанная на переводе фраз, неявно предполагает, что каждая исходная фраза может быть переведена независимо от остальной части предложения. Звучит, как рецепт катастрофы, но в дискретной статистической модели это неизбежно, ведь добавка в модель всего лишь одного бита информации о контексте удвоила бы количество параметров. Это известное в нашем деле «проклятие размерности».

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

Состояния декодера и скрытые состояния


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

Вектор скрытых состояний, который обновляется на каждом шаге, может хранить информацию из любой части исходного предложения и любой части уже выполненного к этому моменту перевода. Это отсутствие «явных» предположений о независимости — пожалуй, самое важное различие между системами нейронного и фразового машинного перевода. Именно этим, скорее всего, и объясняется ощущение, что переводы нейронных систем более точно передают общую структуру и значение исходного предложения.

Вычисление динамических зависимостей


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

Научившись «обращать внимание» на различные части исходного и целевого предложений в процессе перевода, сеть пытается решить одну из фундаментальных проблем обработки естественного языка: как превратить линейную последовательность слов во что-то более структурированное, например, дерево.





Собираем все вместе


Нейронные и фразовые системы машинного перевода — совсем непохожие создания. В Яндекс.Переводчике многолетний опыт разработки системы ФМП. В прошлом году мы начали изучать возможности интеграции в наш сервис нейронного машинного перевода.

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

Очевидно, что последние архитектуры НМП могли дать результаты не хуже и даже лучше, чем наша фразовая система. Однако вдруг появились тревожные сигналы в поведении нашей нейронной системы — особенно при переводе пользовательских запросов.

Стоит отметить, что Яндекс.Переводчик стремится быть способным перевести всё, что могут предложить пользователи. И некоторые из них предлагают довольно странные вещи. В результате получается, мягко говоря, некоторое несоответствие обучающих и пользовательских данных.

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

В то время как среднее качество переводов системы ФМП ниже, чем у НМП, дисперсия воспринимаемого качества переводов НМП может быть намного выше.

Похоже, этому есть два объяснения:

  1. ФМП лучше запоминает редкие слова и фразы, поэтому у нее меньше «пробелов» в знании языка.
  2. НМП обращает намного больше внимания на контекст, поэтому некоторый шум во входном сигнале может повлиять на весь перевод.

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

Примеры стьюпидов


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

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

Хуже того, не все пользователи нашего сервиса смогут оценить адекватность переводов, ведь не все знают исходный или целевой язык. Наш долг перед ними — избегать таких наихудших переводов.

Лучшее из двух миров


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

Вместо того чтобы комбинировать две системы во время декодирования каким-нибудь сложным способом, мы избрали более простой подход: выбирать результат одной из двух систем. Для этого мы обучили классификаторы с использованием CatBoost.



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

Как справиться с несоответствием доменов


Вишенка на торте


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



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

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

Адаптация к контексту


Последняя тема сегодняшнего поста — если машинный перевод достиг новых высот благодаря гибридному НМП, то откуда нам ожидать дальнейших улучшений?

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

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

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

Например, экспериментальная система, которая при переводе использует предыдущее исходное предложение наряду с текущим. Кажется, сеть вполне способна научиться понимать, когда нужно «обратить внимание» на слова из предыдущего предложения. Это естественным образом срабатывает для местоимений, у которых есть антецеденты, что позволяет избежать неприятностей подобного рода:



Другой пример — система, которую мы планируем в ближайшее время запустить на Яндекс.Браузере.

Каждый день миллионы пользователей переводят страницы благодаря нашей интеграции в Яндекс.Браузере. Поскольку структура HTML-страницы позволяет легко определить, где находится текст — в навигационном компоненте, заголовке или блоке с контентом, мы решили использовать эту информацию для улучшения наших переводов.

Понятно, что во многих случаях наилучшим переводом слова «Home», вероятно, будет «Домой». Однако на навигационной панели веб-сайта оно наверняка должно быть переведено как «Главная». Точно так же «Back», вероятно, лучше всего перевести в таком контексте как «Назад», а не «Спина».


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

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



Как видно из графиков, качество для данных в домене значительно возрастает, и как только наша функция потерь дополняется учетом расстояния Кульбака—Лейблера, рост качества больше не приводит к ухудшению перевода для документов вне домена.

Очень скоро мы запустим эту систему на Яндекс.Браузере. Надеемся, это только первое из целого ряда улучшений, которые мы сделаем на основе лучшего понимания пользовательского контекста и «неоправданной эффективности [рекуррентных] нейронных сетей».

Комментарии (23)


  1. nehrung
    26.02.2018 20:54
    +1

    Спасибо за интересную статью, я давно искал возможность выразить благодарность за Яндекс.Переводчик! Опытным путём выяснено, что на английском переводе (самом употребимом) он работает лучше гугловского.
    И ещё (извините за оффтоп), давно хотел высказать претензию в адрес языковых механизмов Яндекса — они работают странновато. Вот например, слово «флэшка» Яндекс помечает как ошибочное, а «флешка» — как правильное. Ну не странно ли, учитывая явно слышимое Э и иностранное происхождение слова? И таких слов много, а потом на Яндекс ссылаются те, кто учит нас правописанию. Но хуже всего то, что простой пользователь никак не может на это повлиять, поскольку в языковых «кишках» Яндекса не предусмотрена обратная связь (в Переводчике хоть есть кнопка «Сообщить об ошибке», а в спеллчекере нет ничего подобного). Передайте тем, от кого это зависит, что это надо исправлять.


    1. torkve
      26.02.2018 23:13

      Ну не странно ли, учитывая явно слышимое Э и иностранное происхождение слова?

      Иностранные слова со звуком [э] очень часто заимствуются в русский с буквой «е» в написании: «претензия», «секс», «бутерброд». «э» пишется чаще либо в начале слова («эхо»), либо в сочетаниях с гласными («маэстро»), либо для устранения неоднозначности («мэтр»/«метр»). Впрочем, исключений в обе стороны тонны и правописание конкретно «флешки» обсуждаемо. Поиск говорит о трёхкратном превосходстве варианта «флешка» (81 млн результатов против 27 млн у «флэшка»).


      1. YaakovTooth
        27.02.2018 03:52

        Так же поиск покажет гору результатов „в опреоле” и ссылаться на частотность в поисковых системах попросту неверно.

        Ссылаться нужно на правила и на языковую традицию заимствования слов. А так происходит всё в точности как вы описали, флешка, а не флэшка, блогер, а не блоггер, трафик, а не траффик, оффициальный оффис, в конце концов. Да и оффсайт — это что-то выключенное.


        1. torkve
          27.02.2018 12:06

          Тут надо быть немного осторожнее с утверждениями, потому что ещё в XVIII-XIX вв. свежевошедшие в язык слова «офици[н]альный», «офис» и другие писались и так, и сяк, в том числе и с двумя «ф» :) Поэтому если говорить о традиции, то там всё немного сложно.


          1. YaakovTooth
            27.02.2018 19:03

            В чём конкретно мне нужно быть осторожнее с утверждениями из актуальной редакции русского языка? :)


            1. torkve
              27.02.2018 19:27

              Вы упомянули языковую традицию заимствования. Так вот она не такая уж и традиция, как мы видим :) И вполне себе плавает.


              1. YaakovTooth
                27.02.2018 19:28

                А, ну то есть вам не по сути темы беседы общаться, а меня за слова к ответу притягивать.

                Всего хорошего.


        1. nehrung
          27.02.2018 19:01

          флешка, а не флэшка, блогер, а не блоггер, трафик, а не траффик, оффициальный оффис, в конце концов
          Ваши примеры — это примеры «ползучести» языковой нормы. Тогда уж надо выбирать, за что мы ратуем — за устоявшиеся правила или за то, что первична разговорная практика, а правила уже следом. И если за второе, то на этом пути мы можем зайти слишком далеко — вон уже сейчас начинают писать «жек», полностью забывая, что это бывшая аббревиатура.


          1. YaakovTooth
            27.02.2018 19:03

            Выбирают пусть лингвисты, а не каменты на хабре. Есть норма — норма фиксируется в словарях и правилах, по словарям и правилам работает публичный протокол (язык).

            Иначе это бессмысленный трёп, мол, законодательство не устраивает, давайте нарушать, в XVI веке это можно было. И вообще, HTTP/1.1 уже не торт, вот в HTTP/0.9 такого не было как сейчас, ух.


  1. datacompboy
    26.02.2018 22:44

    Google Bing — это сильно! Надеюсь, это не прогноз :)


  1. aliencash
    26.02.2018 23:05

    Wtf? И вроде не первое апреля было… Шутники, блин. )
    image


    1. kosmos89
      27.02.2018 22:49

      Зачем ты замазал аватар? И так понятно, что там Монтгомери.


      1. aliencash
        27.02.2018 23:24

        ) Изначально это был скриншот для другого сайта…


  1. springimport
    26.02.2018 23:05

    По моему, в поле ввода и вывода текста много лишних иконок, у Гугла, например, меньше.
    А еще неудобно когда внутри границ поля активно только 40%. Границы ведь не просто так придумали.

    Забавный лимит в 10000, наверное просто совпадение что он в 2 раза больше чем у конкурентов :)


  1. evgenWebm
    27.02.2018 10:35

    Круто. Мне переводчик нравится.
    Но кода вы уже реализуете возможность работать с клавы в переводчике?
    Вечная проблема. Есть +100500 текстов, которые надо перевести.
    С клавой это делается быстро ctrl+a->ctrl+с -> alt+tab->ctrl+v, а вот дальше тупик. Надо в руки брать мышку, чтобы выделить текст перевода. Когда это надо делать +100500 раз, то становится плохо и муторно.


    1. morozovsk
      27.02.2018 16:08

      Когда нужно перевести +100500 текстов, лучше это автоматизировать.
      Например, вот крутая библиотека github.com/soimort/translate-shell, которая в том числе поддерживает Яндекс.Переводчик.


  1. JustRoo
    27.02.2018 14:48

    А расскажите, пожалуйста, почему почти все онлайн-переводчики делают вот так? Это же явно не просто совпадение.


    1. Drino
      27.02.2018 16:15

      Нейросети умеют придумывать новые слова. Об этом есть хорошая статья.

      В свою очередь приставка «re» часто означает означает «пере» (например «replay» это «переиграть»), а «dux» это «вождь». Вот нейросеть и решает, что «redux» это «перевождь».

      К слову, «to redux» автоматические переводчики переводят более достойно :)


  1. coder1cv8
    27.02.2018 17:20
    +1

    Яндекс или Гугл, это дело вкуса. Что подняло мою англоязычную переписку на новую высоту — так это Reverso Context. Всем рекомендую.


  1. erwins22
    27.02.2018 19:38

    Какую конкретно модель использовали нейросети?
    Использовали ли при обучении перевод русский-русский для дообучения редким словам?
    Используете ли властелин колец?


    1. DavidTalbot Автор
      27.02.2018 23:23

      Хорошие вопросы! Мы используем вариант Трансформера, но начинаем экспериментировать с другими архитекрурами.

      Для перевода редких слов мы пока не пробовали перевод русский-русский, но звучит интересно. Правда, я не знаю, откуда берутся данные русский-русский.

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


      1. erwins22
        28.02.2018 00:00

        Была статья гугла.
        Там было сделано следующее:
        кодер(русский) ---------------------------------------------------декодер(русский)
        — — — ----универсальное представление — ----- — -----
        кодер(английский)------------------------------------------------декодер(английский)
        кодер(испанский)-------------------------------------------------декодер(испанский)

        Т.е. универсальное представление кто то назвал кольцом всевластия(или властелинном колец)

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

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


  1. WVitek
    28.02.2018 08:46

    Вчера словил глюк Яндекс.Маркета:

    Что если бы Яндекс.Маркет объединили с AliExpress :-)
    image