Обучение модели машинного перевода (MarianMT, NLLB, SeamlessM4T)
Обучение модели машинного перевода нужно для специализированных доменов (юридический, медицинский, технический) или языковых пар с плохим покрытием готовыми моделями.
Выбор базовой архитектуры
MarianMT (Helsinki-NLP): seq2seq трансформер, компактный, быстрый. Готовые модели для 1000+ пар. Идеально для fine-tuning на домене.
NLLB-200 (Meta): 200 языков, лучше для редких языков и мультиязычного перевода. Fine-tuning возможен, но модель большая (1.3B–3.3B параметров).
SeamlessM4T (Meta): мультимодальная (текст + речь), 100 языков. Для задач с интеграцией STT+перевод.
Данные для fine-tuning
Параллельные корпуса (билингвальные пары предложений):
- OPUS (opus.nlpl.eu): большой бесплатный корпус для 500+ пар
- Специализированные: EMEA (медицина ЕС), JRC-Acquis (юриспруденция), MultiUN
- Собственные: переведённые документы компании, профессиональные переводы
Минимум для fine-tuning MarianMT: 10K–50K параллельных предложений домена. Для NLLB: 100K+.
Fine-tuning MarianMT
from transformers import MarianMTModel, MarianTokenizer, Seq2SeqTrainingArguments, Seq2SeqTrainer
import sacrebleu
model_name = "Helsinki-NLP/opus-mt-ru-en"
tokenizer = MarianTokenizer.from_pretrained(model_name)
model = MarianMTModel.from_pretrained(model_name)
def preprocess(examples):
inputs = tokenizer(examples["ru"], max_length=512, truncation=True, padding=True)
targets = tokenizer(text_target=examples["en"], max_length=512, truncation=True, padding=True)
inputs["labels"] = targets["input_ids"]
return inputs
training_args = Seq2SeqTrainingArguments(
output_dir="./marian_legal",
predict_with_generate=True,
per_device_train_batch_size=8,
num_train_epochs=5,
learning_rate=5e-5,
fp16=True,
generation_max_length=512,
)
Оценка качества: BLEU и COMET
# BLEU
bleu = sacrebleu.corpus_bleu(hypotheses, [references])
print(f"BLEU: {bleu.score:.2f}")
# COMET (лучше коррелирует с человеческими оценками)
from comet import download_model, load_from_checkpoint
model_path = download_model("Unbabel/wmt22-comet-da")
comet_model = load_from_checkpoint(model_path)
scores = comet_model.predict(data, batch_size=8, gpus=1)
Типичный прирост от fine-tuning на доменных данных: +3–8 BLEU, +0.05–0.1 COMET score. Для сравнения: разница между системами-участниками WMT — 1–3 BLEU.







