newsmode
search
Меню
arrow_back Назад

NLP for Supervised Learning - A Brief Survey

auto_awesomeКраткое саммари

Юджин Ян кратко прослеживает эволюцию NLP для обучения с учителем с 1985 по 2020 год. Он начинает с последовательных моделей — RNN (1985), LSTM (1997) и GRU (2014), — а затем переходит к словным эмбеддингам: Word2vec (2013), GloVe (2014) и FastText (2016), обучаемым без учителя на неразмеченных данных. Далее идут контекстные эмбеддинги ELMo (2018), механизм внимания в Transformer (2017), убравший необходимость в рекуррентности, и подходы с предобучением — ULMFiT и GPT (2017). Кульминацией становится BERT (2018), объединивший Transformer, двунаправленный контекст и предобучение с дообучением и достигший SOTA на 11 задачах. Завершают обзор улучшения BERT (DistilBERT, ALBERT, RoBERTa, XLNet, Big Bird) и модель T5 (2019), сводящая все текстовые задачи к формату text-to-text и обучавшаяся на корпусе C4 объёмом около 750 ГБ.

NLP для обучения с учителем — краткий обзор

[ llm deeplearning survey ] · 23 мин чтения

За стремительным прогрессом обработки естественного языка (NLP) трудно угнаться. Чтобы лучше упорядочить свои мысли, я выделил время на то, чтобы перечитать заметки, сравнить разные статьи и расположить их в хронологическом порядке. Это помогло мне понять, как NLP (и её строительные блоки) развивались со временем.

Чтобы закрепить изученное, я пишу этот обзор в общих чертах, включая краткие объяснения того, как работают модели, и некоторые детали (например, корпуса, ablation-исследования). Здесь мы увидим, как NLP развивалась с 1985 года по сегодняшний день:

Последовательные модели: RNN (1985), LSTM (1997), GRU (2014) Словные эмбеддинги: Word2vec (2013), GloVe (2014), FastText (2016) Словные эмбеддинги с контекстом: ELMo (2018) Внимание: Transformer (2017) Предобучение: ULMFiT (2017), GPT (2017) Объединение всего вышеперечисленного: BERT (2018) Улучшение BERT: DistilBERT, ALBERT, RoBERTa, XLNet (2019); Big Bird, многоязычные эмбеддинги (2020) Всё есть text-to-text: T5 (2019)

(Я что-то важное упустил или чрезмерно упростил? Есть ошибки? Пожалуйста, напишите мне с предложениями, и я обновлю статью. Спасибо!)

Последовательные модели для обработки предложений (1985)

Рекуррентные нейронные сети (RNN) были впервые предложены около 1985–1986 годов (согласно этой ветке обсуждения). От обычных нейронных сетей прямого распространения они отличаются тем, что их скрытые слои имеют связи с самими собой. Это позволяет им работать с последовательностями (например, предложениями из словных токенов).

Состояние скрытого слоя на одном временном шаге используется как вход для (того же) скрытого слоя на следующем временном шаге; отсюда и название «рекуррентные». Это позволяет скрытым слоям выучивать информацию о временных связях между токенами в последовательности. За подробностями обращайтесь к отличному посту Андрея Карпатого.

RNN (слева) и её развёрнутое представление (справа) (источник)

Однако RNN испытывали трудности с моделированием дальних зависимостей (например, слов, далеко отстоящих друг от друга в длинном предложении) из-за затухающих/взрывающихся градиентов. На длинных последовательностях произведение частных производных (при обратном распространении) становится очень малым (то есть затухает). Это происходит, когда частные производные < 1. Обратное происходит, когда частные производные > 1 и произведение взрывается.

Архитектура Long Short-Term Memory (LSTM), представленная в 1997 году, улучшает это. LSTM лучше моделируют дальние зависимости благодаря гейтам:

Гейт забывания (forget gate): решает, какую информацию из текущего входа и предыдущего скрытого состояния забыть (то есть отбросить) с помощью сигмоиды. Входной гейт (input gate): решает, какую информацию запомнить (то есть сохранить) с помощью сигмоиды. Выходной гейт (output gate): решает, каким должно быть следующее скрытое состояние.

