BERT (языковая модель)

BERT (Bidirectional Encoder Representations from Transformers) — языковая модель, представленная в октябре 2018 года исследователями из Google[1][2]. Модель обучается представлять текст в виде последовательности векторов с помощью самонаблюдаемого обучения. В её основе лежит архитектура трансформера (только энкодер). BERT значительно повысил качество результатов для больших языковых моделей. По состоянию на 2020 год BERT стал повсеместным базовым стандартом в экспериментах по обработке естественного языка (NLP)[3].

Обучение BERT основано на задаче предсказания замаскированных токенов и предсказании следующего предложения. Такой подход позволяет модели формировать контекстные, латентные представления токенов, аналогично моделям ELMo и GPT-2[4]. BERT применяется для многих задач обработки естественного языка — таких, как разрешение кореференции и многозначности[5]. Модель усовершенствовала подходы к получению контекстных векторных представлений слов и породила целое направление исследований по анализу BERT («BERTология»)[3].

Изначально BERT реализован для английского языка в двух вариантах размера: BERTBASE (110 млн параметров) и BERTLARGE (340 млн параметров). Обе модели обучались на BookCorpus[6] (800 млн слов) и Английской Википедии (2,5 млрд слов)[1]. Веса моделей были опубликованы на GitHub[7]. 11 марта 2020 года были выпущены ещё 24 уменьшенные модели BERT, самая компактная из которых — BERTTINY — имеет лишь 4 млн параметров[7].

Что важно знать
BERT
Тип большая языковая модель, трансформер, фундаментальная модель
Автор Google AI
Разработчик Google Research[d]
Первый выпуск 31 октября 2018
Последняя версия (11 марта 2020)
Репозиторий github.com/google-resear…
Лицензия Apache 2.0
Сайт arxiv.org/abs/181… (англ.)

Архитектура

BERT представляет собой архитектуру на базе трансформера (только энкодер). На высоком уровне она состоит из четырёх модулей:

  • Токенизатор — преобразует текст на английском языке в последовательность целых чисел (токенов).
  • Эмбеддинг — преобразует последовательность токенов в массив числовых векторов для каждого токена. Это перевод дискретных типов токенов в более низкоразмерное евклидово пространство.
  • Энкодер — стек блоков трансформера с механизмом самовнимания без причинной маскировки.
  • Головка задачи — преобразует конечные векторные представления обратно в токены (one-hot-код), предсказывая вероятностное распределение по токенам. Работа похожа на декодер или слой «разэмбеддинга».

Головка задачи необходима для предобучения, но для конечных (downstream) задач (например, вопросно-ответные системы или анализ тональности) её часто заменяют на новую, инициализированную под нужную задачу, и далее дообучают. Такая передача латентного представления обеспечивает эффективный перенос обучения[1].

Эмбеддинг

В качестве токенизатора BERT использует алгоритм WordPiece (подсловная сегментация, аналог BPE), размер словаря — 30 000, незнакомые слова заменяются на [UNK] (“unknown”).

Входной слой эмбеддинга состоит из трёх компонентов: эмбеддинг типа токена, позиции и типа сегмента.

  • Эмбеддинг типа токена: стандартная эмбеддинг-матрица, преобразующая one-hot-вектор токена в плотный вектор.
  • Эмбеддинг позиции: задаёт положение токена в последовательности (абсолютное кодирование), каждая позиция сопоставляется вектору, каждая компонента которого — это синусоидальная функция от позиции.
  • Эмбеддинг типа сегмента: используя двоичный словарь (0 или 1), различает, к какой из двух частей текста (до или после [SEP]) принадлежит токен.

Векторы трёх эмбеддингов складываются — так формируется исходное представление токена, в зависимости от этих признаков. После слоя эмбеддинга используется нормализация (LayerNorm), выдающая 768-мерный вектор на токен. Далее представления пропускаются через 12 блоков энкодера трансформера и преобразуются в 30 000-мерное выходное пространство токенов.

