Встречайте чувашский язык в Яндекс.Переводчике: как мы решаем главную проблему машинного перевода

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

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


vveqdrqjvvz0v996dj6ubhmeul0.png

Но для начала немного предыстории.

Первые автоматические переводчики в середине ХХ века были основаны на правилах и словарях. Звучит логично, не правда ли: обучите машину правилам двух языков — и она сможет читать и переводить тексты, как человек. Но всё оказалось не так радужно. Создание таких систем было крайне трудоёмким. Приходилось писать вручную многочисленные регулярные выражения, чтобы учитывать правила и исключения. А словари очень быстро устаревали, потому что живой язык постоянно изменяется. Поэтому внимание уделяли только нескольким наиболее популярным языкам. Этот подход зашёл в тупик.

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

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

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


Чувашский язык

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

Для этой задачи мы использовали нейросети. Но у них есть как достоинства (например, учёт контекста в предложениях), так и недостатки. Если из-за нехватки данных нейронной сети трудно перевести предложение, она поведёт себя примерно как студент на экзамене: начнёт что-то выдумывать в надежде угадать правильный ответ. Иногда она угадывает, иногда — нет.


0wv8bajcyjydgqimesuihhoy0ho.png

Исходный текст — эталон — перевод нейросети

Данных у нас было мало: для сравнения, в нашем англо-русском корпусе на несколько порядков (!) больше предложений. Поэтому болезни нейросетей мы ощутили в полной мере.

Как с этим бороться?


Родственные связи между языками

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

В случае с чувашским языком мы создали пантюркскую модель. Она учится переводить на русский сразу с нескольких языков: азербайджанского, башкирского, татарского, казахского, киргизского, турецкого, узбекского — и вот теперь чувашского. Все эти языки относятся к тюркской языковой семье. И хотя между ними много различий, сходства тоже есть. Например, вот как на них выглядит слово «серебро»: gümüş — көмөш — көмеш — күміс — күмүш — gümüş — kumush — кӗмӗл. Если от лексических различий никуда не деться, то с фонетическими и орфографическими мы помогаем сети справляться, для начала транслитерируя все языки в некую общую письменность, в которой все написания слова «серебро» будут по возможности совпадать. Это делают несложные модельки на основе побуквенного SMT, который учится на небольшом количестве параллельных текстов из Библии/Корана — они есть практически на всех языках.


Создание синтетических данных

Напомним, что данных для обучения машины надо много. Очень много. Поэтому одновременно с поиском качественных параллельных текстов и заимствований из родственных языков мы взялись за синтетические примеры. Но не абы какие, а созданные с помощью back-translation. В чём суть этого подхода?

Мы брали качественные русские тексты и, как могли, переводили на чувашский. Получали текст на чувашском языке, но с ошибками и неточностями. А теперь внимание: эти пары мы использовали как примеры для обучения переводу с чувашского на русский (и именно в эту сторону). Возможно, для кого-то это прозвучало как бессмыслица, но так мы учили машину из любого текста на чувашском языке создавать корректный русский текст. Если исходный текст был корявый, то это никак не вредило делу. Но если исходный текст оказывался качественным, то это совершенствовало модель, которая выучивала правила согласования, расстановки и комбинации русских слов. Конечно же, такая модель начинала лучше переводить и в обратную сторону.

Однако если действовать прямолинейно и просто постепенно доливать такие примеры в обучающий корпус, то качество перевода сначала будет расти, а потом довольно скоро начнёт падать, так как сеть научится концентрироваться на переводе «сломанного» чувашского. Тут нас выручает адаптированная коллегами технология tagged back-translation: помечаем все «ненастоящие» обучающие примеры специальным тегом — и нейросеть магическим образом сама учится обращать на него внимание (pun intended) и не слишком-то подобным примерам доверять.

Готово!

Итак, помощь энтузиастов, заимствования из родственных языков и синтетические примеры помогли нашей команде создать переводчик для чувашского языка даже на небольшом объёме качественных параллельных текстов. Поддержка нового языка уже доступна в веб-версии и мобильных приложениях Яндекс.Переводчика, а также в поиске: [спасибо по-чувашски].

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

© Habrahabr.ru