Вместе эти гейты улучшают то, как LSTM обучается — что следует забыть, а что запомнить? Больше подробностей в объяснении Криса Олы. Хотя LSTM была представлена в 1997 году, лишь в 2015-м она нашла коммерческое применение: Google Voice, QuickType и Siri от Apple, Alexa от Amazon и автоматические переводы Facebook.

Сравнение LSTM и GRU (источник)

Gated Recurrent Units (GRU) упростили LSTM в 2014 году. У них всего два гейта: гейт обновления (update gate, аналог forget- и input-гейтов LSTM) и гейт сброса (reset gate, который также решает, сколько забыть). Поскольку гейтов меньше (а значит, и меньше математических операций), обучение идёт быстрее. (В своей работе я обнаружил, что GRU сходятся быстрее и с большей стабильностью.)

Словные эмбеддинги для обучения на неразмеченных данных (2013)

В 2013 году был представлен Word2vec (w2v). С помощью обучения без учителя он представляет слова в виде чисел, а точнее — векторов чисел. (Раньше это делалось через one-hot-кодирование.) Будучи методом без учителя, он способен обучаться на больших корпусах неразмеченных данных (например, Wikipedia). При использовании в разнообразных нижестоящих задачах (например, классификации) эти словные эмбеддинги существенно улучшают качество модели.

Есть два способа обучать модели w2v: Continuous Bag of Words (CBOW) и Skip-gram. В CBOW мы предсказываем центральное целевое слово по окружающим его контекстным словам. В Skip-gram мы предсказываем окружающие контекстные слова по центральному слову (так же, как в CBOW, но наоборот). Было обнаружено, что Skip-gram лучше работает на меньших объёмах данных и лучше представляет редкие слова. CBOW обучается быстрее и лучше представляет более частотные слова. (Я обычно находил, что Skip-gram работает лучше.)

Continuous Bag of Words против Skip-gram (источник)

Мне показалась полезной такая интуиция для понимания этого. Начнём с примера предложения: «Today is a ___ day for writing» («Сегодня ___ день для письма»). Самые частые центральные слова — «beautiful» (прекрасный), «productive» (продуктивный), «great» (отличный), тогда как к редким относится «hellacious» (адский).

В CBOW редкие слова (то есть «hellacious») заглушаются более частотными словами. Поэтому CBOW не так хорошо выучивает представления этих редких слов.

Однако в Skip-gram этим редким словам не приходится «конкурировать» с более частыми словами (по вероятности появления). Вместо этого у них есть собственные контекстные пары, такие как («is», «hellacious»), («a», «hellacious»), («hellacious», «day») и («hellacious», «for»). Эти контекстные пары рассматриваются как отдельные наблюдения и тем самым помогают Skip-gram лучше выучивать эти редкие слова.

Word2vec применял сабсэмплинг (subsampling), при котором относительно частотные слова отбрасывались с определённой вероятностью. Это ускоряло обучение и улучшало словные эмбеддинги для редких слов.

Он также слегка изменил саму постановку задачи. Вместо предсказания наиболее вероятных соседних слов (из всех возможных слов) он пытается предсказать, были ли словные пары (из skip-gram) настоящими парами. Это меняет финальный слой с softmax по всем словам (дорого) на сигмоиду, выполняющую бинарную классификацию (намного дешевле).

Однако наш набор данных и словные пары содержат только положительные примеры. Поэтому выполняется негативное сэмплирование (negative sampling) для генерации отрицательных примеров на основе распределения униграмм. (В статье применили интересный трюк и возвели счётчики слов в степень 3/4.)

Global Vectors for Word Representation (GloVe) был представлен годом позже (2014). Если w2v выучивает совместную встречаемость слов через скользящее окно (то есть локальную статистику), то GloVe выучивает её через матрицу совместной встречаемости (то есть глобальную статистику). Затем GloVe обучает словные векторы так, чтобы их разности предсказывали отношения совместной встречаемости. Удивительно, но, несмотря на разные отправные точки w2v и GloVe, их словные представления оказываются схожими.

