34 BERT
Контекст
До 2018 предобучение в NLP было однонаправленным (LM слева-направо, как GPT) или мелким (word2vec). Девлин и др. делают глубокое ДВУнаправленное предобучение.
Идея и механизм
Трансформер-ЭНКОДЕР (видит всю последовательность сразу). Предобучение на двух self-supervised задачах: Masked LM — маскируем ~15% токенов и предсказываем их по контексту с ОБЕИХ сторон; Next Sentence Prediction — идут ли два предложения подряд (позже признано малополезным). Затем под задачу добавляем небольшую «голову» и дообучаем всю модель.
теория вероятностей Masked LM vs обычная языковая модель
Обычная (causal) LM моделирует P(xt | x<t) — только левый контекст; представление токена не знает, что справа. Masked LM маскирует подмножество позиций M и предсказывает их по всему остальному:
Поскольку x\M включает токены и слева, и справа от i, представление каждого токена становится по-настоящему двунаправленным — чего left-to-right LM достичь не может (иначе токен «увидел бы» свой ответ). Цена: токен [MASK] есть только при обучении, а на инференсе его нет (train/test несоответствие). Фирменный приём BERT — расщепление выбранных 15%: 80% → [MASK], 10% → случайный токен, 10% → оставить исходный. Подмена и «исходники» заставляют модель строить хорошее представление для каждой позиции (она не знает, настоящий ли там токен), сглаживая разрыв с инференсом.
PyTorch Лосс masked LM
import torch.nn.functional as F
# labels = −100 на немаскированных позициях → игнорируются в лоссе
def mlm_loss(logits, labels, V):
return F.cross_entropy(logits.view(-1, V), labels.view(-1),
ignore_index=-100) # только замаскированные
Почему это важно
Скачок сразу на 11 NLP-бенчмарках (GLUE +7.7), закрепил «pre-train → fine-tune» как стандарт. Encoder-стиль (понимание: классификация, NER, retrieval, экстрактивный QA) — ветка, параллельная генеративным GPT; эмбеддинги BERT-семейства до сих пор работают в поиске и RAG.
Связи
BERT — это энкодерная половина трансформера, поставленная на масштабное self-supervised предобучение. Без self-attention двунаправленность была бы неэффективной; Transformer дал и архитектуру, и параллелизм для обучения на огромных корпусах.
Две ветви одной идеи «предобучить трансформер на тексте». BERT — encoder-only, двунаправленный, заточен под понимание; GPT — decoder-only, авторегрессионный, заточен под генерацию. Разошлись в 2018-м и определили два класса моделей.
Идея «предобучить энкодер на self-supervised сигнале, потом использовать представления» обобщается за пределы текста. CLIP делает то же для пары «картинка-текст», а текстовый энкодер там — прямой потомок BERT-подхода.
Вопросы пытливого ума
Почему BERT почти не используют для генерации текста?
Он двунаправленный и обучен заполнять пропуски, а не продолжать текст слева направо. Для авторегрессионной генерации нужна causal-модель (GPT), которая на каждом шаге видит только прошлое. BERT блестящ в понимании (классификация, поиск, извлечение), но генерировать связный текст по своей конструкции не предназначен.
Маскируется только 15% токенов — почему не больше, не меньше?
Компромисс. Маскировать мало — мало сигнала на проход, обучение неэффективно. Маскировать много — слишком мало контекста остаётся, задача становится нерешаемой и портит представления. 15% эмпирически балансирует «достаточно целей / достаточно контекста». Поздние работы (например, маскирование 40% в больших моделях) показали, что оптимум зависит от размера модели.
Почему NSP (next sentence prediction) потом выкинули?
Последующие работы (RoBERTa) показали, что NSP почти не помогает, а иногда вредит — задача слишком лёгкая (различить связные и случайные предложения тривиально по теме). Убрав NSP и дольше обучая MLM на большем корпусе, RoBERTa превзошла BERT. Хороший урок: не каждая «разумная» вспомогательная задача реально полезна — это надо проверять.
Что читать в оригинале
Читать ключевое — MLM и схему fine-tune; ablations и детали NSP можно пролистать (с поправкой на то, что NSP позже признали лишним).