Сравнение локальных моделей машинного перевода для английского, китайского и русского языков
«Машинный перевод — одна из наиболее актуальных и востребованных задач в сфере искусственного интеллекта, позволяющая снизить барьере в доступности информации на различных языках. При этом на просторах интернета преобладающим большинством данных на английском, и русском языках ссылка. Количество данных на китайском языке в открытом доступе становится с каждым днем всё больше. Поэтому необходимо всё больше инструментов позволяющие использовать все эти языки для своей работы.
Я уже больше года занимаюсь задачей машинного перевода для языков с высоким ресурсом данных. Ранее я подготовил модель к продукту AgrosTranslate для перевода с Английского на Русский язык ссылка. Позже я выпустил открытую модель для перевода с Китайского на Русский язык и обратно ссылка. Позже, несколько человек, просили реализовать модель перевода с Русского на Английский, и анализируя эти запросы, я пришел к выводу, что данных моделей не достаточно, и решил подготовить обновленные модели, собрав весь свой прошлый опыт.
В рамках своей последней работы, на которую у меня ушло по меньшей мере 6 месяцев, я подготовил новые модели машинного перевода, которые могут работать сразу с тремя языками, а это Английский, Русский и Китайский, в любом направлении перевода!
В этой работе я подготовил сразу 3 модели машинного перевода — это large, base и small. Так, чтобы каждый выбрал для себя нужную модель выбирая между скоростью и качеством перевода.
utrobinmv/t5_translate_en_ru_zh_small_1024 — small модель (наиболее быстрая)
utrobinmv/t5_translate_en_ru_zh_large_1024 — large модель (самый качественный перевод)
utrobinmv/t5_translate_en_ru_zh_base_200 — base модель (не уступающая по качеству модели large), но для более коротких текстов и более быстрая.
Все 3 модели относятся к классу мультиязычных моделей, которые могут работать с любым из 3х языков.
Свою статью я бы хотел разделить на две части: где в первой сравнить их с существующими решениями локальных моделей машинного перевода от других компаний, а во второй рассказать про свои новые модели более подробнее и методики их использования.
и так, поехали…
Сравнение моделей перевода для английского, китайского и русского языков
Модель машинного перевода при сравнении сразу для трех различных языков, требует, чтобы мы сравнили их сразу для 6 языковых пар: английский-китайский (en-zh), английский-русский (en-ru), китайский-английский (zh-en), китайский-русский (zh-ru), русский-английский (ru-en) и русский-китайский (ru-zh). Это означает, что нам нужно оценить эффективность моделей в разных направлениях перевода, что является достаточно сложной задачей.
В данном контексте компания Microsoft предоставляет отличный датасет NTREX, который идеально подходит для этой цели.
Датасет NTREX — включает только часть для тестирования, и создан специально для оценки моделей в задаче машинного перевода, для 128 различных языков.
Метрики для оценки качества моделей машинного перевода
Сложность оценки качества машинного перевода заключается в том, что метрика должна учитывать не только точность и грамматическую корректность перевода, но также и сохранение смысла и стиля исходного текста. Кроме того, машинный перевод может сталкиваться с проблемами, связанными с многозначностью слов, сленгом, идиомами и другими языковыми особенностями, что делает процесс оценки более сложным.
Другими словами, не всегда высокая оценка по одной метрике гарантирует качественный перевод. Поэтому для более полной картины необходимо использовать комбинацию различных метрик.
Более подробно про метрики в машинном переводе, можно найти в очень хорошей серии статей на habr.
Я скажу, что я взял максимальный набор метрик, которые смог запустить на своем компьютере. В качестве основы подсчета метрик, я использовал библиотеку evaluate
SacreBLEU — Наверно первая и наиболее популярная метрика для подсчета качества перевода. Которая подсчитывает общее количество слов и словосочетаний. Чем метрика больше тем лучше.
chrF (correlations with human rankings for 6-gram F1-score) — Метрика chrF опирается на подсчет совпадений символов, которые следуют друг за другом (character n-grams), в машинном и эталонном переводах, в отличие от использования токенов (token n-grams) для ROUGE. Чем метрика больше тем лучше.
BERTScore — Метрика определяется на основе сравнения близости контекстных эмбеддингов, извлеченных из предварительно обученной нейронной сети BERT. Чем метрика больше тем лучше.
TER (Translation Edit Rate) — Метрика, использующая подсчет минимального количества изменений, необходимых для приближения машинного перевода к наиболее точному эталонному переводу. Чем метрика меньше тем лучше.
METEOR (Metric for Evaluation of Translation with Explicit ORdering) — это метод оценки качества перевода, который основан на подсчете совпадений отдельных слов (unigrams) и учитывает precision, recall, а также обобщающий показатель гармонического среднего (Fmean). В отличие от BLEU или ROUGE, METEOR учитывает не только точные соответствия слов, но и наличие однокоренных слов или синонимов. Чем метрика больше тем лучше.
ROUGE (Recall-Oriented Understudy for Gisting Evaluation) — это набор метрик, основанных на подсчете совпадений слов и словосочетаний в машинном переводе и эталоне, также как и BLEU. Однако ROUGE учитывает не только точность, но и полноту, а также параметр F1. Чем метрика больше тем лучше.
GPU и CPU — Метрика оценки времени работы модели на процессоре и видеокарте. Данный параметр, в большинстве случае напрямую зависит от количества параметров в модели машинного обучения, и чем параметров больше, тем медленнее работает модель. Но зависимость не всегда линейная и сильно зависит в том числе от архитектуры нейросети. Для оптимизации таблиц в статье, я не стал приводить данные параметры в статье, вы можете с ними ознакомится в полной версии сравнения моделей. Метрика CPU не актуальна для моделей более 1 миллиарда параметров, так как я не стал оценивать на сколько долго обсчитываются данные модели на процессоре. Чем метрика меньше, тем лучше.
Модели машинного перевода
Для оценки моделей важно учитывать их размер, для этого я напротив названия модели, буду указывать размер по количеству параметров в модели. Например 418M — означает, что в модели 418 миллионов параметров, или 3.3B — означает, что в модели 3.3 миллиарда параметров. Более большие модели, могут иметь лучше качество перевода, но и делают это с меньшей скоростью. Также большие модели требуют очень много видеопамяти на вашей видеокарте. Например мне, специально пришлось уменьшать количество одновременно обрабатываемых предложений, для моделей более 1 миллиарда параметров, а модели более 2 миллиардов параметров мне пришлось запускать в режиме точности 8bit, чтобы они влезли в память моей видеокарты.
Ранее задачи машинного перевода решали, как задачу перевода с одного конкретного языка на какой то другой язык, и моделей машинного перевода было примерно столько же сколько языковых пар. В этом отношении наиболее известным проектом является проект OPUS-MT Хельсинского университета из Финляндии.
В рамках данного проекта, было выпущено очень большое количество моделей машинного перевода для различных языковых пар, из этого списка нам потребуются модели:
Helsinki-NLP/opus-mt-zh-en — для пары китайский-английский
Helsinki-NLP/opus-mt-en-zh — для пары английский-китайский
Helsinki-NLP/opus-mt-en-ru — для пары английский-русский
Helsinki-NLP/opus-mt-ru-en — для пары русский-английский
Все модели opus-mt имеют примерно одинаковое количество параметров 74М.
для пар китайский-русский, русский-китайский моделей не существует, но мы возьмем, модель машинного перевода, из моей прошлой статьи: joefox/mbart-large-ru-zh-ru-many-to-many-mmt которая как раз и можно использовать для пар китайский-русский, русский-китайский.
Для задач перевода, в последние годы появилось большое количество мультиязычных моделей, это модели которые учатся переводить сразу на множество различных языков. Сразу несколько проектов открыто в компании «Meta» — признана экстремистской организацией в России.
Первый проект mBART-50, в рамках которого разработана модель, которая переводит тексты сразу для 50 различных языков.
Второй проект M2M100, в рамках которого разработана модель, которая переводит тексты сразу для 100 различных языков.
Третий проект NLLB-200, в рамках которого разработана модель, которая переводит тексты сразу для 200 различных языков.
Из данных проектов мы возьмем следующие модели для сравнения:
facebook/nllb-200-distilled-1.3B — дистиллированная версия основной модели на 1.3 миллиарда параметров
facebook/nllb-200-distilled-600M — дистиллированная версия основной модели на 600 миллионов параметров
facebook/mbart-large-50-many-to-many-mmt — 582M параметров
facebook/m2m100_418M
Ещё, от данной компании, есть проект с двуязычными моделями WMT19, специализированный под задачу перевода новостей. Здесь под нашу задачу подойдет модель: facebook/wmt19-en-ru (279M) для перевода с Английского на Русский язык.
Сравнения моделей
Сравнение перевода для пары «английский-русский» (en-ru)
name | sacre bleu | chrf | bert score f1 | ter | meteor | rouge1 |
Helsinki-NLP/opus-mt-en-ru | 25,0095 | 51,4155 | 0,8476 | 66,4672 | 0,4722 | 0,2224 |
facebook/m2m100_418M | 22,0757 | 48,4266 | 0,8408 | 68,4320 | 0,4529 | 0,2489 |
facebook/mbart-large-50-many-to-many-mmt | 22,8219 | 49,3038 | 0,8423 | 68,4744 | 0,4624 | 0,2428 |
facebook/nllb-200-distilled-1.3B | 26,3921 | 53,4754 | 0,8590 | 62,6019 | 0,4957 | 0,2563 |
facebook/nllb-200-distilled-600M | 25,2193 | 52,0565 | 0,8541 | 64,9225 | 0,4699 | 0,2612 |
facebook/wmt19-en-ru | 27,4767 | 53,6640 | 0,8569 | 63,9424 | 0,4961 | 0,2514 |
utrobinmv/t5_translate_en_ru_zh_base_200 | 28,5759 | 54,2799 | 0,8554 | 62,4948 | 0,5174 | 0,1908 |
utrobinmv/t5_translate_en_ru_zh_large_1024 | 28,0225 | 54,5335 | 0,8586 | 62,6889 | 0,5272 | 0,1932 |
utrobinmv/t5_translate_en_ru_zh_small_1024 | 19,2178 | 46,3500 | 0,8257 | 71,6757 | 0,4241 | 0,1970 |
Сравнение перевода для пары «русский-английский» (ru-en)
name | sacre bleu | chrf | bert score f1 | ter | meteor | rouge1 |
Helsinki-NLP/opus-mt-ru-en | 23,9833 | 53,8174 | 0,9374 | 66,4136 | 0,5700 | 0,5747 |
facebook/m2m100_418M | 13,7000 | 43,5764 | 0,8976 | 82,6220 | 0,4345 | 0,4739 |
facebook/mbart-large-50-many-to-many-mmt | 24,3928 | 53,7343 | 0,9361 | 65,8848 | 0,5555 | 0,5669 |
facebook/nllb-200-distilled-1.3B | 25,1481 | 55,0731 | 0,9389 | 65,8016 | 0,5737 | 0,5878 |
facebook/nllb-200-distilled-600M | 22,4326 | 52,0603 | 0,9285 | 70,5321 | 0,5291 | 0,5482 |
utrobinmv/t5_translate_en_ru_zh_base_200 | 27,3035 | 55,9527 | 0,9407 | 63,3606 | 0,5918 | 0,5949 |
utrobinmv/t5_translate_en_ru_zh_large_1024 | 27,1314 | 56,2669 | 0,9429 | 63,9991 | 0,6043 | 0,6031 |
utrobinmv/t5_translate_en_ru_zh_small_1024 | 19,9053 | 49,8936 | 0,9219 | 71,3320 | 0,5206 | 0,5303 |
Сравнение перевода для пары «английский-китайский» (en-zh)
name | sacre bleu | chrf | bert score f1 | ter | meteor | rouge1 |
Helsinki-NLP/opus-mt-en-zh | 1,4242 | 23,8306 | 0,7899 | 159,1038 | 0,0478 | 0,2227 |
facebook/m2m100_418M | 1,8729 | 23,8577 | 0,7829 | 121,8503 | 0,0799 | 0,2400 |
facebook/mbart-large-50-many-to-many-mmt | 1,7330 | 25,4084 | 0,8042 | 159,9984 | 0,0760 | 0,2178 |
facebook/nllb-200-distilled-1.3B | 1,2399 | 19,4471 | 0,7733 | 128,1332 | 0,0165 | 0,1706 |
facebook/nllb-200-distilled-600M | 1,2022 | 18,8796 | 0,7673 | 113,6864 | 0,0162 | 0,1781 |
utrobinmv/t5_translate_en_ru_zh_base_200 | 2,1928 | 29,1543 | 0,8131 | 113,8981 | 0,0830 | 0,2508 |
utrobinmv/t5_translate_en_ru_zh_large_1024 | 1,6960 | 29,6255 | 0,8265 | 115,7029 | 0,0869 | 0,2523 |
utrobinmv/t5_translate_en_ru_zh_small_1024 | 1,6180 | 22,6094 | 0,7773 | 116,6643 | 0,0726 | 0,2433 |
Сравнение перевода для пары «китайский-английский» (zh-en)
name | sacre bleu | chrf | bert score f1 | ter | meteor | rouge1 |
Helsinki-NLP/opus-mt-zh-en | 17,8786 | 49,8389 | 0,9247 | 76,6661 | 0,5134 | 0,5292 |
facebook/m2m100_418M | 13,8451 | 45,7770 | 0,9141 | 80,4613 | 0,4578 | 0,4933 |
facebook/mbart-large-50-many-to-many-mmt | 20,0748 | 50,3136 | 0,9276 | 72,2366 | 0,5233 | 0,5399 |
facebook/nllb-200-distilled-1.3B | 13,3269 | 41,2097 | 0,8985 | 81,6055 | 0,4142 | 0,4491 |
facebook/nllb-200-distilled-600M | 15,2232 | 44,9461 | 0,9112 | 81,2294 | 0,4532 | 0,4814 |
utrobinmv/t5_translate_en_ru_zh_base_200 | 22,1332 | 52,4549 | 0,9315 | 70,2528 | 0,5579 | 0,5621 |
utrobinmv/t5_translate_en_ru_zh_large_1024 | 22,5254 | 53,2576 | 0,9361 | 69,8088 | 0,5741 | 0,5742 |
utrobinmv/t5_translate_en_ru_zh_small_1024 | 14,9457 | 45,8742 | 0,9132 | 78,4006 | 0,4781 | 0,4916 |
Сравнение перевода для пары «китайский-русский» (zh-ru)
name | sacre bleu | chrf | bert score f1 | ter | meteor | rouge1 |
facebook/m2m100_418M | 10,4357 | 38,6650 | 0,7828 | 87,67 | 0,3206 | 0,2036 |
facebook/mbart-large-50-many-to-many-mmt | 2,1387 | 6,6085 | 0,7093 | 108,05 | 0,0948 | 0,0609 |
facebook/nllb-200-distilled-1.3B | 8,9797 | 32,8740 | 0,7646 | 89,88 | 0,2619 | 0,1919 |
facebook/nllb-200-distilled-600M | 8,6919 | 34,9578 | 0,7656 | 91,4727 | 0,2692 | 0,1957 |
joefox/mbart-large-ru-zh-ru-many-to-many-mmt | 13,7238 | 41,5467 | 0,7985 | 83,3914 | 0,3652 | 0,2274 |
utrobinmv/t5_translate_en_ru_zh_base_200 | 13,0804 | 42,0661 | 0,8023 | 84,9454 | 0,3460 | 0,2217 |
utrobinmv/t5_translate_en_ru_zh_large_1024 | 13,2207 | 42,4253 | 0,8077 | 97,7217 | 0,3575 | 0,2260 |
utrobinmv/t5_translate_en_ru_zh_small_1024 | 8,2438 | 35,7662 | 0,7711 | 90,7159 | 0,2737 | 0,2043 |
Сравнение перевода для пары «русский-китайский» (ru-zh)
name | sacre bleu | chrf | bert score f1 | ter | meteor | rouge1 |
facebook/m2m100_418M | 0,9265 | 17,3133 | 0,7453 | 123,85 | 0,0638 | 0,1948 |
facebook/mbart-large-50-many-to-many-mmt | 0,3101 | 4,3907 | 0,5623 | 1407,8 | 0,0506 | 0,0635 |
facebook/nllb-200-distilled-1.3B | 0,9701 | 17,0343 | 0,7562 | 136,87 | 0,0126 | 0,1795 |
facebook/nllb-200-distilled-600M | 0,8562 | 14,8349 | 0,7371 | 118,69 | 0,0113 | 0,1631 |
joefox/mbart-large-ru-zh-ru-many-to-many-mmt | 1,2970 | 22,5037 | 0,7852 | 113,39 | 0,0726 | 0,2229 |
utrobinmv/t5_translate_en_ru_zh_base_200 | 1,5048 | 22,9738 | 0,7856 | 113,6 | 0,0723 | 0,2256 |
utrobinmv/t5_translate_en_ru_zh_large_1024 | 1,2027 | 23,4712 | 0,7933 | 117,24 | 0,0740 | 0,2267 |
utrobinmv/t5_translate_en_ru_zh_small_1024 | 1,1654 | 17,3986 | 0,7525 | 112,15 | 0,0634 | 0,2011 |
Использование моделей
Для обучения моделей серии t5_translate_en_ru_zh использовался обширный набор текстов, полученных с сайта opus. Основной объем данных представлял собой корпус CCMatrix. Перед началом обучения проводилась очистка корпуса от ненужных элементов.
На полученном корпусе текстов был обучен токенизатор, размерностью 65000 токенов.
Модели обучались с нуля, специально для задачи машинного перевода.
Одной из отличительных особенностей моделей является их способность не требовать указания исходного языка документа. Достаточно лишь указать язык, на который необходимо выполнить перевод, и модель самостоятельно определит, с какого из трех известных ей языков следует осуществить перевод. Это означает, что исходный текст может быть написан на нескольких языках, включая английский и китайский, и модель без труда справится с переводом даже в том случае, если в тексте содержатся китайские иероглифы.
Модели работают с разными объемами текста. В частности, модель small и large предназначена для перевода предложений, состоящих из не более чем 1024 токенов. Возможно, она также способна обрабатывать более длинные последовательности, но я не проводил проверку этого лично. С другой стороны, base модель обучалась на коротких последовательностях, состоящих не более чем из 200 токенов.
Для использования моделей вам необходимо использовать библиотеку transformers
from transformers import T5ForConditionalGeneration, T5Tokenizer
model_name = 'utrobinmv/t5_translate_en_ru_zh_large_1024'
model = T5ForConditionalGeneration.from_pretrained(model_name)
tokenizer = T5Tokenizer.from_pretrained(model_name)
prefix = 'translate to zh: '
src_text = prefix + "Съешь ещё этих мягких французских булок."
# translate Russian to Chinese
input_ids = tokenizer(src_text, return_tensors="pt")
generated_tokens = model.generate(**input_ids)
result = tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)
print(result)
В коде вы меняете значение переменной prefix исходя из требуемого языка, на который вам необходимо перевести. Возможны варианты:
prefix = 'translate to en: '
prefix = 'translate to ru: '
prefix = 'translate to zh: '
Результаты сравнения моделей
Наверное я не буду делать сам конкретных выводов по оценке качества моделей, цифры говорят сами за себя.
В целом можно сказать, что модели получились неплохими, и их вполне можно использовать на работе, а также для личных задач и проектах, может быть даже на соревнованиях.
utrobinmv/t5_translate_en_ru_zh_small_1024 — модель small можно брать как базовое решение, когда вам нужно провести какие то эксперименты, и вы хотите решить какую то задачу. или вашу задачу нужно решать на CPU.
utrobinmv/t5_translate_en_ru_zh_large_1024 — модель large, можно использовать для задач машинного перевода, когда ваша задача улучшить качество. Она показывает хорошие метрики на инференсе, если вы её используете на GPU.
utrobinmv/t5_translate_en_ru_zh_base_200 — модель base, просто получалась удачной по соотношению количества параметров и результата по метрикам. В некоторых тестах она даже обходит large модель. Так как училась на более коротких текстах до 200 токенов.