Рисунок 8. Пример работы Multiheaded-attention
На изображении показано, на какие слова обратили внимание два параллельных механизма относительно слова «it» в предложении «The animal didn't cross the street because it was too tired». Как видно, первый механизм (оранжевый цвет) связал слово “It” со словами “The animal”, а второй - со словом “tired”. Очевидно, обе связи существуют и это поможет нам при кодировании слова “it”.
Полностью модель Transformer в деталях представлена ниже:
Рисунок 9 Архитектура The Transformer в деталях
Помимо прочего, в кодировщике используется Layer Normalization. Как видно, выходы из каждого кодировщика передаются в следующий кодировщик, а выходы последнего кодировщика передаются в каждый декодировщик. Этот приём будет рассмотрен ниже при детальном рассмотрении декодировщика.
2.1.2 Декодировщик (Decoder)
Архитектура декодировщика очень похожа на кодировщик, однако есть один отличительный момент - блок Encoder-Decoder Attention. На самом деле, он выполняет действия, подобные Self-attention блоку, однако принимает на вход матрицы K и V от последнего кодировщика, а матрицу Q составляет сам на основе выхода предыдущего слоя.
Также есть особенность в работе Self-attention блока - в случае декодировщика он имеет доступ только к уже предсказанным словам, поэтому входной вектор X состоит из уже предсказанных трансформером слов, а на остальных позициях проставляется -inf.
Аналогично блокам кодировщиков, декодировщик передаёт свой выход следующему декодировщику, а также принимает матрицы K и V от последнего кодировщика для слоя Encoder-Decoder Attention. Выход последнего декодировщика передаётся в FC слой, где количество нейронов равно размеру словаря, на котором шло обучение (т.е. все уникальные слова из выборки), а после этого слоя - в softmax слой, который и выдаёт для каждого слова в словаре вероятность того, что это слово является следующим в предложении.
Способ обучения модели Transformer в рамках данной работы рассмотрен не будет, поскольку в чистом виде данная архитектура не используется в работе.
2.2 OpenAI GPT
В июне 2018 г. была предложена модель, основанная на блоке декодеров из архитектуры Transformer [9]. Её основная идея заключается в том, чтобы предобучить модель на большом количестве данных, а после этого методом тонкой настройки параметров решать какие-либо конкретные задачи NLP. Изначально авторы использовали этот подход, продолжая идею своей же предыдущей работы [10]. Данная модель на момент публикации получила SOTA результаты на большом количестве задач NLP.
Модель обладает следующими характеристиками:
· 12 декодировшиков
· 12 attention-head
· ~110M параметров
Модель обучается, решая задачу предсказания следующего слова. На вход она получает начало предложения, а на выход должна выдать одно слово, которое является продолжением этого предложения.
2.2.1 Применение OpenAI GPT для задач NLP
Главная идея данной модели - переиспользование её в специфичных задачах, донастроив параметры. Авторы статьи предлагают следующие варианты использования:
Рисунок 10. Применение OpenAI GPT для различных задач NLP
Таким образом, с помощью модели можно решать следующие задачи: классификация, следствие, выявление схожести текстов, выбор из многих вариантов.
Через сравнительно небольшой промежуток времени после выхода работы о данной модели, на основе архитектуры Transformer была предложена ещё одна модель - BERT. Поскольку BERT превзошла результаты OpenAI GPT, исследования по GPT практически перестали появляться и развитие модели остановилось. Ввиду этого, в рамках данной работы применение OpenAI GPT рассматриваться не будет.
Сравнение результатов двух моделей будет приведено в следующем разделе.
2.3 Bidirectional Encoder Representations from Transformers (BERT)
В конце 2018 г. на основе модели The Transformer была предложена ещё одна архитектура, которая получила название BERT (Bidirectional Encoder Representations from Transformers) [11]. Эта модель может использоваться практически для любых задач обработки естественного языка - начиная от семантического анализа, заканчивая задачами QA. Авторам предложенной модели удалось получить SOTA результаты на большом количестве NLP-задач, улучшив предыдущие результаты, полученные с помощью OpenAI GPT.
Данная архитектура использует только одну часть своей предшественницы - блоки кодировщиков.
Рисунок 11. Модели BERT Base и BERT Large
Было предложено две одинаковых модели, отличающихся только по размеру:
BERT Base:
· 12 кодировщиков
· 512 размер скрытого слоя
· 12 attention heads
· 110M общее количество параметров
BERT Large:
· 24 кодировщика
· 1024 размер скрытого слоя
· 16 attention heads
· 340M общее количество параметров
2.3.1 Входные данные
Входные данные для данной модели выглядят следующим образом
Рисунок 12. Входные данные для модели BERT
В зависимости от задачи, входной вектор может отражать как одно предложение (текст), так и пару, например, если нужно отразить конструкцию Вопрос-Ответ. Каждый входной вектор всегда начинается с токена CLS, выход от которого используется в задаче классификации (в случае других задач, этот токен игнорируется).
Как видно, вход составляется из трёх частей:
1. Token embedding - в случае BERT используется WordPiece embedding [12].
2. Segment Embedding - эмбеддинг, отражающий позицию каждого слова во входном векторе - принадлежит ли оно к первому или второму предложению. Предложения разделяются между собой токеном SEP.
3. Position Embedding - имеет то же значение, что и в оригинальной модели
2.3.2 Обучение BERT
Задача обучения BERT заключается в том, чтобы научить модель лучше понимать текст в целом и запоминать контекст предложения. Чтобы достичь этого, модель обучается одновременно нескольким задачам.
Во входном векторе случайным образом выбирается 15% слов. Для каждого из этих слов:
· В 80% случаев слово заменяется на специальный токен [MASK]
· В 10% случаев слово заменяется на любое случайное слово.
· В 10% случаев слово остаётся без изменений
После этого, модель просят предсказать слово, которое должно стоять вместо токена MASK. Таким образом BERT обучается запоминать контекст слов и связывать слова в предложении между собой. Данный этап обучения необходим для того, чтобы модель училась в каждое из слов в предложении «подмешивать» контекст других слов. Это позволяет модели на дальнейшем этапе fine-tuning (тонкой настройки) показывать более хорошие результаты
Для этого второй задачей при обучении модели ставят задачу предсказания того, является ли текущее предложение продолжением следующего или нет:
· Для каждого предложения с 50% вероятностью выбирается либо настоящее следующее предложение, либо случайное предложение из всей тренировочной выборки
· Модели дополнительно передаётся флаг, имеющий значение IsNext либо NotNext
С учётом всего вышесказанного, вход для модели выглядит следующим образом (предложения разделены токеном SEP):
Input = [CLS] the man went to [MASK] store [SEP] he bought a gallon [MASK] milk [SEP], IsNext
Input = [CLS] the man [MASK] to the store [SEP] penguin [MASK] are flight ##less birds [SEP], NotNext
Применение BERT для задач NLP
Как было отмечено ранее, преимущество TL заключается в том, что путём тонкой настройки параметров можно эффективно применять предобученные модели к специфичным задачам. Ниже показано, как можно применить BERT к четырём разным задачам:
1. Sentence Pair Classification Tasks - отнести к какой-либо категории пару из текстов (например, определить, являются ли два вопроса семантически идентичными)
2. Single Sentence Classification Task - отнести текст к какому-либо классу
3. Question Answering Task - имея вопрос, дать на него ответ
4. Single Sentence Tagging Task - пометить каждое слово во входном предложении тэгом (например, организация, человек, местоположение и т.д.)
Рисунок 13. Использование BERT для различных задач NLP
Результаты BERT и OpenAI GPT:
Таблица с результатами взята из исходной работы, где была предложена модель BERT.
2.4 Модели, основанные на OpenAI GPT
2.4.1 OpenAI GPT 2
Компания OpenAI усовершенствовала свою модель OpenAI Transformer и в феврале 2019 года выпустила следующую версию - GPT 2 [13]. На момент написания данной работы, это самая большая существующая нейронная сеть, которая обладает следующими характеристиками:
· Увеличенная версия OpenAI GPT
· 1.5 миллиарда параметров
· Предобучена на 40 ГБ текстовых данных
· Обучение модели заняло несколько дней на TPU [14] и стоило порядка 50 тысяч долларов
Так как предыдущая модель была достаточно ограничена с точки зрения стиля речи, поскольку обучалась преимущественно на страницах Wikipedia и книгах, было предпринято следующее: данные собирались с различных источников в Интернете, в частности, с сайтов, ссылки на которые имеют положительный рейтинг на различных форумах и развлекательных ресурсах.
Основная задача данной модели - генерировать текст по входному вектору. Однако, правильно составив входной вектор, модель можно использовать для решения различных задач NLP. Например, составив вектор
,
можно получить ответ на заданный вопрос, поскольку данную структуру текста модель освоила при обучении.
Для перевода с языка на язык можно использовать следующий входной вектор:
В оригинальной работе создатели OpenAI GPT 2 утверждают, что модель генерирует настолько правдоподобный текст, что его сложно отличить от написанного человеком. Именно поэтому авторы выложили в общий доступ только небольшую модель (в несколько раз меньше основной), поскольку опасаются, что модель будет использоваться в корыстных целях.
MuseNet
В конце апреля 2019 г. на основе модели OpenAI GPT 2 была представлена ещё одна нейронная сеть - MuseNet [15]. Эта сеть пока что не представляет практического интереса - она способна по отрывку мелодии генерировать продолжение в стиле какого-либо музыканта (список заранее подготовлен и модель обучена на мелодиях этих исполнителей).
Для того, чтобы продемонстрировать результат генерации, исследователи из OpenAI добавили специальную форму, в которой можно настроить параметры и сеть сгенерирует несколько отрывков на их основе:
Рисунок 14 Форма для экспериментов с MuseNet
2.5 ELMo
В марте 2018 г. Matthew E. Peters и другие представили работу Deep Contextualized Word Representations, в которой описали новый способ представления текста в виде векторов чисел, который назвали ELMo (Embeddings from Language Models) [16]. Данная работа вышла немного ранее моделей, основанных на архитектуре Transformer, и в момент выхода показала SOTA результаты во многих задачах обработки естественного языка.
Особенность ELMo, подобно BERT и OpenAI GPT, заключается в том, что данный эмбеддинг не просто переводит каждое слово в числовой вектор, а дополнительно вкладывает в слово контекст, в котором оно было употреблено. Происходит это благодаря двунаправленной LSTM нейронной сети [17], которая имеет свойство запоминать контекст. Архитектура модели ELMo будет рассмотрена ниже.
В первую очередь, каждое слово входного вектора переводится в Character embedding [18]. Это позволяет учесть морфологические особенности каждого слова, а также составить корректное представление даже для слов, отсутствующих в словаре. После этого данные передаются в свёрточный слой с несколькими фильтрами, которые позволяют извлечь различные аспекты слов. Последний элемент, через который проходят данные - Highway Network [19], которая позволяет более плавно передавать информацию со входа.
Рисунок 15. Предобработка входа в ELMo
После предобработки данные передаются в двухслойную двунаправленную LSTM-сеть с дополнительными Residual-соединениями [20]. Схема LSTM-блока приведена ниже:
Рисунок 16. Схема работы ELMo
Основная идея ELMo в том, что для каждого слова входного вектора конечный эмбеддинг строится путём объединения результатов, полученных после прохождения блока, описанного выше, а также значений обоих скрытых слоёв на соответствующей позиции. В виде формулы это можно описать следующим образом: