20 / 37 · Предобученные языковые модели
BERT и маскированное языковое моделирование
Энкодер нельзя обучать как языковую модель слева направо, не выдав ему ответ, поэтому BERT скрывает 15% токенов и предсказывает их по контексту с обеих сторон. Заметка приводит цель обучения, формат входа, архитектуру в числах, объясняет, что такое контекстный вектор токена, и показывает, что умеет сам по себе предобученный выходной слой маскированной языковой модели.
Архитектура трансформера · Трансформер для машинного перевода · Токенизация
На этой странице 12
Каждая модель курса до сих пор обучалась на данных своей задачи. Трансформер, обученный с нуля на 120 000 новостных статей в заметке об архитектуре, не превзошёл мешок счётчиков. Неразмеченного же текста сколько угодно, и заметка о Word2Vec показала, что задача предсказания на нём даёт переиспользуемые представления. BERT (Devlin et al., 2019) применяет ту же идею к полному энкодеру трансформера: предобучить его заполнять пропуски, а затем переиспользовать всю сеть.
Обозначения. Входные токены , из которых для предсказания выбирается подмножество ; искажённый вход — ; выход энкодера в позиции — .
Отправная точка: цель языковой модели для энкодера#
Естественная задача обучения с самоконтролем — предсказание следующего токена, которое даёт модели из одного декодера из следующей заметки. Энкодер же двунаправленный: позиция смотрит на каждую позицию, включая . Если обучать его предсказывать по , сеть может скопировать ответ со входа через одну голову внимания; функция потерь уходит в ноль, и ничего не выучивается. Предсказание слева направо и двунаправленный контекст в одном стеке несовместимы.
Маскированное языковое моделирование#
Для каждой обучающей последовательности 15% позиций выбираются в . Входной токен в позиции из заменяется на [MASK] с вероятностью 0.8, на случайный токен словаря с вероятностью 0.1 и остаётся без изменений с вероятностью 0.1. Модель предсказывает исходный токен в каждой позиции из через softmax по словарю, а функция потерь — кросс-энтропия только по этим позициям:
где — небольшое преобразование (линейный слой, GELU и LayerNorm), а связана с матрицей входных эмбеддингов. Правило 80/10/10 нужно потому, что при дообучении [MASK] никогда не встречается: если бы в немаскированных позициях модель видела только настоящие токены, она научилась бы их игнорировать, а случаи со случайным и неизменённым токеном заставляют её строить полезное представление каждой позиции.
В последовательности из 128 токенов выбирается около 19 позиций; примерно 15 из них становятся [MASK], 2 — случайным токеном и 2 остаются как были. Модель обучается на 19 предсказаниях на каждые 128 прочитанных токенов, и из-за этой доли маскированное языковое моделирование (MLM) сходится в пересчёте на токен медленнее, чем предсказание следующего токена, которое обучается на всех 128.
Маскированное языковое моделирование на одном предложении
BERT предобучается и на второй задаче — предсказании следующего предложения (next-sentence prediction): на вход подаются два фрагмента, и классификатор на первой позиции предсказывает, шёл ли второй за первым в корпусе. Позже выяснилось, что она не нужна (Liu et al., 2019); от неё остался формат входа BERT.
Вход#
Вход BERT — [CLS] фрагмент A [SEP] фрагмент B [SEP], дополненный до длины батча. Суммируются три таблицы эмбеддингов: токенов (WordPiece, 30 522 записи у английской модели без учёта регистра), позиций (выученная таблица из 512 строк, так что 512 токенов — жёсткий максимум) и сегментов (token_type_ids, 2 строки, отмечающие A или B). Сумма нормализуется и подаётся в энкодер. [CLS] — токен без содержания, выходной вектор которого через предсказание следующего предложения обучается подытоживать пару; это условная «ручка» для задач уровня предложения.
Архитектура в числах#
BERT-base — это 12 блоков энкодера post-norm с , 12 головами ширины 64, и GELU:
| Компонент | Параметры |
|---|---|
| Эмбеддинги токенов | 23.4 млн |
| Эмбеддинги позиций | 0.4 млн |
| 12 блоков × | 84.9 млн |
Пулер (один линейный слой на [CLS]) | 0.6 млн |
| Всего | ≈ 110 млн |
Арифметика та же, что в заметке об архитектуре. BERT-large удваивает глубину и расширяется до 1024 (340 млн). Предобучение шло на 3.3 млрд слов из книг и Википедии; получившаяся контрольная точка общедоступна и загружается одной строкой.
От статических к контекстным эмбеддингам#
Выход — это вектор для токена в этом предложении. Он вычислен двенадцатью раундами внимания по всем остальным токенам, поэтому от них зависит. Слово bank получает разные векторы в «river bank» и «bank account»; вектор Word2Vec из заметки об эмбеддингах был один на оба случая. В этом смысле предобученный энкодер даёт контекстные эмбеддинги (contextual embeddings), и поэтому одна и та же сеть полезна для задач, с которыми статические векторы справиться не могли:
- Вектор токена можно классифицировать линейным слоем, чтобы присвоить ему тег (заметка о NER) или отметить его как начало или конец ответа (заметка о QA).
- Вектор
[CLS]или среднее всех векторов дают по одному вектору на предложение, и их можно сравнивать по косинусному сходству. Но одно усреднение не даёт полезной геометрии: сырые векторы[CLS]BERT плохо упорядочивают пары предложений, и осмысленное пространство предложений требует обучения на уровне предложений, обычно контрастного (заметка о сходстве предложений). На таком обученном пространстве и строит поиск заметка о семантическом поиске. - Весь стек можно дообучить на размеченной задаче; это измеряет заметка о переносе обучения.
Модель из одного энкодера: контекстный вектор на каждый токен и два вида выходных слоёв
Что содержат эти векторы — эмпирический вопрос, который изучают зондированием (probing): нижние слои несут в основном лексическую и синтаксическую информацию, верхние — более семантическую и связанную с задачей (Tenney, Das and Pavlick, 2019).
Что умеет предобученный выходной слой#
Выходной слой MLM сам по себе — пригодная модель. Подадим Elephants are playing in the zoo with monkeys. The story is about [MASK]. и прочитаем распределение в маскированной позиции:
| Токен | |
|---|---|
| elephants | 0.216 |
| monkeys | 0.109 |
| animals | 0.086 |
| elephant | 0.039 |
| children | 0.022 |
Наверху — сущности предложения и их гипероним, прочитанные из модели, которой никогда не говорили, что такое «story», и не задавали вопросов. Это механизм zero-shot-использования BERT: задача классификации переформулируется как заполнение пропуска, а ответ читается из словаря; заметка о переносе обучения запускает это на AG News и находит и обещание, и пределы такого подхода. Конвейер fill-mask из библиотеки transformers объединяет токенизацию, модель и чтение top- в один вызов и возвращает те же числа.
Что изменилось#
| Трансформер, обученный на задаче | Предобученный энкодер | |
|---|---|---|
| Обучающие данные | Метки задачи (от тысяч до миллионов) | Неразмеченный текст (миллиарды токенов) |
| Цель обучения | Функция потерь задачи | Заполнение маскированных токенов |
| Представление токена | Выучено для этой задачи | Контекстное, переиспользуемое |
| Направление | Любое | Двунаправленное |
| Использование | Одна задача | Признаки, zero-shot, дообучение |
| Цена для пользователя | Полное обучение | Скачать 110 млн параметров |
Ограничения#
- Нет порождения. Энкодер предсказывает скрытые токены по остальным; продолжить текст он не может. Модели из одного декодера из следующей заметки могут.
- Расхождение предобучения и дообучения.
[MASK]встречается только при предобучении; правило 80/10/10 сокращает этот разрыв, но не убирает. - Неэффективность по примерам. Функцию потерь дают только 15% позиций, поэтому каждая последовательность приносит мало обучающих сигналов.
- 512 токенов. Выученная таблица позиций фиксирует максимальную длину.
- Статичный словарь и регистр.
bert-base-uncasedне отличаетUSотus; вариант с учётом регистра отличает ценой большего эффективного словаря. - Нужна адаптация. Прямо из коробки путь zero-shot слаб; ценность модели проявляется после дообучения или когда её векторы подаются в другую модель.
Что нужно запомнить#
- MLM: скрыть 15% токенов (80%
[MASK], 10% случайный, 10% без изменений), предсказать их с полным двунаправленным вниманием, функция потерь — только по маскированным позициям. - Вход:
[CLS] A [SEP] B [SEP]с эмбеддингами токенов, позиций и сегментов; не больше 512 позиций. - BERT-base: 12 блоков, , 12 голов, ≈ 110 млн параметров, из них 85 млн в блоках.
- Выходные векторы контекстные: один вектор на токен в каждом предложении, пригодный для разметки, извлечения фрагментов, сходства предложений и дообучения.
- Выходной слой MLM отвечает на промпты с пропуском без всякого обучения на задаче — это zero-shot-использование.
Ноутбук#
week06_BERT.ipynb. Номера ячеек считают все ячейки, включая текстовые, начиная с 1. Приведённые числа взяты из прогона, сохранённого в курсе; у ячеек, изменённых с тех пор под текущие версии библиотек, сохранённого выхода нет.
- Ячейки 3–6 загружают AG News и токенизируют его
bert-base-uncased; напечатанный пример показывает идентификаторы[CLS](101) и[SEP](102) вокруг текста. - Ячейка 9 загружает
AutoModel.from_pretrained('bert-base-uncased')и печатает дерево модулей, по которому составлена таблица выше: три таблицы эмбеддингов, 12 слоёвBertLayerс вниманием ширины 768 и промежуточным слоем ширины 3072 и пулер. - Ячейка 12 загружает
AutoModelForSequenceClassificationс 10 метками и показывает предупреждение, что веса классификатора инициализированы заново: выходные слои задач не входят в контрольную точку. - Ячейки 18–23 загружают выходной слой MLM (
AutoModelForMaskedLM), строят промпт про слонов, берут softmax в позиции[MASK](индекс −3) и печатают 10 самых вероятных токенов, приведённых выше. - Ячейки 26–30 повторяют то же через конвейер
fill-maskи получают те же вероятности.
Дальше#
Предобученный энкодер представляет текст, но не пишет его. Следующая заметка обучает компоновку с декодером на простой цели предсказания следующего токена из n-граммной заметки, только в большом масштабе, и смотрит, что делает такая модель по промпту, как её вероятности превращаются в текст и почему результат — продолжатель текста, а не ассистент.
Литература#
- J. Devlin, M.-W. Chang, K. Lee, K. Toutanova. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. NAACL, 2019. §3.1 (MLM и NSP), приложение A.1 (правило 80/10/10).
- Y. Liu et al. RoBERTa: A Robustly Optimized BERT Pretraining Approach. arXiv, 2019. Отказ от NSP, динамическое маскирование.
- I. Tenney, D. Das, E. Pavlick. BERT Rediscovers the Classical NLP Pipeline. ACL, 2019.
- M. E. Peters et al. Deep Contextualized Word Representations. NAACL, 2018. ELMo — первые широко используемые контекстные эмбеддинги, из двунаправленных языковых моделей на LSTM.
- J. Alammar. The Illustrated BERT, ELMo, and co.. 2018.
- Hugging Face. BERT model documentation. Выходные слои
AutoModelFor*, используемые в ноутбуке.