23 / 37 · Предобученные языковые модели
Перенос обучения в NLP
Три способа использовать один предобученный энкодер на одной задаче, измеренные на AG News: промпт с пропуском без обучения (46%, а с названием метки, выбранным по тестовым статьям, — 61%), замороженные векторы [CLS] под логистической регрессией (90%) и полное дообучение (95% на отложенной десятой части обучающей выборки). Заметка объясняет, что переносит каждый способ и чего он стоит.
BERT и маскированное языковое моделирование · Энкодеры, декодеры и модели энкодер–декодер · Корпусы и оценка качества
На этой странице 10
У курса один сквозной бенчмарк: классификация AG News по четырём темам, где TF-IDF набрал 0.918, а каждая модель, обученная с нуля, — меньше. Предобученный энкодер меняет вопрос с «какая архитектура» на «как использовать то, что выучено на 3 млрд слов». Эта заметка пробует три стандартных ответа на одной и той же модели и одних и тех же данных в порядке роста цены и получает первый результат выше базового уровня — с оговоркой о разбиениях, которую разбирает сравнение ниже.
Обозначения. Предобученный энкодер отображает последовательность токенов в векторы ; — вектор в первой позиции. Выходной слой задачи отображает вектор в логиты. «Заморожен» значит, что не обновляется.
Отправная точка: предобученная модель как чёрный ящик#
Контрольная точка — это набор весов и токенизатор. С ней можно сделать три вещи, не обучая с нуля: задавать ей вопросы на её собственном языке (промптинг), читать её выходы как признаки для другой модели или продолжить её обучение на задаче. Каждый способ переносит свою часть того, чему научило предобучение.
Три способа использовать один предобученный энкодер
Zero-shot-классификация через выходной слой MLM#
Что переносится: умение модели заполнить пропуск правдоподобным словом, показанное в заметке о BERT.
Допишем к каждой статье шаблон This news is about [MASK]. и прочитаем распределение MLM в маскированной позиции, ограниченное четырьмя словами-кандидатами, по одному на класс: world, sports, business, technology. Предсказание — кандидат с наибольшей вероятностью. Ни один параметр не обучается; «обучение» — это выбор шаблона и слов.
| Постановка | Доля верных |
|---|---|
Метки world / sports / business / technology | 0.456 |
| по классам: World 0.03, Sports 0.51, Business 0.96, Sci/Tech 0.32 | |
Метки politics / sports / business / technology, выбранные по тестовым статьям | 0.613 |
Первый результат похож на слабый классификатор; числа по классам говорят, что он сломан. Почти каждая статья World получает другую метку, потому что world — не то слово, которым завершают «This news is about ___» для статьи о выборах. Если посчитать 100 самых вероятных заполнителей модели по 1900 тестовым статьям World, чаще всего встречаются us, it, america, me, you, politics и news; если отбросить местоимения, естественная метка — politics или название страны. Замена world на politics поднимает долю правильных ответов с 0.456 до 0.613 без всяких других изменений. Метод работает в той мере, в какой название класса — это слово, которое модель употребила бы естественно, а это свойство шаблона и словаря, а не статей.
0.613 получено с подсказкой от теста. Новое слово нашли, читая заполнители тестовых статей World и ошибки по классам на тесте, а затем оценили на том же тесте. Выбор, сделанный с оглядкой на оценочные данные, оптимистичен, и насколько — этот прогон измерить не может. Чистый протокол выбирает шаблон и слова-метки на отдельной выборке для разработки (чтобы посчитать заполнители, хватит нескольких сотен размеченных обучающих статей) и оценивает на тесте один раз. Здесь 0.456 — единственное zero-shot-число, полученное без взгляда на тестовые метки; 0.613 показывает, насколько важно слово-метка, а не то, чего стоит ждать от zero-shot-классификатора.
Zero-shot — самый дешёвый и самый слабый путь: 0.613 намного ниже TF-IDF. Его ценность — в том, что не нужны размеченные обучающие данные (хотя для честного выбора слов-меток всё же нужна небольшая размеченная выборка для разработки), и в задачах, метки которых — обычные слова. Для модели из одного декодера та же идея превращается в промптинг с несколькими примерами (заметка о GPT), что сильнее, но это по-прежнему предсказание из предобученного распределения, а не из данных задачи.
Замороженные признаки и линейная модель#
Что переносится: контекстные векторы.
Прогоним каждую статью через замороженный энкодер, возьмём (768 чисел) и обучим многоклассовую логистическую регрессию на 120 000 векторах. Это конвейер TF-IDF, в котором разреженный вектор счётчиков размерности 29 350 заменён плотным размерности 768.
| Признаки | Доля верных у линейной модели (тест) |
|---|---|
| TF-IDF, размерность 29 350 | 0.918 |
Замороженный [CLS] BERT, размерность 768 | 0.902 |
Вектор энкодера несёт тему, хотя его этому никогда не обучали: линейное считывание восстанавливает 90% меток. Базовый уровень на счётчиках он не превосходит по причине, которую уже встретила заметка о CNN: набор признаков, подогнанный под задачу (каждое слово со своим весом), трудно превзойти набором признаков общего назначения, а [CLS] предобучался предсказывать соседство предложений, а не тему. Для замороженного энкодера усреднение векторов токенов обычно работает лучше [CLS], но в это сравнение оно не входит.
Цена: один прямой проход на документ, один раз, а затем модель, которая обучается за секунды и, если векторы закэшированы, работает при инференсе без энкодера. Это путь для случаев, когда энкодер должен оставаться неизменным (общим для нескольких задач или обслуживаемым один раз для многих потребителей), и именно им идёт поиск по эмбеддингам предложений в заметке о семантическом поиске.
Дообучение всего энкодера#
Что переносится: сами веса как инициализация.
Поставим на [CLS] новый линейный выходной слой и обучим все параметры, энкодер и выходной слой, на размеченных данных с маленьким шагом обучения. Предобученные веса — отправная точка, а функция потерь задачи их сдвигает.
| Модель | Обучаемые параметры | Доля верных (валидация) |
|---|---|---|
| BERT-base + линейный выходной слой, 3 эпохи, шаг , батч 16 | 110 млн | 0.949 |
Отложено 10% обучающей выборки (12 000 статей), потому что у AG News нет валидационной части. Три прохода по 108 000 статьям с шагом обучения в 50 раз меньше, чем при обучении с нуля, дают 0.949 на этих 12 000 отложенных статьях. Это на три пункта выше 0.918 у TF-IDF и примерно на четыре выше лучшей модели, обученной с нуля, но те числа — доля верных на 7600 тестовых статьях. Примеры разные, так что разница ориентировочная, а не парное сравнение: чтобы говорить о выигрыше, обе модели нужно оценить на одних и тех же нетронутых тестовых статьях. Маленький шаг обучения здесь главное: цель — подправить предобученное представление, а не переписать его, и бо́льшие шаги стирают его (катастрофическое забывание) прежде, чем выходной слой успеет чему-либо научиться.
| Путь | Что обучается | Какие нужны данные | На чём оценено | Доля верных на AG News |
|---|---|---|---|---|
| Zero-shot с пропуском | ничего | шаблон | тест (слово-метка выбрано по тесту) | 0.456 / 0.613 |
| Замороженные признаки + линейная модель | 768 × 4 весов | метки | тест | 0.902 |
| Полное дообучение | 110 млн | метки | отложенные 10% обучающей выборки | 0.949 |
| TF-IDF + линейная модель (без предобучения) | 29 350 × 4 | метки | тест | 0.918 |
Что именно переносится#
Три пути переносят соответственно предобученное выходное распределение, предобученное представление и предобученные веса как инициализацию. Дообучение выигрывает, потому что использует больше всего: каждый слой может подстроиться, а градиент функции потерь задачи проходит в шаблоны внимания и признаки полносвязных слоёв, построенные предобучением. Путь с заморозкой не может изменить то, что кодирует [CLS]; путь zero-shot не может изменить ничего.
Выигрыш эмпирический, и его многократно измеряли со времён Howard and Ruder (2018) и Devlin et al. (2019): дообученные энкодеры превосходят модели, обученные с нуля, с запасом, который растёт по мере уменьшения размеченной выборки. При 120 000 меток запас на AG News здесь — около трёх пунктов, между валидационным и тестовым числом; при 1000 меток модели с нуля разваливаются, а дообученные держатся.
Ограничения#
- Полное дообучение даёт полную копию. Каждая задача получает свои 110 млн (или 7 млрд) параметров. Эту цену снижает заметка о PEFT.
- Нестабильность. Запуски дообучения различаются в зависимости от seed, особенно на малых выборках; практика — несколько запусков и выбор по валидации (Dodge et al., 2020).
- Забывание. Дообученная модель хуже во всём, кроме своей задачи; предобученная общность израсходована.
- Zero-shot зависит от формулировки. Выбор шаблона и слов-меток изменил здесь долю правильных ответов на тесте на 16 пунктов, причём слово выбиралось по тому же тесту; с ростом моделей эта чувствительность не исчезает, а переходит в промпт.
- Замороженный
[CLS]— слабый вектор предложения. Модели, предназначенные для эмбеддингов, обучают для этого с контрастной целью, а не считывают их с маскированной языковой модели.
Что нужно запомнить#
- Zero-shot через выходной слой MLM: переформулировать задачу как пропуск, ограничить словарь словами-метками; доля правильных ответов зависит от слов-меток (0.456 → 0.613 после переименования одного класса; новое название выбрано по тестовым статьям, так что 0.613 оптимистично).
- Замороженные признаки:
[CLS]+ логистическая регрессия дают 0.902, ниже 0.918 у TF-IDF; предобученный вектор несёт тему, но обучен не для неё. - Полное дообучение с маленьким шагом даёт 0.949 на отложенной десятой части обучающей выборки — первый результат выше 0.918 базового уровня на тесте; разбиения разные, так что три пункта ориентировочные. Выигрыш даёт предобученная инициализация.
- Приводить метрики по классам: за 0.456 скрывался класс с 3%.
- Каждая дообученная задача стоит полной копии модели, и следующий раздел эту цену снижает.
Ноутбук#
week06_BERT.ipynb. Номера ячеек считают все ячейки, включая текстовые, начиная с 1. Приведённые числа взяты из прогона, сохранённого в курсе; у ячеек, изменённых с тех пор под текущие версии библиотек, сохранённого выхода нет.
- Ячейки 31–36 строят тестовую выборку с промптом (
text + " This news is about [MASK]."), запускают конвейерfill-maskсtargets, равными четырём словам-меткам, и приводят 0.456. - Ячейки 38–39 считают долю правильных ответов по классам; ячейки 41–44 отбирают статьи World и считают 100 самых вероятных заполнителей конвейера; ячейки 46–49 переименовывают класс в
politicsи приводят 0.613. - Ячейки 52–57 переключаются на конвейер
feature-extraction, берут первый выходной вектор (out[0, 0]) каждой статьи как , обучаютLogisticRegressionна обучающих векторах (решатель останавливается на пределе итераций, о чём говорит предупреждение) и приводят 0.902 на тесте. Усреднение векторов токенов не запускается. - Ячейка 60 дообучает
AutoModelForSequenceClassificationс 4 метками черезTrainer: разбиение обучающей выборки 90/10 с seed 42, обрезка до 128 токенов, 3 эпохи, шаг обучения , затухание весов 0.01, батч 16; в ноутбуке в том виде, в каком курс читали впервые, эта ячейка (тогда ячейка 61) сохранила долю правильных ответов при оценке 0.9486 на отложенных 10%. Код той версии передаёт в качествеcompute_metricsнесуществующий методaccuracy.computes, так что сохранённый выход должен был получиться из более ранней, рабочей версии этой строки; в текущем ноутбуке функция метрики определена, а у этой ячейки нет сохранённого выхода.
Дальше#
Дообучение — лучший из трёх путей и самый дорогой: полный набор весов на задачу, обученный с осторожностью. Следующий раздел курса о том, как делать это дешевле и лучше. Заметка о дообучении переносит вопрос на модель из одного декодера и сравнивает обучение всего, обучение только выходного слоя и обучение сначала выходного слоя, а потом всего.
Литература#
- J. Howard, S. Ruder. Universal Language Model Fine-tuning for Text Classification. ACL, 2018. ULMFiT: дообучение предобученной языковой модели для классификации.
- J. Devlin, M.-W. Chang, K. Lee, K. Toutanova. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. NAACL, 2019. §4 (процедура дообучения и результаты).
- T. Schick, H. Schütze. Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference. EACL, 2021. Pattern-exploiting training: формулировка классификации через пропуск, использованная выше.
- J. Dodge, G. Ilharco, R. Schwartz, A. Farhadi, H. Hajishirzi, N. Smith. Fine-Tuning Pretrained Language Models: Weight Initializations, Data Orders, and Early Stopping. arXiv, 2020.
- N. Reimers, I. Gurevych. Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks. EMNLP, 2019. Почему замороженный
[CLS]— плохой вектор предложения и что обучать вместо него. - M. E. Peters, S. Ruder, N. A. Smith. To Tune or Not to Tune? Adapting Pretrained Representations to Diverse Tasks. RepL4NLP, 2019. Извлечение признаков против дообучения.