Существуют также варианты w2v, которые выучивают эмбеддинги подслов или символов. Эмбеддинги подслов выучивают наиболее частые символьные сегменты (то есть разбивают слово на сегменты по 2–3 символа). Один из подходов — FastText (соавтором которого является автор оригинального Word2vec). FastText выложил в открытый доступ свой код, а также словные эмбеддинги для множества языков, обученные с его помощью.

До эмбеддингов мы в основном полагались на n-граммы и one-hot-векторы для представления текста. (С появлением эмбеддингов one-hot-подходы стали использоваться реже. Это происходит и за пределами NLP в машинном обучении, где категориальные значения всё чаще представляют эмбеддингами вместо one-hot.)

Поверх этих one-hot-векторов можно применить сингулярное разложение (SVD) для тематического моделирования. Для классификации (например, анализа тональности, обнаружения спама) можно также применять различные методы обучения с учителем (например, логистическую регрессию, наивный байесовский классификатор, деревья решений, нейронные сети).

Пример этого — соревнование Otto Product Classification на Kaggle. В этом соревновании набор данных имел 93 числовых признака, представлявших счётчики различных событий. Предполагается, что это счётчики токенов текста о товарах и других атрибутов. В лучших решениях использовались TF-IDF и ансамбли деревьев решений, метод K ближайших соседей, наивный байесовский классификатор и нейронные сети (подробнее здесь).

Для своего API классификации товаров я использовал комбинацию n-грамм, TF-IDF и наивного байесовского классификатора. Пол Грэм тоже использовал похожий подход для обнаружения спама.

Улучшение словных эмбеддингов с помощью контекста (2018)

В традиционных словных эмбеддингах (например, Word2vec, GloVe) у каждого токена есть лишь одно представление (то есть эмбеддинг). Это не зависит от того, как он используется в предложении. Например, «date»:

They went out on a «date» (Они сходили на свидание). What «date» is it today? (Какое сегодня число?) She is eating her favourite fruit, a «date» (Она ест свой любимый фрукт — финик). That photo looks «dated» (Эта фотография выглядит устаревшей).

Embeddings from Language Models (ELMo) улучшает это (в 2018 году), предоставляя представления слов на основе всего предложения. Делает он это с помощью двунаправленной языковой модели (biLM). biLM в ELMo состоит из двухслойной двунаправленной LSTM.

Двигаясь и слева направо (LTR), и справа налево (RTL), ELMo может узнать больше о контексте слова. Например, в «Today is a hellacious day for writing» LTR-модель закодирует «today is a», тогда как RTL-модель закодирует «writing for day». Вместе они учитывают всё предложение для слова «hellacious». Эти эмбеддинги выучиваются отдельными языковыми моделями и конкатенируются перед использованием в нижестоящих задачах. (Почему эти модели должны быть отдельными? См. Почему нельзя использовать двунаправленный контекст с несколькими слоями?)

Предобученный ELMo можно использовать в разнообразных задачах обучения с учителем. Сначала biLM обучается, а слои словных представлений замораживаются. Затем словное представление ELMo (то есть вектор) конкатенируется с вектором токена, чтобы усилить представление слова в нижестоящей задаче (например, классификации).

Эмбеддинги ELMo, конкатенированные с входными токенами (синие блоки), для нижестоящих задач (источник)

Внимание, чтобы устранить необходимость в рекуррентности (2017)

(С представлениями слов мы закончили; возвращаемся к архитектурам моделей.)

Рекуррентные модели (например, RNN, LSTM, GRU) имеют последовательную природу — каждое скрытое состояние требует на входе предыдущего скрытого состояния. Поэтому обучение нельзя распараллелить. Кроме того, они плохо выучивают дальние зависимости; хотя LSTM и GRU улучшили RNN, у них тоже были свои пределы.

