Обработка естественного языка
BERT и маскированные LM
Предварительные знания
- Механизм attention и self-attention - основа Transformer-энкодера
- Encoder-Decoder архитектура: BERT использует только энкодерную часть
BERT и двунаправленное предобучение
В октябре 2018 года Джейкоб Девлин, Мин-Вэй Чанг, Кентон Ли и Кристина Тутанова из Google опубликовали 'BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding'. Главная идея - masked language modeling: модель видит предложение целиком и предсказывает случайно замаскированные токены, используя контекст слева и справа одновременно. До этого ELMo комбинировал две однонаправленные модели, а GPT-1 был чисто слева-направо; BERT же был по-настоящему двунаправленным благодаря Transformer-энкодеру (Васвани и др., 2017). Вторая задача предобучения - Next Sentence Prediction. BERT обновил state-of-the-art сразу на 11 задачах GLUE и SQuAD и закрепил парадигму 'pretrain then fine-tune', доминирующую в NLP до сих пор. Masked LM из BERT остаётся базовым рецептом предобучения энкодеров (RoBERTa, DeBERTa, ModernBERT)
Ноябрь 2018: команда Google публикует BERT. За три месяца он устанавливает рекорды на 11 NLP бенчмарках одновременно - GLUE, SQuAD, Named Entity Recognition. Такого прорыва в NLP не было со времён word2vec. Фокус в том, что BERT никогда не видел ни одной размеченной задачи при предобучении - только сырой текст из Wikipedia и BookCorpus. Всё, что нужно для задачи, добавляется за несколько часов fine-tuning.
- **Google Search** с 2019 года использует BERT для понимания поисковых запросов - особенно для conversational queries с предлогами и контекстно-зависимыми словами. Это затронуло 10% всех запросов при запуске
- **Bing** и большинство корпоративных поисковых систем используют BERT-based rankers для оценки релевантности документов - эмбеддинги [CLS] служат векторным представлением документа в семантическом поиске
- **GitHub Copilot** в части code review использует CodeBERT - вариант BERT, предобученный на коде с GitHub, для понимания семантики функций и комментариев
Masked Language Modeling: BERT учится заполнять пробелы
GPT читает текст слева направо и предсказывает следующее слово. Это мощно, но однобоко: модель видит только левый контекст. BERT (Bidirectional Encoder Representations from Transformers, 2018) переворачивает задачу: случайно маскируется 15% токенов, и модель должна восстановить их, видя ВЕСЬ контекст - и левый, и правый. 'Банк [MASK] деньги' - это хранит. 'Банк реки [MASK] крутой' - это берег. Только двунаправленный контекст позволяет разрешить такую полисемию. За счёт этого BERT-эмбеддинги слов контекстно-зависимы - то, чего не могло дать Word2Vec.
Из 15% маскируемых токенов: 80% заменяются на [MASK], 10% на случайный токен, 10% оставляются неизменными. Это предотвращает переобучение к [MASK] токену и помогает модели учиться на реальных словах. При fine-tuning [MASK] не встречается - модель должна уметь работать с обычным текстом.
Почему BERT маскирует только 80% из выбранных 15% токенов, а не все 15%?
Next Sentence Prediction и его критика
BERT обучается на двух задачах одновременно. NSP (Next Sentence Prediction): модели подаются два предложения, и она предсказывает, следует ли второе за первым в оригинальном тексте. Цель - научить модель понимать отношения между предложениями для задач вроде Question Answering и Natural Language Inference. На практике NSP оказался слабым: модель легко решает задачу через лексические подсказки, не понимая реальной связи. RoBERTa (2019) убрала NSP и показала улучшение - это стало одним из самых неожиданных результатов в NLP.
Взамен NSP предложены лучшие задачи: Sentence Order Prediction (SOP) в ALBERT - предсказание правильного порядка двух последовательных предложений; Whole Word Masking - маскирование целых слов вместо subword токенов. Текущий консенсус: MLM достаточно для большинства downstream задач, межпредложенческие задачи нужны только при работе с парами предложений.
RoBERTa убрала NSP из предобучения и показала улучшение. Что это говорит о NSP?
Fine-tuning: один BERT для сотни задач
BERT предобучается 4 дня на 64 TPU. После этого для новой задачи нужно лишь несколько часов fine-tuning на специфических данных - это революция трансфер-обучения в NLP. Для классификации: добавляется линейный слой поверх [CLS] токена. Для NER: линейный слой поверх каждого токена. Для QA: два линейных слоя предсказывают начало и конец ответа в тексте. Во всех случаях весь BERT обновляется через backpropagation - это full fine-tuning, в отличие от feature extraction.
Типичные гиперпараметры fine-tuning BERT: learning rate 2e-5 до 5e-5, batch size 16 или 32, 2-4 эпохи. Слишком большой LR или слишком много эпох - catastrophic forgetting предобученных знаний. Warming up первые 10% шагов с последующим linear decay - стандартная стратегия. PEFT (Parameter-Efficient Fine-Tuning) через LoRA позволяет обновлять лишь 0.1% параметров при сопоставимом качестве.
В чём разница между fine-tuning и feature extraction при использовании BERT?
[CLS] токен: вектор смысла всего предложения
BERT всегда добавляет специальный токен [CLS] (Classification) в начало каждого входа. После прохождения через все 12 (или 24) слоёв трансформера [CLS] содержит 768-мерный вектор, который аккумулировал информацию из всей последовательности через self-attention. Именно этот вектор используется для классификации предложений. Важный нюанс: в предобученном BERT [CLS] хорошо подходит для NSP задач, но для задач семантического сходства (sentence similarity) средний пул всех токенов или специально обученные Sentence-BERT представления работают лучше.
Sentence-BERT (SBERT) обучает siamese сеть на парах предложений, оптимизируя косинусное сходство [CLS] векторов. Это позволяет эффективно вычислять сходство: 10 000 предложений попарно - 50 миллионов сравнений займут 65 часов у BERT, но 5 секунд у SBERT (после предварительного вычисления всех эмбеддингов).
[CLS] токен изначально содержит информацию о всём предложении, т.к. стоит первым и 'видит' все следующие токены
[CLS] аккумулирует информацию через self-attention во всех слоях трансформера. В нижних слоях [CLS] содержит мало осмысленной информации - полезное представление появляется только после прохождения через все 12 слоёв
Self-attention симметричен: [CLS] видит все токены, но и все токены видят [CLS]. Информация аккумулируется итеративно через слои, не за счёт позиции. Именно поэтому для downstream задач берут вывод последнего слоя, а не первого
Почему mean pooling токенов BERT часто лучше [CLS] для задач семантического сходства предложений?
Ключевые идеи
- **MLM** даёт BERT двунаправленный контекст: маскирование 15% токенов и их предсказание при виде всей последовательности создаёт контекстно-зависимые эмбеддинги, недоступные для однонаправленных моделей
- **NSP оказался лишним**: RoBERTa без NSP превзошла BERT - это показало, что MLM достаточно для большинства задач. Современные модели используют SOP (Sentence Order Prediction) если межпредложенческая связь важна
- **Fine-tuning за часы** вместо предобучения за дни: добавление классификационной головы поверх [CLS] + 2-4 эпохи на целевых данных даёт state-of-the-art результаты. Mean pooling токенов часто превосходит [CLS] для задач sentence similarity
Связанные темы
BERT - центральный узел современной NLP архитектуры:
- GPT и авторегрессионные LM — GPT и BERT - два противоположных подхода: авторегрессионный vs маскированный. GPT лучше для генерации, BERT - для понимания
- Machine Translation — BERTScore использует BERT эмбеддинги для оценки качества перевода; mBERT применяется как энкодер в гибридных NMT системах
Вопросы для размышления
- BERT обучается предсказывать маскированные токены без какой-либо явной разметки. Какие знания о языке возникают как эмерджентные свойства этой простой задачи?
- Catastrophic forgetting при fine-tuning - реальная проблема. Как бы организовали fine-tuning BERT для медицинской документации, где нужно сохранить как общеязыковые, так и специфические медицинские знания?
- BERT имеет ограничение в 512 токенов. Как обрабатывать длинные документы (целые статьи, юридические контракты) при классификации?
Связанные уроки
- nlp-13 — GPT авторегрессионный там, где BERT маскированный двунаправленный
- nlp-10 — Self-attention обобщает внимание seq2seq в трансформеры
- nlp-07 — Дообученный BERT стал классификатором текста по умолчанию
- ml-31-transformers — BERT - это стек энкодеров Transformer
- ml-41-transfer-learning — Предобучение и дообучение - трансферное обучение для текста
- it-01 — Маскированная LM минимизирует кросс-энтропию по маскированным токенам
- dl-01