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

В начале 2011 года Яндекс внедрил собственную систему машинного перевода. Сейчас сервис Яндекс.Переводчик работает с основными европейскими языками и умеет переводить, например, с английского на испанский и обратно.
Машинный перевод Яндекса — статистический. Такой перевод основывается не на правилах языка (системе эти правила даже не известны), а на статистике. Чтобы выучить язык, система сравнивает сотни тысяч параллельных текстов — содержащих одну и ту же информацию, но на разных языках. Это могут быть, например, большие тексты с разноязычных версий сайтов организаций. Изначально система находит параллельные тексты по адресам документов — чаще всего такие адреса различаются только пометками, например, «en» или «us» для английской версии и «ru» для русской.
Для каждого изученного текста система строит список уникальных признаков. Это могут быть редко используемые слова, числа, специальные знаки, находящиеся в тексте в определённой последовательности. Когда система набирает достаточное количество текстов с признаками, она начинает искать параллельные тексты ещё и с их помощью — сравнивая признаки новых текстов и уже изученных.
Чтобы переводчик соответствовал современным стандартам качества, система должна изучить сотни миллионов фраз на разных языках. Это требует очень серьёзных ресурсов: много места на жёстких дисках, много оперативной памяти и так далее. Именно поэтому существующие сейчас системы машинного перевода можно пересчитать по пальцам.

Изучение языка

В системе машинного перевода Яндекса три основные части: модель перевода, модель языка и декодер.
Модель перевода — это таблица, в которой для всех известных системе слов и фраз на одном языке перечислены все возможные их переводы на другой язык и указана вероятность этих переводов (для каждой пары языков есть своя таблица). Модель перевода создаётся в три этапа: сначала подбираются параллельные документы, потом в них — пары предложений, а затем уже пары слов или словосочетаний.
Для наглядности представим, как система обрабатывала две самые первые пары предложений на русском и английском. Допустим, они были из текста про столицу Великобритании:
«London stands on the river Thames» — «Лондон стоит на берегу реки Темзы»
«Crossing the river by the Tower Bridge you can see the Tower of London» — «Пересекая реку по Тауэрскому мосту, можно увидеть Тауэр»
Когда системе не известно ничего, кроме первой пары предложений, она считает, что «London», «stands» и каждое другое слово этого английского предложения — равновероятный перевод слов «Лондон», «стоит», «на» и так далее. Во второй паре предложений снова встречаются слова «river» и «река». Соответственно, после обработки второй пары предложений и пересчёта вероятности, система начнёт считать эту пару слов более вероятным переводом друг друга. И так далее сравниваются миллионы предложений в сотнях тысяч текстов.
Система сравнивает не только отдельные слова, но и словосочетания из двух, трёх, четырёх или пяти слов, идущих подряд. В переводчике Яндекса модель перевода для каждой пары языков содержит сотни миллионов пар слов и словосочетаний.
Другая составляющая системы машинного перевода — модель языка. Для её создания система изучает сотни тысяч различных текстов на нужном языке и составляет список всех употребленных в них слов и словосочетаний с указанием частоты их использования. Это знание системы о языке, на который нужно перевести текст.

Процесс перевода

Непосредственно переводом занимается декодер. Для каждого предложения исходного текста он подбирает все варианты перевода, сочетая между собой фразы из модели перевода, и сортирует их по убыванию вероятности. Например, пользователь захотел перевести фразу «to be or not to be». Допустим, из всех вариантов в модели перевода максимальная вероятность получилась у сочетания «быть или не бывает», сочетание «быть или не быть» оказалось с небольшим отрывом на втором месте и так далее.
Все получившиеся варианты сочетаний декодер оценивает с помощью модели языка. В данном примере модель языка подскажет декодеру, что «быть или не быть» употребляется чаще, чем «быть или не бывает». В итоге декодер выбирает предложение с наилучшим сочетанием вероятности (с точки зрения модели перевода) и частоты употребления (с точки зрения модели языка).
Система машинного перевода Яндекса переводит не только произвольные тексты, но и веб-страницы. Когда пользователь вводит на сервисе translate.yandex.ru нужный адрес, сначала открывается страница с оригинальным текстом. Затем браузер сам разбирает html-код страницы и отправляет текст на сервер перевода по абзацам. То есть текст из, например, английского на глазах у пользователя превращается в русский. Ждать полного перевода текста не обязательно — можно начинать читать первые абзацы, пока остальные ещё не готовы.

Машинный словарь

Яндекс.Переводчик можно использовать не только для работы с текстами, но и для перевода отдельных слов. Сервис содержит полноценный словарь с подробными карточками слов и устойчивых выражений — словарными статьями. Эти карточки система составляет на основе всё тех же статистических данных, правда, на этот раз прибегая к правилам.
В отличие от модели перевода, куда слова и словосочетания попадают в любых формах, для машинного словаря система отбирает только словарные формы слов (например, существительное в именительном падеже единственного числа или глагол в инфинитиве) и устойчивые выражения. Система проводит морфологический и синтаксический анализ. Она определяет часть речи и словарную форму слова, устанавливает границы словосочетаний, находит, например, к какому слову относится прилагательное или какие дополнения есть у глагола. Эта информация помогает отсеивать неполные словосочетания. Например, пары «perfectly safe — совершенно безопасный» и «chemistry — химия» попадают в машинный словарь, а «perfectly and — успешно и» и «chemistry — химией» — нет.
Машинный словарь работает с большим объёмом параллельных текстов, поэтому словарные статьи получаются очень подробными. Однако важно, чтобы в переводах не было ошибок и опечаток. Для этого алгоритм, основанный на технологии машинного обучения, проверяет все потенциальные пары переводов и отсеивает ненадёжные. В результате «always — всегда» и «wifi — беспроводный интернет» попадают в словарь, а «always — вегда» и «wifi — экран» — нет.
Близкие по значению переводы в словарных статьях группируются с помощью словарей синонимов. Это тоже статистические словари, составленные на основе параллельных текстов. В них попадают слова, которые часто переводятся на другой язык одинаково или образуют словосочетания с одинаковыми словами. Например, слова «полностью» и «абсолютно» система определила как синонимы, потому что они имеют общие переводы («completely», «wholly», «entirely» и т.д.) и часто встречаются в одинаковых контекстах («полностью свободный» и «абсолютно свободный»).
В итоге машинный словарь получает всё, что ему нужно знать о каждом слове и выражении: его словарную форму, часть речи, значения и синонимы. Для наглядности система иллюстрирует переводы примерами, которые берёт из тех же параллельных текстов.

Развитие статистического перевода

Одно из достоинств статистического машинного перевода в том, что он живёт вместе с языком. То есть, если что-то в языке меняется, например, люди начинают писать какое-нибудь слово по-другому, система видит это, как только к ней попадают новые тексты. И чем быстрее нововведение распространится в языке, тем быстрее оно появится в моделях перевода и языка.
Чтобы улучшать качество перевода, систему регулярно обновляют. Каждое обновление сначала проходит проверку — используется метрика для статистических машинных переводов. Перевод специально подобранных текстов, полученный системой, сравнивается с эталонным. Если данные от вновь изученных документов ухудшили качество перевода, то они отбраковываются.