Transformer (2017) решил обе проблемы с помощью внимания (attention). На высоком уровне внимание определяет, с какими весами следует учитывать другие токены (во входной последовательности) при кодировании текущего токена (то есть как другие слова в «Today is a hellacious day for writing» должны влиять на «hellacious»). Вместе с позиционными кодировками (positional encodings, подробнее ниже) мы можем обрабатывать всё предложение сразу (никакой рекуррентности!) и вычислять представление каждого слова на основе всей последовательности.

Transformer состоит из стеков энкодеров и декодеров. В каждом стеке энкодера есть шесть одинаковых подслоёв, каждый из которых имеет механизм self-attention, за которым следует полносвязная нейронная сеть прямого распространения. Стек декодера устроен похоже, но включает дополнительный слой внимания для обучения вниманию над выходом энкодера. (Похоже, Transformer задумывался для seq2seq-задач, таких как перевод.)

Используется многоголовое внимание (multi-headed attention, восемь голов), причём каждая голова инициализируется случайно. (Мне одному кажется, или это ансамблирование?) Выходы этих восьми голов конкатенируются и умножаются на дополнительную матрицу весов. В стеке декодера механизм внимания маскируется (чтобы не подглядывать в будущие токены).

Why didn't the chicken cross the road? (Почему курица не перешла дорогу?) Внимание от двух разных голов (источник)

Чтобы дать информацию об относительной и абсолютной позиции токенов в последовательности, в нижней части стеков энкодера и декодера использовались позиционные кодировки. Это помогает модели обучаться на позициях токенов, а также на расстоянии между каждым токеном.

(Обязательно ознакомьтесь с прекрасным разбором Джея Аламмара «The Illustrated Transformer».)

Дообучение выученных эмбеддингов (2017)

До сих пор мы в основном использовали словные эмбеддинги напрямую или конкатенировали их с входными токенами (то есть ELMo). Дообучения словных эмбеддингов под конкретные задачи не было. Это изменилось с появлением ULMFiT и OpenAI GPT (и переноса обучения).

ULMFiT (2017) использует AWD-LSTM (LSTM с dropout на различных гейтах) в качестве своей языковой модели и ввёл фазу дообучения как часть трёх шагов. Сначала, при предобучении языковой модели на общем домене, LM обучается на неразмеченных данных. ULMFiT обучался на Wikitext-103 (28,6 тыс. статей Wikipedia и 103 миллиона слов).

Затем, при дообучении под целевую задачу, LM дообучается на корпусе целевой задачи (размеченные данные пока не вводятся). Применяется дискриминативное дообучение (discriminative fine-tuning), при котором каждый слой дообучается с разной скоростью обучения — у последнего слоя наибольшая скорость обучения, а у каждого последующего слоя она снижается. ULMFiT также применял наклонные треугольные скорости обучения (slanted triangle learning rates), при которых скорость обучения быстро возрастает, а затем затухает медленнее.

Наконец, при дообучении классификатора под целевую задачу поверх LM добавляются два дополнительных линейных блока (softmax для последнего слоя, ReLU для промежуточного). Выполняется постепенная разморозка (gradual unfreezing), при которой мы начинаем с разморозки последнего слоя LM и его дообучения. Один за другим каждый последующий слой размораживается и настраивается.

GPT (2017; прародитель GPT-3) также применил предобучение без учителя. Он использует стек декодера Transformer. Это улучшение по сравнению с LSTM, так как Transformer лучше выучивает дальние зависимости и не является рекуррентным по своей природе.

GPT обучается в два шага. Сначала предобучение без учителя (похоже на первый шаг ULMFiT) включает обучение на корпусе для предсказания следующего слова. GPT использовал датасет BookCorpus из 7000 уникальных, неопубликованных книг. (Это отличается от ELMo, который использует перемешанные предложения, тем самым разрушая дальнюю структуру.)

Затем дообучение с учителем настраивает блок декодера под целевую задачу. Входы и метки конкретной задачи пропускаются через предобученный блок декодера для получения представления входа (то есть эмбеддинга). Это представление затем подаётся в дополнительный линейный выходной слой. На этом этапе включается вспомогательная цель. Вспомогательная цель предсказывает следующее слово в корпусе конкретной задачи (похоже на второй шаг ULMFiT) и, как было установлено, улучшает обобщение и ускоряет сходимость.