Семейство архитектур

Стек энкодеров BERT определяется двумя ключевыми параметрами: (число слоёв) и (“скрытый размер”, то есть размерность скрытого слоя). Число голов самовнимания составляет , а размер промежуточного слоя (feed-forward/filter size) — . Меняя и , получают семейство моделей BERT.

  • feed-forward size и filter size — синонимы, обозначая размер промежуточного слоя feed-forward-сети;
  • hidden size и embedding size — синонимы, определяют размерность векторного представления токена.

Обозначение параметров стека записывается как L/H. Например: BERTBASE — 12L/768H, BERTLARGE — 24L/1024H, BERTTINY — 2L/128H.

Обучение

Предобучение

BERT предобучается одновременно по двум задачам[8]:

  • Маскированное языковое моделирование (MLM): часть слов в предложении случайно заменяется на специальный токен [MASK], задача модели — предсказать исходное слово по контексту. Такой подход позволяет учитывать контекст с двух сторон.
  • Предсказание следующего предложения (NSP): модель обучается определять, идёт ли второе предложение непосредственно за первым, что важно для задач вроде поискового ответа или классификации документов.

Маскированное языковое моделирование

В задаче MLM около 15 % токенов случайно выбираются для предсказания:

  • с вероятностью 80 % заменяются на [MASK],
  • с вероятностью 10 % — на случайное слово,
  • с вероятностью 10 % оставляются без изменений.

Это сделано для предотвращения «сдвига распределения» между обучающей и тестовой выборками: в реальных предложениях [MASK] не встречается, и слишком сильная зависимость от этого токена ухудшает обобщающую способность.

Например, для предложения «my dog is cute» случайным образом выбирается четвертый токен (cute):

  • с вероятностью 80 % он заменяется на [MASK] («my dog is [MASK]»);
  • с вероятностью 10 % — на случайное слово («my dog is happy»);
  • с вероятностью 10 % — не изменяется.

Выходной вектор на позиции замаскированного токена подаётся в декодер, который выдает распределение по словарю (30 000 позиций).

Предсказание следующего предложения

Модели подаются две строки, и требуется определить, следуют ли они друг за другом в исходном корпусе. Начало предложения помечается токеном [CLS], граница — [SEP]. После обработки предложение представляется как вектор, который подается на линейный классификатор для решения задачи «[IsNext]»/«[NotNext]». Например:

  • [CLS] my dog is cute [SEP] he likes playing [SEP][IsNext].
  • [CLS] my dog is cute [SEP] how do magnets work [SEP][NotNext].

Дообучение (fine-tuning)

BERT задуман как универсальная предобученная модель для прикладных задач NLP. После предобучения BERT легко дообучается на меньших датасетах и для конкретных задач (например, логический вывод из текста, классификация документов или генерация ответов на вопросы).

В оригинальной статье показано, что даже короткое дообучение (для BERTLARGE — 1 час на 1 Cloud TPU) обеспечивает лучшие результаты по ряду тестовых наборов, в том числе:

  • GLUE (General Language Understanding Evaluation) — набор из 9 разнообразных NLP-задач;
  • SQuAD (Stanford Question Answering Dataset[9]) версий 1.1 и 2.0;
  • SWAG (Situations With Adversarial Generations[10]).

При использовании BERT для задач классификации после слоя [CLS] добавляется линейный слой с softmax, который, аналогично глобальному пуллингу в компьютерном зрении, выделяет только один вектор из выхода модели[1]. В исходной реализации этот линейный слой назывался «pooler layer», хотя фактически использует только представление для [CLS][11].

Стоимость обучения

BERT обучался на основном корпусе из BookCorpus (800 миллионов слов) и отфильтрованной версии английской Википедии (2,5 миллиарда слов) без списков, таблиц и заголовков.

