СофтХабрахабр

Как Яндекс применил технологии искусственного интеллекта для перевода веб-страниц

В современном интернете более 630 миллионов сайтов, но лишь 6% из них содержат русскоязычный контент. Языковой барьер – главная проблема распространения знаний между пользователями сети, и мы верим, что решать её нужно не только обучением иностранным языкам, но и с помощью автоматического машинного перевода в браузере.

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

Гибридный переводчик слов и фраз

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

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

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

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

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

Когда Переводчик получает от пользователя текст, он отдаёт его на перевод обеим системам — и нейронной сети, и статистическому переводчику. С прошлого года Яндекс.Переводчик использует гибридную модель. При выставлении оценки учитываются десятки факторов — от длины предложения (короткие фразы лучше переводит статистическая модель) до синтаксиса. Затем алгоритм, основанный на методе обучения CatBoost, оценивает, какой перевод лучше. Перевод, признанный лучшим, показывается пользователю.

Именно гибридная модель теперь используется в Яндекс.Браузере, когда пользователь выделяет для перевода конкретные слова и фразы на странице.

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

Нейросетевой переводчик веб-страниц

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

Обычно яркий и крупный текст, который мы видим сразу при заходе на страницу. Заголовок. Но сделать это сложно, потому что текста в заголовке мало и без понимания контекста можно допустить ошибку. Заголовок часто содержит суть новости, поэтому важно перевести его правильно. Например, Game of Thrones prequel announced. В случае с английским языком всё ещё сложнее, потому что англоязычные заголовки часто содержат фразы с нетрадиционной грамматикой, инфинитивы или даже пропускают глаголы.

Слова и фразы, которые помогают нам ориентироваться на сайте. Навигация. Например, Home, Back и My account вряд ли стоит переводить как «Дом», «Спина» и «Мой счёт», если они расположены в меню сайта, а не в тексте публикации.

С ним всё проще, он мало отличается от обычных текстов и предложений, которые мы можем найти в книгах. Основной текст. Но даже здесь важно обеспечивать консистентность переводов, то есть добиваться того, чтобы в рамках одной веб-страницы одни и те же термины и понятия переводились одинаково.

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

Для этого мы опять же используем CatBoost и факторы, основанные как на самом тексте, так и на HTML-разметке документов (тэг , размер текста, числа ссылок на единицу текста, ...). Классификация сегментов текста. Но одной классификации сегментов недостаточно. Факторы достаточно разнородные, поэтому именно CatBoost (основанный на градиентном бустинге) показывает лучшие результаты (точность классификации выше 95%).

Традиционно алгоритмы Яндекс.Переводчика обучаются на текстах из интернета. Перекос в данных. Но как только мы научились отделять друг от друга различные сегменты, мы обнаружили интересную особенность. Казалось бы, это идеальное решение для обучения переводчика веб-страниц (иными словами, сеть учится на текстах той же природы, что и у тех текстов, на которых мы собираемся её применять). 5%. В среднем на сайтах контент занимает примерно 85% всего текста, а на заголовки и навигацию приходится всего по 7. Эти два фактора в совокупности приводят к проблеме перекоса данных. Вспомним также, что сами заголовки и элементы навигации по стилю и грамматике заметно отличаются от остального текста. Сеть обучается хорошо переводить только основной текст, из-за чего страдает качество перевода заголовков и навигации. Нейронной сети выгоднее просто игнорировать особенности этих весьма бедно представленных в обучающей выборке сегментов. Чтобы нивелировать этот неприятный эффект, мы сделали две вещи: к каждой паре параллельных предложений мы приписали в качестве метаинформации один из трёх типов сегментов (контент, заголовок или навигация) и искусственно подняли концентрацию двух последних в тренировочном корпусе до 33% за счёт того, что стали чаще показывать обучающейся нейросети подобные примеры.

Поскольку теперь мы умеем разделять тексты на веб-страницах на три класса сегментов, может показаться естественной идеей обучать три отдельные модели, каждая из которых будет справляться с переводом своего типа текстов – заголовков, навигации или контента. Multi-task learning. Ключ к пониманию лежит в идее mutli-task learning (MTL): если между несколькими задачами машинного обучения имеется внутренняя связь, то модель, которая учится решать эти задачи одновременно, может научиться решать каждую из задач лучше, чем узкопрофильная специализированная модель! Это действительно работает неплохо, однако ещё лучше работает схема, при которой мы обучаем одну нейросеть переводить сразу все типы текстов.

У нас уже был весьма неплохой машинный перевод, поэтому было бы неразумно обучать новый переводчик для Яндекс.Браузера с нуля. Fine-tuning. В контексте нейросетей это часто называют термином fine-tuning. Логичнее взять базовую систему для перевода обычных текстов и дообучить её для работы с веб-страницами. просто инициализировать веса нейронной сети значениями из готовой модели и начать учить на новых данных, то можно столкнуться с эффектом доменного сдвига: по мере обучения качество перевода веб-страниц (in-domain) будет расти, но качество перевода обычных (out-of-domain) текстов будет падать. Но если подойти к этой задаче в лоб, т.е. Чтобы избавиться от этой неприятной особенности, при дообучении мы накладываем на нейросеть дополнительное ограничение, запрещая ей слишком сильно менять веса по сравнению с начальным состоянием.

Как можно видеть на иллюстрации, это приводит к тому, что рост качества перевода веб-страниц больше не приводит к деградации перевода обычного текста. Математически это выражается добавлением слагаемого к функции потерь (loss function), представляющего из себя расстояние Кульбака—Лейблера (KL-divergence) между распределениями вероятностей порождения очередного слова, выдаваемыми исходной и дообучаемой сетями.

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

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

К переводчику веб-страниц в Браузере было ещё одно важное требование – он не должен искажать разметку. External alignments. Но если внутри предложения есть, например, two underlined words, то в переводе мы хотим видеть “два подчёркнутых слова”. Когда тэги HTML располагаются вне предложений или на их границах, никаких проблем не возникает. в результате перевода должны выполняться два условия: Т.е.

  1. Подчёркнутый фрагмент в переводе должен соответствовать именно подчёркнутому фрагменту в исходном тексте.
  2. Согласованность перевода на границах подчёркнутого фрагмента не должна нарушаться.

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

Мощные нейросетевые модели перевода, которые мы натренировали, требуют заметно больше вычислительных ресурсов на наших серверах (как CPU, так и GPU), чем статистические модели предыдущих поколений. Intersection observer. Чтобы сэкономить серверные ресурсы и пользовательский трафик мы научили Переводчик использовать Intersection Observer API, чтобы отправлять на перевод только тот текст, который отображается на экране. При этом пользователи далеко не всегда дочитывают страницы до конца, поэтому отправка всего текста веб-страниц в облако выглядит излишней. За счёт этого нам удалось снизить расход трафика на перевод более чем в 3 раза.

Для оценки качества переводов мы используем метрику BLEU*, которая сравнивает переводы, выполненные машиной и профессиональным переводчиком, и оценивает качество машинного перевода по шкале от 0 до 100%. Несколько слов об итогах внедрения нейросетевого переводчика с учётом структуры веб-страниц в Яндекс.Браузер. Обычно пользователи замечают изменение качества при росте метрики BLEU хотя бы на 3%. Чем ближе машинный перевод к человеческому, тем выше процент. Новый переводчик Яндекс.Браузера показал рост почти на 18%.

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

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

Показать больше

Похожие публикации

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»