Входы преобразуются в единую последовательность в зависимости от задачи (источник)

Чтобы использовать GPT, для различных задач выполнялись преобразования входов под конкретную задачу:

Классификация текста: модель можно использовать напрямую. Текстовое следование (textual entailment): посылка и гипотеза конкатенируются с токеном $. Сходство (similarity): мы берём оба порядка предложений (то есть sentence1-sentence2, sentence2-sentence1) и конкатенируем их. Выход декодера складывается поэлементно и подаётся в линейный слой. Вопросы и ответы с выбором (multiple-choice Q&A): вопрос конкатенируется с каждым возможным ответом, и они пропускаются через линейный слой. Выходы нормализуются через softmax, чтобы получить распределение вероятностей.

(Ознакомьтесь со статьёй Modern NLP Transfer Learning In NLP для исчерпывающего обзора по этой теме.)

BERT: никакой рекуррентности, двунаправленность, предобучение (2018)

К концу 2018 года был представлен Bidirectional Encoder Representations from Transformers (BERT). Он получил SOTA-результаты на одиннадцати задачах NLP. Несколько элементов из предыдущих моделей сделали BERT прагматичной SOTA-моделью:

Transformer: BERT использует стек энкодера Transformer и отказывается от рекуррентности (распараллеливаемое обучение). ELMo: подобно ELMo, BERT имеет двунаправленный контекст. ULMFiT и GPT: BERT также применяет предобучение и дообучение; таким образом, LM (после предобучения) можно настроить под различные нижестоящие задачи. GPT: у BERT также единая архитектура и единое представление входа.

BERT использует в качестве своей языковой модели многослойный двунаправленный блок энкодера Transformer. В отличие от него, GPT использует однонаправленный блок декодера Transformer, тогда как ELMo использует две раздельные LSTM.

Вход для BERT представляется как одно предложение или пара предложений (например, вопрос и ответ). BERT использует WordPiece-эмбеддинги. Он также вводит специальный классификационный токен (CLS), который всегда является первым токеном в последовательности — финальное скрытое состояние этого токена используется для задач классификации. Пары предложений разделяются токеном SEP (аналогично GPT).

Предобучение выполняется через две задачи без учителя. Сначала маскированная языковая модель (LM) обучается через задачу cloze (заполнение пропусков). (Стандартную задачу предсказания следующего слова нельзя использовать с двунаправленным контекстом и несколькими слоями; подробнее ниже.) BERT маскирует 15% токенов случайным образом (токеном MASK). Однако это создаёт расхождение между предобучением и дообучением. Поэтому из замаскированных токенов 80% — это MASK, 10% заменяются случайным токеном, а 10% остаются без изменений. LM предсказывает исходный токен с функцией потерь cross-entropy.

Давайте разберём «Today is a hellacious day for writing» с помощью слоёв внимания.

В первом слое вектор для «hellacious» не включает само это слово. Однако во втором слое вектор слов вокруг «hellacious» будет включать вектор для «hellacious» благодаря вниманию (оранжевая стрелка). (В примере ниже я показываю это только для «day».) Таким образом, начиная с третьего слоя, вектор для «hellacious» сможет видеть само себя как часть взвешенного внимания во втором слое (красная стрелка).

Как токены могут видеть сами себя через внимание из нижних слоёв

Вторая задача предобучения включает предсказание следующего предложения (next sentence prediction, NSP). Если взять два последовательных предложения A и B, то в 50% случаев предложение B действительно следует за предложением A. В остальных 50% случаев предложение B — это случайное предложение.

Для обеих задач предобучения BERT использует BooksCorpus (который использовал и GPT) и английскую Wikipedia (2500 миллионов слов, только текстовые отрывки). Корпус на уровне документов был выбран специально, чтобы обучаться на длинных непрерывных предложениях.