Обучение BERTBASE на 4 облачных TPU (16 чипов TPU) заняло 4 дня и стоило примерно 500 долларов США[7]; обучение BERTLARGE на 16 TPU (64 чипа) также заняло 4 дня[1].

Интерпретация

Появление моделей вроде ELMo, GPT-2 и BERT дало начало области («BERTология»), изучающей интерпретацию внутренних представлений языковых моделей. Их поведение на задачах понимания текста до конца не раскрыто[3][12][13]. В 2018–2019 годах появилось множество работ, анализирующих связи между выходом модели и входными последовательностями[14][15], а также внутренние векторные представления с помощью «пробных» (“probing”) классификаторов[16][17], и внимание (“attention”) между токенами[12][13].

Высокое качество BERT во многом объясняется двунаправленным обучением[18]. Благодаря этому модель может учитывать контекст как слева, так и справа от каждого слова (например, слово «fine» в разных предложениях может соответствовать «чувствовать себя хорошо» или «тонкие светлые волосы»).

Однако у такой архитектуры есть ограничения: из-за отсутствия декодера BERT нельзя использовать как генератор текста или для prompt-настройки. Попытки продолжить текст с помощью маскировки каждого нового токена приводят к «сдвигу распределения» (в обучении таких случаев не было), что негативно сказывается на производительности. Существуют техники генерации текста для BERT, но они очень ресурсоёмки[19].

История

BERT был разработан исследователями Google: Джейкобом Девлином, Мин-Вэй Чаном, Кентоном Ли и Кристиной Тута́новой. Концепция модели развилась из ряда работ по контекстному предобучению: semi-supervised sequence learning[20], генеративному предобучению, ELMo[21] и ULMFit[22]. В отличие от предыдущих моделей, BERT предложил полностью двунаправленное, основанное только на входных данных (unsupervised), обучение без разметки, использующее корпус обычных текстов. В то время как подходы вроде word2vec или GloVe создают одинаковое представление для всех вхождений слова в словарь, BERT строит контекстуализированные представления — в зависимости от предложения[4].

25 октября 2019 года Google объявил о внедрении BERT для обработки англоязычных поисковых запросов в Google Search в США[23]. К декабрю 2019 года модель использовалась в поиске Google более чем в 70 языках[24][25]. В октябре 2020 года почти все англоязычные запросы Google обрабатывались через BERT[26].

Варианты

Модели BERT оказали значительное влияние и вдохновили создание множества производных вариантов:

RoBERTa (2019)[27] — усовершенствованная версия BERT с изменёнными гиперпараметрами, обучением на больших мини-батчах, удалением задачи предсказания следующего предложения и более массивным датасетом.

XLM-RoBERTa (2019)[28] — многоязычная версия RoBERTa, одна из первых моделей для масштабного кросслингвального представления текста.

DistilBERT (2019) — сжатая версия BERTBASE с 60 % числа параметров (66 млн), сохраняющая 95 % качества по тестам[29]. TinyBERT (2019) — ещё более компактная дистилляционная версия (28 % параметров от оригинала).

ALBERT (2019) — использует совместное использование параметров между слоями и экспериментирует с разделением размеров скрытого слоя и эмбеддинга. Вместо задачи распознавания следующего предложения применяется задача определения порядка (“sentence-order prediction”).

ELECTRA (2020) — внедряет элементы GAN: небольшая языковая модель генерирует замену токенов, а более крупная идентифицирует подмены.

DeBERTa (2020) — архитектурно иной вариант с «разделённым вниманием», в котором позиционное и токенное кодирование проходят отдельно. Вместо объединения позиций и токена в один вектор () используются два разных канала: (), и на каждом уровне вычисляются отдельные матрицы внимания: контент-контент, контент-позиция, позиция-контент. Итоги суммируются и проходят softmax, а абсолютное позиционное кодирование подключается только на последнем слое внимания.

Примечания

Ссылки