На прошлом занятии мы рассмотрели архитектуру Трансформер, которая на сегодняшний день является стандартом моделей обработки естественного языка.
В то же время заметим, что классический трансформер, представленный авторами статьи Attention is all you need в 2017 году, изначально разрабатывался для решения задачи машинного перевода. Авторы вдохновлялись базовой идеей машинного перевода с использованием рекуррентных нейронных сетей (архитектура Seq2Seq с кодировщиком и декодировщиком).
После оглушительного успеха статьи о трансформерах исследователи начали задаваться вопросами:
Оказалось, что механизм внимания сам по себе позволяет получать качественные репрезентации текстовых данных и с использованием отдельных элементов трансформеров можно строить новые архитектуры моделей.
BERT - это модель от компании Google, которая была представлена в конце 2018 года. Это так называемая encoder-only модель (по сути - это набор последовательно соединенных кодировщиков, выполненных в соответствие с классической архитектурой Трансформер).
Особенность модели заключается в том, что ее авторы предложили комбинировать два подхода к обучению: наполовину без учителя и с учителем.
Мы можем обучать BERT наполовину без учителя, решая задачу предсказывания замаскированного слова (при этом требуется только предоставить модели доступ к огромному набору текстов и заставить рандомно маскировать какую-то часть каждого текста и предсказывать пропущенные слова).
А можем обучать BERT решать конкретную задачу на размеченном наборе данных (например, задачу классификации).
Модель BERT (как и большое количество моделей, которые основаны на ее архитектуре) в настоящее время являются стандартным инструментом решения задач классификации и регрессии на текстовых данных (предсказание рейтинга фильма, классификация комментариев на YouTube, выделение спама в электронной почте и т. д.)
В виду того, что BERT является набором кодировщиков, выходом модели является множество векторов (то есть по сути это прокаченный Word2Vec, только выполненный с использованием фишек трансформеров, таких как внимание и позиционное кодирование).
В самом простом варианте полученные вектора можно усреднить и с помощью дополнительного слоя получить полноценный классификатор.
Таким образом BERT можно рассматривать как аналог VGG в компьютерном зрении - backbone модель, которую можно использовать (предварительно обученную) для извлечения признаков и решения задач на новых данных.
Оригинальная модель BERT была представлена в двух вариантах:
Основная идея - использование специального токена .
Мы можем использовать эмбеддинг токена для характеристики всего текстового документа.
Этот вектор мы можем подавать на вход других моделей (как вариант, добавить пару линейных слоев + softmax). Получаем прямую аналогию с VGG в компьютерном зрении.
Мы можем использовать выходы BERT в качестве векторных представлений текстовых токенов, однако нужно как-то обучить модель.
Идея: мы можем маскировать рандомную часть токенов во входной последовательности и предсказывать пропущенные токены.
В этом случае нам не нужна разметка данных.
Обратите внимание: здесь все еще выполняется основной принцип Word2Vec - векторное представление слова определяется его контекстом.
Исследователи заметили, что не обязательно использовать только выходы модели - можно задействовать промежуточные эмбеддинги.
Исследование, результаты которого приведены на рисунке выше, проводились в ходе решения задачи распознавания именованных сущностей. Мы более подробно еще поговорим про эту задачу.
Давайте сделаем вывод: модель BERT может использоваться для решения самых разных задач, не только Seq2Seq.
В качестве примеров приведем:
Пусть у нас есть большая обученная для решения некоторой задачи модель BERT. Но она слишком большая, мы хотим получить модель с меньшим количеством параметров, но чтобы качество оставалось достойным.
Дистилляция - это процесс получения моделей с меньшим количеством параметров в ходе инференса больших предварительно обученных моделей.
Как правило, у нас есть BERT для решения некоторой задачи (например, классификация). Для обучения “student” модели мы составляем функцию потерь следующим образом:
Очень важный вывод, который мы с вами должны сделать: в современном NLP люди поняли, что все необходимые знания уже есть в текстах. Никакой особенной разметки не нужно - модели просто должны научиться находить эти знания.
В настоящее время под GPT понимается семейство decoder-only моделей, реализующих концепцию Open AI Transformer
GPT - это языковое моделирование в чистом виде (предсказывание следующего слова на основе некоторой последовательности).
Основные задачи, решаемые с использованием GPT:
Рассмотрим модель на примере GPT 2
Все модели GPT 2 могут обрабатывать до 1024 токенов (считая промпт).
Основная идея GPT: мы подаем в декодер промпт (запрос) и ожидаем, что модель начнет сгенерирует первое слово ответа. Далее мы продолжаем генерацию, пока не будет достигнут предел по максимальному количеству токенов.
Обратите внимание, что даже в больших генеративных моделях есть ограничение на количество токенов. Инференс GPT производится аналогично классическому трансформеру.
При обучении GPT для конкретной пары <промпт, генерация> мы подаем на вход декодера промпт и начинаем выполнять генерацию токенов пока не достигнем ограничения либо пока не будет сгенерирован токен .
Функцией потерь является категориальная перекрестная энтропия.
Самое приятное - для обучения генеративных моделей почти не требуется разметка данных.
Обычно такие модели обучают на огромных открытых корпусах текста. Причем, вокабуляры могут включать в себя токены на нескольких языках. Таким образом, с использованием GPT можно реализовать машинный перевод.
Архитектура классического трансформера на самом деле не идеальна - она изначально разрабатывалась для решения конкретной задачи машинного перевода. Использование кодировщиков и декодировщиков в одной модели во многих случаях избыточно.
При этом использование кодировщиков и декодировщиков по отдельности позволяет получать модели для решения самых разных задач NLP.
Наиболее популярными encoder-only и decoder-only моделями в настоящее время являются BERT и GPT соответственно. Слои кодировщика и декодировщика работают аналогично классическому трансформеру.
Хитрости со структурой данных, подаваемых на вход кодировщику/декодировщику, а также эксперименты с оригинальной архитектурой позволяют выполнять transfer learning моделей.