Донавчання моделей машинного перекладу для галузевих завдань: MarianMT, NLLB, SeamlessM4T
Юридичний відділ компанії, що локалізує контракти на 10+ мов, витрачав 40 годин на тиждень на постредагування машинного перекладу. Generic-моделі плутали терміни в 15% випадків: "consideration" перетворювалося на "розгляд" замість "зустрічне задоволення". Ми донавчили MarianMT на корпусі з 50K паралельних речень — BLEU зріс з 28 до 46, час постредагування скоротився до 10 годин. Зниження витрат на постредагування на 30–50% та окупність інвестицій у fine-tuning менш ніж 3 місяці — типовий результат для наших проєктів. Нижче — як ми це робимо.
Чому донавчання моделі машинного перекладу критичне для бізнесу?
Generic-моделі дають BLEU 25–35 на технічних текстах. Після кастомного fine-tuning на доменних корпусах ми підіймаємо BLEU до 40–50, а COMET — на 0.1–0.15. Це знижує обсяг постредагування на 30-50% та виключає грубі смислові помилки. Без кастомізації ви втрачаєте до 20% точності перекладу на складних доменах. Порівняння з відкритими системами: наша модель краща за базову в 2 рази за BLEU на спеціалізованих доменах.
Порівняння базових архітектур
| Модель |
Мови |
Розмір |
Ресурси для fine-tuning |
Коли використовувати |
| MarianMT (Helsinki-NLP) |
1000+ пар |
150–300М параметрів |
1 GPU, 10–50K речень |
Швидке донавчання під одну пару мов |
| NLLB-200 (Meta) |
200 мов |
1.3B–3.3B параметрів |
4–8 GPU, 100K+ речень |
Мультимовні сценарії, рідкісні мови |
| SeamlessM4T (Meta) |
100 мов (текст+мова) |
2.3B параметрів |
8+ GPU, 200K+ речень |
Інтеграція STT та перекладу в одному пайплайні |
Вибір архітектури залежить від цільових мов, бюджету на обчислення та бажаної якості. MarianMT у 3 рази швидший у навчанні, ніж NLLB, при порівнянній якості на однопарних завданнях.
Як ми будуємо pipeline для fine-tuning?
Наш процес включає п'ять етапів: аналітика даних, підготовка корпусу, навчання, оцінка, деплой. Розглянемо кожен на прикладі MarianMT для юридичного домену.
Підготовка даних
Паралельні корпуси — ключовий фактор успіху. Ми використовуємо:
-
OPUS — безкоштовний ресурс із 500+ мовними парами (для загального домену)
- EMEA (медицина) та JRC-Acquis (юриспруденція) — спеціалізовані корпуси ЄС
- Власні дані клієнта: перекладені контракти, патентна документація, протоколи випробувань
Мінімальний обсяг: 10K паралельних речень для MarianMT, 100K+ для NLLB. Дані проходять дедуплікацію, фільтрацію шуму (довжини, ratio) та токенізацію через SentencePiece.
Навчання та оптимізація
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,
)
Ми підбираємо learning rate (1e-5 – 5e-5) та кількість епох, використовуємо early stopping по loss на валідації. Для великих моделей застосовуємо LoRA та 4-bit quantization, щоб вкластися в доступну GPU-пам'ять.
Оцінка та розгортання
# 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. Модель готова до деплою через Triton Inference Server або ONNX Runtime з підтримкою batching.
Типові помилки при донавчанні та як їх уникнути
- Перенавчання на маленькому корпусі: використовуємо dropout 0.1, early stopping, data augmentation (back-translation).
- Зміщення домену: додаємо 10–20% універсальних даних (наприклад, OPUS).
- Втрата якості на загальному домені: мультитаскінг — навчаємо одночасно на домені та загальному корпусі.
- Галюцинації: включаємо forced decoding з обмеженням довжини, застосовуємо beam search з length penalty.
Які метрики гарантують якість перекладу?
Ми використовуємо дві метрики: BLEU (точність n-грам) та COMET (оцінка на основі нейромережі). Типовий приріст на доменних даних — +3–8 BLEU та +0.05–0.1 COMET. Цього достатньо для підвищення якості до рівня комерційних систем. Зниження витрат на постредагування на 30–50% — прямий фінансовий ефект.
Що входить у роботу
- Підготовка та очищення паралельних корпусів (включаючи ETL-пайплайн)
- Вибір та конфігурація базової моделі (MarianMT/NLLB/SeamlessM4T)
- Навчання з підбором гіперпараметрів (LR, batch size, dropout, number of beams)
- Оцінка якості (BLEU, COMET, ручна валідація на 200–500 реченнях)
- Експорт моделі в ONNX/TorchScript з оптимізацією latency p99
- Документація: model card, звіт з метриками, інструкція з деплою
- Підтримка протягом 30 днів після здачі
Процес та терміни
| Етап |
Що робимо |
Терміни |
| Аналітика |
Збір даних, визначення метрик, вибір архітектури |
2–5 днів |
| Підготовка даних |
Очищення, токенізація, вирівнювання |
3–10 днів |
| Навчання |
Експерименти з hyperparams, LoRA, quantization |
1–5 днів |
| Оцінка та ітерації |
Тестування на hold-out, виправлення артефактів |
2–5 днів |
| Деплой |
Docker, REST API, моніторинг |
1–2 дні |
Орієнтовні терміни: від 10 робочих днів для MarianMT до 30 днів для NLLB. Вартість розраховується індивідуально під ваш стек та обсяг даних.
Чому варто довіритися нам?
Понад 5 років займаємося NLP-проєктами в продакшені. Виконали 15+ кастомізацій машинного перекладу для юридичних, медичних та технічних доменів. Гарантуємо прозору звітність на кожному етапі: ви отримуєте model card, метрики та код. Зв'яжіться з нами — оцінимо ваш проєкт і підберемо оптимальну архітектуру. Замовте консультацію з fine-tuning вже сьогодні.
NLP розробка: чому accuracy не підходить для рідкісних класів?
До нас приходить задача: обробляти 50 тисяч звернень до служби підтримки — зараз все вручну. Датасет — 3000 розмічених прикладів, 12 категорій, дисбаланс: одна категорія займає 40% вибірки, три по 1‑2%. Baseline accuracy — 78%. Звучить непогано, поки не дивишся на recall по рідкісних класах: 0.31, 0.44, 0.28. Саме ці класи — скарги та загрози відтоку — найважливіші для бізнесу.
Це типовий проект NLP розробки. Проблема не в алгоритмі, а в тому, що accuracy — не та метрика. Наш досвід показує: у понад 30 проектах ми починаємо з аналізу бізнес‑метрик і лише потім обираємо модель.
Чому accuracy — не та метрика для рідкісних класів?
Accuracy ігнорує дисбаланс. Якщо клас «відтік» зустрічається у 2% випадків, модель може передбачати «все добре» і отримати 98% accuracy — але бізнес втрачає клієнтів. Рішення: F1 macro (усереднення за всіма класами) або weighted F1. Для NER — strict entity F1 (лише точні збіги). Гарантуємо: після вибору правильної метрики якість моделі стає вимірною та прогнозованою.
Класифікація тексту: від BERT до дистиляції
BERT-подібні моделі — стандарт для класифікації. ruBERT-base або ruBERT-large від DeepPavlov для російської мови. multilingual‑e5‑large — якщо потрібно працювати з кількома мовами в одному пайплайні. XLM‑RoBERTa‑large — сильний multilingual backbone.
Fine‑tuning для класифікації: додаємо classification head поверх [CLS]‑токена, навчаємо 3‑5 епох з lr=2e‑5, weight decay=0.01. При дисбалансі — weighted CrossEntropyLoss або focal loss з gamma=2.0. Пишіть — покажемо code snippet.
Кейс з дисбалансом. Датасет — 3000 прикладів, дисбаланс 1:20. Рішення: class_weight через sklearn + CrossEntropyLoss. Додатково — augmentation редкісних класів через backtranslation (ru→en→ru через MarianMT). Recall по рідкісних класах виріс з 0.31 до 0.67 при незначному падінні accuracy (76%→74%). Повна NLP розробка під ключ зайняла 3 тижні.
Дистиляція для production. BERT‑large дає F1 0.89, але inference на CPU — 180ms. Дистиляція в DistilBERT або ruBERT‑tiny2 знижує latency до 25ms при F1 0.84. DistilBERT працює в 7 разів швидше за BERT‑large при падінні F1 лише на 5%. Експорт в ONNX Runtime з int8 quantization дає додатковий 1.5‑2x. Оцінимо проект — розрахуємо економію на інфраструктурі.
| Модель |
F1 macro |
Latency (CPU) |
Розмір |
| BERT-large |
0.89 |
180 ms |
1.3 GB |
| DistilBERT |
0.84 |
25 ms |
250 MB |
| ruBERT-tiny2 |
0.81 |
12 ms |
120 MB |
| DistilBERT + ONNX |
0.84 |
14 ms |
150 MB |
Як вибрати модель класифікації під ваш датасет?
Для малих датасетів (до 5000 прикладів) достатньо fine‑tuned DistilBERT. Якщо потрібна багатомовність — XLM‑RoBERTa. При жорстких обмеженнях latency — дистильована модель з ONNX Runtime. Ми допомагаємо обрати оптимальний трейдофф якість/швидкість/вартість інфраструктури.
NER: розпізнавання іменованих сутностей
NER — вилучення персон, організацій, локацій, дат, сум, номерів документів. Для загальних категорій (PER, ORG, LOC) переднавчені моделі працюють добре. Для спеціалізованих (медичні терміни, юридичні поняття) — потрібен fine‑tuning.
Розмітка даних. Основна вартість NER‑проекту. Для якісної моделі — 500‑2000 розмічених речень на кожен тип сутності. Інструменти: Label Studio (open source) або Prodigy (від творців spaCy). Формат IOB2 — стандарт.
Архітектура. Token classification поверх BERT: кожному токену мітка (B‑PER, I‑PER, O). spaCy 3.x з transformer pipeline — зручний production‑вибір.
Вкладені сутності. Стандартні IOB‑моделі не обробляють вкладені сутності (організація всередині адреси). Для таких задач — span‑based NER: SpanBERT або SpERT. Складніше, але правильно.
Постобробка обов’язкова. Модель передбачає токени — потрібні нормалізовані сутності. Дата — dateparser. Суми — regex + валідація. Імена — дедуплікація через rapidfuzz. Входить у нашу стандартну поставку.
Sentiment Analysis та opinion mining
Бінарна класифікація positive/negative працює з BERT з коробки. Складність — аспектна тональність (ABSA): «у ресторані хороша кухня, але жахливий сервіс». Для ABSA: aspect extraction (NER) + sentiment за кожним аспектом. Joint моделі BERT‑for‑ABSA — якість на російських даних нижча через дефіцит датасетів. RuSentiment, SentiRuEval — основні ресурси.
Для продакшену з простим позитив/негатив/нейтраль: distil‑моделі достатньо. Три класи, balanced датасет, 2000+ прикладів — F1 macro 0.82‑0.87 за 1‑2 дні.
Сумарізація тексту
Екстрактивна сумарізація (обираємо речення) — TextRank або BM25 без навчання. Швидко, не галюцинує. Добре для довгих документів.
Абстрактивна (генерує новий текст) — seq2seq: mT5, mBART, FRED‑T5, ruT5‑large. Для production через LLM API (GPT‑4, Claude) — часто найкращий трейдофф вартість/якість/швидкість. Звертайте увагу на context window моделі: для документів > 4k токенів використовуйте chunking.
Ембеддинги: векторні представлення тексту
Ембеддинги — основа семантичного пошуку, дедуплікації, кластеризації, RAG. Якість критично впливає на downstream задачі.
Моделі. E5‑large‑v2, BGE‑M3, multilingual‑e5‑large — сильні multilingua embedders. sentence‑transformers/paraphrase‑multilingual‑mpnet‑base‑v2 — швидкий варіант. Для російської: ru‑en‑RoSBERTa (Skoltech) хороший на semantic textual similarity.
Як оцінити якість ембеддингів? MTEB benchmark — стандарт. Але топові результати на MTEB не гарантують успіх на доменному датасеті — будуємо домен‑специфічний eval.
Fine‑tuning ембеддингів. Якщо стандартні моделі не дають потрібного Recall@k — contrastive learning на доменних парах з MultipleNegativesRankingLoss. 500‑2000 пар, 1‑3 епохи — 5‑15% приріст Recall@k.
Розмірність та зберігання. E5‑large: 1024 dim, float32 — 4KB на вектор. При 10M документів — 40GB. INT8 quantization знижує до 10GB. FAISS IVF_PQ — ще компактніше, але з втратами. Входить у наші рекомендації по деплою.
Вилучення інформації
Структуроване вилучення — одна з частих задач. Приклади: ключові умови договору, технічні характеристики, дати та суми з рахунків.
-
Regex + rule-based. Для ІПН, ЄДРПОУ, сум, дат — надійніше нейромережі. Не потребує даних.
-
NER + постобробка. Для варіативних форматів.
-
LLM з structured output. GPT‑4 / Claude з JSON schema — для складних документів. Вартість: залежить від обсягу документів. Для 10k+ документів/день — рахуємо економіку.
Гарантуємо гібрид: regex/NER для типових полів + LLM для edge cases. Сертифікат довіри: 5 років на ринку, >30 проектів.
Етапи роботи
| Етап |
Тривалість |
Що входить |
| Аналіз даних і метрик |
3‑5 днів |
Розподіл класів, довжина текстів, baseline |
| Baseline (TF‑IDF + LogReg) |
1 день |
Швидка оцінка розриву з глибокими моделями |
| Навчання та валідація |
1‑2 тижні |
k‑fold, early stopping, аналіз помилок |
| Деплой (ONNX + FastAPI) |
1‑2 тижні |
REST API, батчинг, моніторинг |
| Документація та навчання |
2‑3 дні |
Model card, API docs, навчання команди |
Прототип на існуючих даних — 1‑3 тижні. Production‑система з CI/CD — 1.5‑2.5 місяця. Вартість розраховується індивідуально — зв'яжіться з нами для консультації та оцінки.
Що входить у роботу
- Документація з архітектури моделі та пайплайну
- Доступи до моделі через REST API (FastAPI + ONNX)
- Навчання команди замовника (2 години вебінару + Q&A)
- Гарантія на точність моделі на обумовленій тестовій вибірці
- Підтримка 3 місяці після здачі (багфікс, адаптація під нові дані)
Наш досвід
Понад 5 років у NLP, 30+ проектів від класифікації до RAG‑систем. Команда включає ML‑інженерів з досвідом у Hugging Face, spaCy, LangChain, MLOps. Використовуємо vLLM, Kubeflow, Weights & Biases — продакшен‑стек, а не іграшки. Замовте консультацію — оцінимо проект за 2 дні.