Как «Яндекс» учится машинному переводу с «малых» языков
Программы-переводчики давно доказали свою полезность, но много ли языков входит в стандартный набор любого крупного онлайн-переводчика? Программисты из «Яндекса» задумались над этой проблемой: ведь только в России существует около двухсот так называемых «малых» языков, на которых люди говорят и пишут тексты — и почему не дать им возможность переводить их на другие, как «большие», так и «малые» языки? По просьбе N + 1 разработчик группы машинного перевода «Яндекса» Антон Дворкович рассказал, как можно научить машину переводить с горномарийского на идиш и обратно.
В мире существует великое множество языков. На многих из них написано достаточно книг и других документов, которые со временем были оцифрованы и в итоге попали в крупные поисковики, такие как «Яндекс». Однако существует категория так называемых малых языков, на которых говорит не так много людей и которые оставили после себя совсем мало печатных или письменных документов. Оцифровано же их еще меньше.
Если зайти в любой популярный онлайн-переводчик, мы увидим там, в основном, знакомые каждому языки — почти никакой экзотики. И это неспроста: машинный перевод, который используют онлайн-переводчики, работает благодаря анализу и сопоставлению больших массивов данных. Но как перевести с языков, на которых совсем мало информации? Ведь мы не можем взять знания какого-нибудь профессионального переводчика и загнать их в программу, мы должны научить ее переводить такие тексты автоматически на основе обработанных данных.
У нас в «Яндексе» было несколько разрозненных исследований на эту тему, но до недавнего времени не получалось объединить это в рамках одной технологии. Все изменилось, когда к нам обратился коллега из офиса «Яндекса» в Голландии. Выяснилось, что он является носителем редкого языка папьяменто, на котором говорит несколько сотен тысяч человек на Карибских островах. Его просьба добавить этот язык в «Яндекс.Переводчик» послужила толчком к тому, чтобы наконец систематизировать имеющиеся знания. Мы начали работать.
В основе статистического машинного перевода, на который опирается «Яндекс.Переводчик», долгое время лежали исключительно лексические модели, т.е. такие модели, которые не учитывают родственные связи между различными словами и другие лингвистические характеристики. Проще говоря, слова «мама» и «маме» — это два совершенно разных слова с их точки зрения; такие же разные, как слова «мама» и «бегать», например.
Около 15 лет назад в индустрии появилось понимание, что качество статистического машинного перевода можно улучшить, если дополнить сугубо лексическую модель еще и моделями морфологии (словоизменения и словообразования) и синтаксиса (построения предложений). В отличие от систем, основанных на ручных правилах, модели морфологии и синтаксиса можно формировать автоматически на основе статистики. Вот простой пример с тем же словом «мама»: если «скормить» нейронной сети тысячи текстов, содержащих это слово в различных формах, то сеть «поймет» принципы словообразования и научится предсказывать правильную форму в зависимости от контекста.
Переход от простой модели к комплексной хорошо отразился на общем качестве, но для ее работы по-прежнему нужны сотни тысяч примеров, которые трудно найти для небольших языков. В итоге построить эффективный перевод «малых» языков нам помог тот факт, что многие языки связаны между собой.
Мы отошли от традиционного восприятия каждого языка как независимой системы, и стали учитывать родственные связи между ними. На практике это означает, что если у нас есть язык, для которого нужно построить перевод, но данных для этого недостаточно, то можно взять другие, более «крупные» и родственные языки. Их отдельные модели (морфология, синтаксис, лексика) можно использовать для заполнения пустот в моделях «малого» языка. Может показаться, что речь идет о слепом копировании слов и правил между языками, но технология работает несколько умнее.
Начальный этап работы над любым «малым» языком ничем не отличается от создания переводчика для «большого» языка. Мы загружаем в машину все доступные нам материалы и запускаем процесс. Она проходит по параллельным текстам, написанным на разных языках, и строит распределение вероятностей перевода для каждого найденного слова. Для этого можно, но не обязательно, применять нейронные сети — зачастую более простых инструментов вполне хватает. Система, глядя на параллельные тексты, пополняет свой словарный запас и запоминает переводы. Для больших языков, где примеров миллионы, больше ничего делать не надо — система найдет не только все возможные слова, их формы и запомнит их переводы, но и учтет разные случаи их применения в зависимости от контекста. С небольшим языком мы можем смоделировать ядро (самые частотные слова и конструкции в языке), но примеров применения окажется недостаточно для учета словообразования и полного покрытия всех слов. Технология, которая лежит в основе нашего подхода, работает несколько глубже с уже имеющимися примерами и использует знания о других языках.
Возьмем для примера татарский и башкирский языки — два очень близких тюркских языка. Они различаются некоторыми звуками: например, «девушка» будет по-татарски «кыз», а по-башкирски «ҡыҙ», лестница по-татарски «баскыч», а по-башкирски «баҫҡыс». Но их лингвистические характеристики — и морфология, и синтаксис — практически одинаковы. Наша технология умеет понимать это различие звуков и заимствовать какие-то слова при переводе с обоих языков, если на каком-то из них окажется недостаточно информации.
Или взять идиш, который возник в X-XIV веках на основе верхненемецких диалектов — тех же, которые легли в основу современного немецкого языка. Поэтому очень многие слова в идише и немецком одинаковы или очень похожи. Идиш использует еврейский алфавит, но, в отличие от иврита, обозначает на письме все гласные — кроме слов древнееврейского происхождения, которые сейчас принято писать так же, как в иврите. В остальном в идише фонетический принцип письма, и это дает возможность, если немецкое слово и слово на идише совпадают, автоматически транслитерировать их. Можно посмотреть на марийский язык: в нем с самого появления письменности (в XIX веке) различались два литературных варианта — луговой (восточный) и горный (западный). Они отличаются фонетически и в некоторой степени лексически; кроме того, в горном марийском языке есть гармония гласных, отсутствующая в луговом. В целом языки очень похожи и более-менее взаимопонимаемы, но из-за того, что луговых марийцев намного больше, марийским языком «по умолчанию» обычно считается луговой. По этой же причине текстов на луговом марийском гораздо больше, и за основу перевода мы берем их.
В случае, если машине не известна даже начальная форма слова, но понятна история происхождения языка, машина может на основе всей доступной ей информации из корпуса всех языков понять, какое слово ближе всего к неизвестному — получается, что таким образом она понимает не только словарное значение, но и контекстное. Вернемся к примерам на идише: в этом языке есть слово שטערן (штерн), которое означает «звезда» (немецкое Stern) и «лоб» (нем. Stirn). Во фразе «на небе много звезд», очевидно, имеется в виду первое значение, а во фразе «ударил его по лбу» — второе. Еще есть слово באַנק (банк), которое значит «банк» или «скамья», которые по-немецки тоже одинаковы (Bank), но различаются во множественном числе («скамьи» будет Bänke, а «банки» — Banken), а на идише всегда одинаковы (בענק — бэнк). Наша технология умеет автоматически выучивать эти слова без готовых примеров и ручного вмешательства.
Конечно, перевод с малых языков не может обойтись без своего рода «асессора» — человека, который знает этот язык и может по особым методикам определить, насколько точным оказался перевод. В нашем случае пригодилась помощь многочисленных региональных организаций, которые в России занимаются исследованием и сохранением малых языков. Например, в создании марийско-русского перевода нам очень помогли сразу несколько организаций, и мы вели работу с Марийским научно-исследовательским институтом языка, литературы и истории им. В.М. Васильева (МарНИИЯЛИ) и Республиканским центром марийской культуры (РЦМК), обеспечившими лингвистическую поддержку и подготовку эталонных марийско-русских переводов для оценки качества перевода. А при создании переводчика с удмуртского языка мы познакомились с группой энтузиастов, которые занимаются составлением его корпуса. В регионах вообще достаточно неравнодушных к судьбе своих языков людей, которые готовы помочь в создании корректного переводчика. Учитывая размеры нашей страны и количество разных народностей, которые в ней живут, работы по машинному переводу с других языков еще очень много.
Любые дополнительные данные при должном использовании позволяют улучшить
качество перевода — мы рассчитываем, что разработанная нами технология
использования данных на родственных языках в перспективе будет внедрена и
для «больших» направлений и поможет в целом лучше понимать связи между языками, а следовательно — точнее переводить тексты. Поэтому можно сказать, что эта технология — не столько про «малые» языки, сколько про установление связей между разными языками мира. В этом смысле она прекрасно ложится в знаменитую модель noisy channel, по которой выходит, что в концепции машинного перевода мы все говорим на одном языке, но интерпретация доходит до нас с ошибками, и задача машины — эти ошибки исправить. Но это уже другая, большая и интересная история.
Антон Дворкович, разработчик группы машинного перевода «Яндекса»