Дообучение моделей на конкретные задачи NLP
Предобучение трансформера на терабайтах текста — дорогое и редкое занятие для большинства команд. Практический NLP — дообучение (fine-tuning) готового чекпоинта под задачу: классификация тикетов, NER по договорам, тональность отзывов, доменный перевод.
Общая теория transfer learning и fine-tuning — статья про обучение на базе готовой модели. Здесь — специфика трансформеров и NLP.
Два этапа жизненного цикла
| Этап | Данные | Цель | Результат |
|---|---|---|---|
| Pre-training | Неразмеченный корпус | Language modeling (MLM / CLM) | Базовые языковые представления |
| Fine-tuning | Размеченные примеры задачи | Минимизировать loss задачи | Модель под продукт |
Иногда между ними — intermediate tuning (domain-adaptive pre-training на текстах отрасли без меток).
Типы «голов» под задачу
| Задача | Архитектура | Выход |
|---|---|---|
| Классификация текста | [CLS] или mean pooling + linear | Один label на документ |
| Token classification (NER) | Linear на каждый token | BIO-метки |
| Seq2seq | Encoder-decoder (T5, BART) | Генерация target |
| Extractive QA | Span start/end logits | Два индекса в контексте |
| Multiple choice | Score для каждого варианта | argmax |
Hugging Face AutoModelForSequenceClassification, AutoModelForTokenClassification, AutoModelForSeq2SeqLM подставляют нужную голову автоматически.
Стратегии обновления весов
Full fine-tuning
Обновляются все параметры модели. Нужны GPU с достаточной VRAM, малый learning rate ($10^-5$ … $10^-4$), часто warmup и weight decay.
Feature extraction (freeze backbone)
Замораживают transformer, обучают только classifier head. Быстро, мало данных — но потолок качества ниже.
Partial unfreezing
Сначала head, затем последние $k$ слоёв, затем весь стек с разными learning rate (discriminative fine-tuning).
Parameter-efficient fine-tuning (PEFT)
| Метод | Идея | Когда |
|---|---|---|
| LoRA | Низкоранговые матрицы в attention | LLM, мало VRAM |
| QLoRA | LoRA + 4-bit базовые веса | Fine-tune 7B+ на одной GPU |
| Adapters | Маленькие bottleneck-слои между блоками | Мультизадачность |
| Prefix / Prompt tuning | Обучаемые виртуальные токены | Очень мало данных |
Подробнее про LoRA в контексте LLM — Работа с ИИ-моделями.
Пример — классификация на Hugging Face Trainer
from transformers import AutoTokenizer, AutoModelForSequenceClassification, TrainingArguments, Trainer
from datasets import load_dataset
model_name = "cointegrated/rubert-tiny2"
num_labels = 2
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=num_labels)
ds = load_dataset("blinoff/rusentiment", split="train[:2000]")
ds = ds.rename_column("text", "sentence")
def tokenize(batch):
return tokenizer(batch["sentence"], truncation=True, padding="max_length", max_length=128)
ds = ds.map(tokenize, batched=True)
ds = ds.rename_column("label", "labels")
ds.set_format("torch")
args = TrainingArguments(
output_dir="./out",
per_device_train_batch_size=16,
num_train_epochs=3,
learning_rate=2e-5,
evaluation_strategy="no",
)
trainer = Trainer(model=model, args=args, train_dataset=ds)
trainer.train()
На inference тот же tokenizer + model(**inputs) → logits → softmax → класс.
Гиперпараметры и типичные ошибки
| Параметр | Рекомендация |
|---|---|
| Learning rate | $2×10^-5$ … $5×10^-5$ для BERT-scale; меньше для больших LLM |
| Batch size | Как можно больше при gradient accumulation |
| Epochs | 2–5; следить за переобучением на val |
| Max length | Усечение под задачу; длинные документы — sliding window |
| Class imbalance | Weighted loss, oversampling, focal loss |
Типичные ошибки
- другой tokenizer на train и prod;
- утечка test в подбор гиперпараметров;
- fine-tune на 10 примерах с full fine-tuning 12-layer BERT — переобучение;
- забытый
model.eval()иtorch.no_grad()на inference.
Операционный контур данных и eval — MLOps, слои 1–3.
Instruction tuning и RLHF (контекст)
Чат-модели после pre-training проходят instruction fine-tuning на парах «запрос — эталонный ответ» и иногда RLHF для предпочтений человека. Это тот же fine-tuning по смыслу, но другой масштаб данных и инфраструктуры — см. LLM.
Дальше
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). Обработка естественного языка — задачи, корпуса, токенизация, метрики и типичный pipeline от сырого текста до модели. Transformer — attention, encoder и decoder, positional encoding, multi-head attention и отличия encoder-only, decoder-only и seq2seq. Минимальная реализация Transformer encoder block на PyTorch — attention, FFN, residual, LayerNorm и учебный forward pass. Семейства Transformer — BERT, GPT, T5, RoBERTa, ALBERT, DistilBERT, Longformer и выбор архитектуры под задачу NLP. Hugging Face pipelines, выбор русскоязычных чекпоинтов, инференс, ONNX и типичный production-путь для NLP. Хронология NLP от ELMo и ULMFiT до GPT-3 — pre-training, transfer learning, бенчмарки GLUE и SuperGLUE, scaling laws. ViT, DETR, Whisper, CLIP и Audio Spectrogram Transformer — как attention переносится с текста на изображения и аудио. Краткие итоги раздела "Трансформеры и NLP" — задачи NLP, attention, архитектуры, fine-tuning и практика с предобученными моделями. Чек-лист самопроверки по разделу Трансформеры и NLP — вопросы для закрепления материала.NLP и работа с текстом
Что такое трансформер — архитектура и особенности
Устройство трансформеров — теория и практика с нуля
Обзор и разбор трансформерных архитектур
Практика работы с предобученными моделями
Современные тренды в NLP (2018–2021)
Трансформеры в разных модальностях — текст, зрение, звук
Трансформеры и NLP — итоги
Трансформеры и NLP — чек-лист