Дообучение заключается в передаче входов и меток конкретной задачи для настройки параметров модели end-to-end. После этого BERT можно использовать различными способами:

Классификация отдельного предложения и пары предложений: использовать финальное скрытое состояние CLS. Тегирование отдельного предложения: использовать финальное скрытое состояние каждого токена. Q&A: предсказывать две вероятности на токен — является ли он началом или концом текста.

BERT практичен (читай: дешевле и быстрее в обучении из-за отсутствия рекуррентности) и высокопроизводителен. В результате он был применён в Google Search.

Больше примеров применения машинного обучения в реальном мире: applied-ml

Ablation-исследования пришли из экспериментальной нейропсихологии, где части мозга животных удалялись для изучения влияния на их поведение. В контексте машинного обучения этот термин используется для описания удаления определённых частей нейронных сетей, чтобы лучше понять поведение сети.

Ablation-исследования критически важны для исследований в области глубокого обучения — не могу не подчеркнуть это достаточно сильно. Понимание причинно-следственных связей в вашей системе — самый прямой способ получить надёжное знание (цель любого исследования). А ablation — это очень малозатратный способ заглянуть в причинность. — François Chollet (@fchollet) 29 июня 2018

Выводы из ablation-исследований по BERT:

Удаление предсказания следующего предложения значительно снизило качество. Без двунаправленного языкового моделирования (то есть только слева направо, как в GPT) качество значительно снижается. Более крупная модель часто приводит к улучшению точности, даже когда размеченных обучающих примеров всего 3600. Использование BERT для извлечения признаков (то есть просто использование словных эмбеддингов) тоже работает хорошо. Лучший подход — конкатенировать словные представления из четырёх верхних скрытых слоёв предобученного энкодера. Хотя маскированное языковое моделирование сходится медленнее, чем языковое моделирование слева направо, маскированное языковое моделирование в итоге достигает более высокой точности при том же количестве шагов.

Больше подробностей об ablation-исследованиях в статье о BERT.

Улучшение BERT (2019 и далее)

После BERT было сделано несколько улучшений, чтобы сделать его легче (DistilBERT, ALBERT) и дополнительно оптимизировать (RoBERTa). BERT также применялся для создания эмбеддингов предложений на 109 языках.

Одна из проблем BERT заключалась в том, что он не мог обучаться двунаправленно (именно поэтому BERT использовал задачу cloze для предобучения). XLNet (июнь 2019) решает это через перестановочное языковое моделирование (permutation LM); в отличие от него, BERT использовал маскированное языковое моделирование.

Перестановочное LM хитрое, но вот моя попытка его объяснить. Вот наше примерное предложение и индексы токенов: «Today(1) is(2) a(3) hellacious(4) day(5) for(6) writing(7)» с последовательностью 1234567.

Сначала перестановочное LM создаёт множество перестановок последовательности (например, 2347516). Затем оно выучивает представления каждого слова на основе только предшествующих токенов: токен 4 учится по токенам 2 и 3; токен 7 учится по токенам 2, 3, 4. Это гарантирует, что предсказываемое слово никогда не видно косвенно. (Примечание: эта перестановка используется только при вычислении внимания; порядок токенов в последовательности не меняется.)

У BERT также были сегменты фиксированного размера, и поэтому он не мог обрабатывать последовательности длиннее длины сегмента (обычно 512). XLNet использует наработки из Transformer-XL, чтобы обойти это — он передаёт состояние между сегментами фиксированного размера (то есть рекуррентность по сегментам), чтобы обрабатывать последовательности длиннее длины сегмента. Тем не менее с перестановочным LM и повторным введением рекуррентности XLNet намного более требователен к вычислениям при обучении.

Недавно Big Bird (28 июля 2020) увеличил длину сегмента до 8-кратной по сравнению с тем, что мог обрабатывать BERT. BERT ограничен квадратичной зависимостью от длины последовательности из-за полного внимания, при котором каждый токен должен учитывать каждый другой токен. Это приводит к ограничению по памяти. На стандартном оборудовании (16 ГБ ОЗУ) это соответствует входным последовательностям (и длине сегмента) в 512 токенов.

У Big Bird более разреженное внимание, что позволяет ему моделировать на 8-кратной длине последовательности по сравнению с BERT (источник)

Big Bird предложил обобщённый механизм внимания, который имеет линейную сложность (в отличие от квадратичной) по длине последовательности. У него три аспекта внимания:

Случайное внимание (random attention): учитывает r случайных токенов, что приводит к разреженному вниманию (r = 2). Внимание скользящего окна (sliding window attention): учитывает окно ширины w (w = 3). Это похоже на Longformer, который использует локализованную маску на основе скользящего окна, чтобы сократить вычисления и расширить BERT на более длинные последовательности. Глобальные токены (global tokens): глобальные токены — это подмножество из g токенов в последовательности (g = 2). Глобальные токены учитывают все токены в последовательности и наоборот. Сюда входят дополнительные токены, такие как CLS в стиле BERT. (Использования только случайного внимания и внимания скользящего окна было недостаточно, чтобы конкурировать с BERT.)

Всё есть text-to-text

К концу 2019 года Text-To-Text-Transfer-Transformer (T5) ввёл единый фреймворк, который преобразует все текстовые задачи в формат text-to-text. Таким образом, вход и выход — это текстовые строки, благодаря чему единственный T5 подходит для множества задач.

Перевод, Q&A, классификация — всё это text-to-text, с разными префиксами для указания задачи (источник)

T5 использует структуру на основе энкодера-декодера Transformer, которая, как обнаружили авторы, работает лучше всего для text-to-text. Тем не менее авторы внесли несколько изменений, таких как: удаление смещения в layer norm, размещение layer norm вне остаточного пути и использование иной схемы позиционных эмбеддингов.

Предобучение проводилось на Colossal Clean Crawled Corpus (C4) — высококачественном предобработанном корпусе английского языка. Его размер составляет примерно 750 ГБ, и это очищенная версия Common Crawl.

C-4, или Composition C-4, был разработан британцами во время Второй мировой войны… Шучу. (Хотя именно так была разработана взрывчатка, это не тот C4, о котором мы здесь говорим. Контекст важен.)

Сначала давайте начнём с Common Crawl. Common Crawl — это общедоступный веб-архив «извлечённого из веба текста» из скрейпленных HTML-файлов. Он производит 20 ТБ данных каждый месяц. Но большая часть текста — не естественный язык: там много бессмыслицы, шаблонного текста, сообщений об ошибках и т. д.

Чтобы очистить Common Crawl (и получить C4, датасет на 750 ГБ), было сделано следующее:

Сохранялись только строки, заканчивающиеся знаком конечной пунктуации. Отбрасывались страницы с менее чем 5 предложениями, и сохранялись только строки с >= 3 словами. Удалялись страницы со словами из списка «грязных, неприличных, непристойных, плохих слов». Исключалась любая строка со словом javascript. Удалялись страницы с lorem ipsum. Удалялись страницы с {, чтобы исключить страницы, содержащие код. Дедуплицировались трёхпредложенческие фрагменты, встречавшиеся в данных более одного раза. Отфильтровывались страницы, не классифицированные как английские с вероятностью >= 0,99.

С единым форматом авторы тщательно исследовали эффективность переноса обучения в NLP. Мне очень понравилось, что значительная часть статьи была посвящена экспериментам (и разделу «Что не сработало») по архитектурам, целям, подходам к дообучению и т. д. Вот краткое резюме на высоком уровне (рекомендуется прочитать оригинальную статью):

Архитектура энкодер-декодер с denoising-целью работала лучше всего (по сравнению с одиночным стеком Transformer, целью языкового моделирования). Среди целей без учителя маскированное языковое моделирование (в стиле BERT) работало лучше всего (по сравнению с префиксным языковым моделированием, deshuffling и т. д.). Между целями в стиле BERT была ограниченная разница (например, замена всего испорченного фрагмента одним MASK, полное удаление испорченных токенов) и разными вероятностями порчи (например, 10%, 15%, 25%). Обучение на полном датасете в течение 1 эпохи работало лучше, чем обучение на меньшем наборе данных в течение нескольких эпох (моё мнение: больше данных > больше вычислений). Одновременное дообучение всех слоёв показало наилучший результат (по сравнению с разморозкой каждого слоя и его настройкой, добавлением адаптерных слоёв различных размеров). Увеличение размера модели оказывало большее влияние, чем увеличение времени обучения или размера батча.

Подход к подбору гиперпараметров для целей без учителя при предобучении (источник)

Качество на нижестоящих задачах оценивалось на разнообразных бенчмарках (например, классификация текста GLUE и SuperGLUE, абстрактивная суммаризация CNN/Daily Mail, ответы на вопросы SQuAD и переводы WMT). С учётом инсайтов из экспериментального исследования была достигнута SOTA-производительность на 18 из 24 рассмотренных задач.

Итоги

Ух, в NLP с 1985 года произошло немало. Подведём итог тому, что мы рассмотрели:

Последовательные модели: RNN (1985), LSTM (1997), GRU (2014) Словные эмбеддинги: Word2vec (2013), GloVe (2014), FastText (2016) Словные эмбеддинги с контекстом: ELMo (2018) Внимание: Transformer (2017) Предобучение: ULMFiT (2017), GPT (2017) Объединение всего вышеперечисленного: BERT (2018) Улучшение BERT: DistilBERT, ALBERT, RoBERTa, XLNet (2019); Big Bird, многоязычные эмбеддинги (2020) Всё есть text-to-text: T5 (2019)

А вот и табличное резюме, если вам так удобнее.

Я упустил какие-нибудь ключевые вехи? Дайте знать, ответив на этот твит или в комментариях ниже!

NLP развивается очень быстрыми темпами. Недавно я выделил время, чтобы перечитать свои заметки и написать обзор в общих чертах (например, эмбеддинги, архитектуры, перенос обучения). Я что-то важное упустил/чрезмерно упростил? Есть ошибки? Обратная связь приветствуется! https://t.co/264TycIQDf — Eugene Yan (@eugeneyan) 20 августа 2020

Ссылки

RNN: Serial Order: A Parallel Distributed Processing Approach LSTM: Long Short-Term Memory AWD-LSTM: Regularizing and Optimizing LSTM Language Models GRU: Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation Word2vec: Efficient Estimation of Word Representations in Vector Space, Distributed Representations of Words and Phrases and their Compositionality GloVe: Global Vectors for Word Representation FastText: Enriching Word Vectors with Subword Information ELMo: Deep Contextualized Word Representations Transformer: Attention Is All You Need ULMFiT: Universal Language Model Fine-tuning for Text Classification GPT: Improving Language Understanding with Unsupervised Learning WordPiece-эмбеддинги: Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding DistilBERT: Smaller, Faster, Cheaper, Lighter; A Distilled Version of BERT ALBERT: A Lite BERT for Self-supervised Learning of Language Representations RoBERTa: A Robustly Optimized BERT Pretraining Approach Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context Многоязычные эмбеддинги BERT: Language-agnostic BERT Sentence Embedding XLNet: Generalized Autoregressive Pretraining for Language Understanding Longformer: The Long-Document Transformer Big Bird: Transformers for Longer Sequences T5: Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer

Спасибо Yang Xinyi и Pratik Bhavsar за прочтение черновиков.

Если вы нашли это полезным, пожалуйста, цитируйте эту статью так:

Yan, Ziyou. (Aug 2020). NLP for Supervised Learning - A Brief Survey. eugeneyan.com. https://eugeneyan.com/writing/nlp-supervised-learning-survey/.

или

@article{yan2020nlp, title = {NLP for Supervised Learning - A Brief Survey}, author = {Yan, Ziyou}, journal = {eugeneyan.com}, year = {2020}, month = {Aug}, url = {https://eugeneyan.com/writing/nlp-supervised-learning-survey/} }



Присоединяйтесь к 11 800+ читателям, получающим обновления о машинном обучении, RecSys, LLM и инженерии.