NLP for Supervised Learning - A Brief Survey
Юджин Ян кратко прослеживает эволюцию 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 for Supervised Learning - A Brief Survey
NLP для обучения с учителем — краткий обзор
[ llm deeplearning survey ] · 23 мин чтения
It’s hard to keep up with the rapid progress of natural language processing (NLP). To organize my thoughts better, I took some time to review my notes, compare the various papers, and sort them chronologically. This helped in my understanding of how NLP (and its building blocks) has evolved over time.
За стремительным прогрессом обработки естественного языка (NLP) трудно угнаться. Чтобы лучше упорядочить свои мысли, я выделил время на то, чтобы перечитать заметки, сравнить разные статьи и расположить их в хронологическом порядке. Это помогло мне понять, как NLP (и её строительные блоки) развивались со временем.
To reinforce my learning, I’m writing this summary of the broad strokes, including brief explanations of how models work and some details (e.g., corpora, ablation studies). Here, we’ll see how NLP has progressed from 1985 till now:
Чтобы закрепить изученное, я пишу этот обзор в общих чертах, включая краткие объяснения того, как работают модели, и некоторые детали (например, корпуса, 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)
(Did I miss anything important or oversimplify? Any errors? Please reach out with suggestions and I’ll update. Thank you!)
(Я что-то важное упустил или чрезмерно упростил? Есть ошибки? Пожалуйста, напишите мне с предложениями, и я обновлю статью. Спасибо!)
Sequential models to process a sentences (1985)
Последовательные модели для обработки предложений (1985)
Recurrent neural networks (RNNs) were first introduced around 1985 - 1986 (based on this thread). They differ from regular feedforward neural networks in that their hidden layers have connections to themselves. This allows them to operate over sequences (e.g., sentences of word tokens).
Рекуррентные нейронные сети (RNN) были впервые предложены около 1985–1986 годов (согласно этой ветке обсуждения). От обычных нейронных сетей прямого распространения они отличаются тем, что их скрытые слои имеют связи с самими собой. Это позволяет им работать с последовательностями (например, предложениями из словных токенов).
The state of the hidden layer at one time-step is used as input to the (same) hidden layer at the next time-step; thus the name “recurrent”. This allows the hidden layers to learn information about the temporal relationships between tokens in the sequence. For more details, check out Andrej Karpathy’s excellent post.
Состояние скрытого слоя на одном временном шаге используется как вход для (того же) скрытого слоя на следующем временном шаге; отсюда и название «рекуррентные». Это позволяет скрытым слоям выучивать информацию о временных связях между токенами в последовательности. За подробностями обращайтесь к отличному посту Андрея Карпатого.
RNN (left) and its unrolled view (right) (source)
RNN (слева) и её развёрнутое представление (справа) (источник)
However, RNNs had difficulty with modelling long-range dependencies (e.g., words that are far apart in a long sentence) due to vanishing/exploding gradients. With long sequences, the product of partial derivatives (through backpropagation) becomes very small (i.e., vanish). This happens when the partial derivatives are < 1. The reverse occurs when the partial derivatives are > 1 and the product explodes.
Однако RNN испытывали трудности с моделированием дальних зависимостей (например, слов, далеко отстоящих друг от друга в длинном предложении) из-за затухающих/взрывающихся градиентов. На длинных последовательностях произведение частных производных (при обратном распространении) становится очень малым (то есть затухает). Это происходит, когда частные производные < 1. Обратное происходит, когда частные производные > 1 и произведение взрывается.
The Long Short-Term Memory (LSTM) architecture introduced in 1997 improves on this. LSTMs model long-range dependencies better through gates:
Архитектура Long Short-Term Memory (LSTM), представленная в 1997 году, улучшает это. LSTM лучше моделируют дальние зависимости благодаря гейтам:
Гейт забывания (forget gate): решает, какую информацию из текущего входа и предыдущего скрытого состояния забыть (то есть отбросить) с помощью сигмоиды. Входной гейт (input gate): решает, какую информацию запомнить (то есть сохранить) с помощью сигмоиды. Выходной гейт (output gate): решает, каким должно быть следующее скрытое состояние.
Together, these gates improve how the LSTM learns—what should be forgotten and what should be remembered? More details in Chris Olah’s explanation. Though the LSTM was introduced in 1997, it wasn’t until 2015 that they saw commercial use: Google Voice, Apple’s QuickType and Siri, Amazon’s Alexa, and Facebook’s automatic translations.
Вместе эти гейты улучшают то, как LSTM обучается — что следует забыть, а что запомнить? Больше подробностей в объяснении Криса Олы. Хотя LSTM была представлена в 1997 году, лишь в 2015-м она нашла коммерческое применение: Google Voice, QuickType и Siri от Apple, Alexa от Amazon и автоматические переводы Facebook.
Gated Recurrent Units (GRUs) simplified the LSTM in 2014. It has only two gates, an update gate (similar to LSTM’s forget and input gate) and a reset gate (which also decides how much to forget). Because it has fewer gates (and thus fewer math operations), it’s faster to train. (In my work, I’ve found GRUs to converge faster with greater stability).
Gated Recurrent Units (GRU) упростили LSTM в 2014 году. У них всего два гейта: гейт обновления (update gate, аналог forget- и input-гейтов LSTM) и гейт сброса (reset gate, который также решает, сколько забыть). Поскольку гейтов меньше (а значит, и меньше математических операций), обучение идёт быстрее. (В своей работе я обнаружил, что GRU сходятся быстрее и с большей стабильностью.)
Word embeddings to learn from unlabelled data (2013)
Словные эмбеддинги для обучения на неразмеченных данных (2013)
In 2013, Word2vec (w2v) was introduced. Through unsupervised learning, it represents words as numbers, or more precisely, vectors of numbers. (Previously this was done via one-hot encoding). Being unsupervised, it’s able to learn on large corpora of unlabelled data (e.g., Wikipedia). When used in a variety of downstream tasks (e.g., classification), these word embeddings greatly improve model performance.
В 2013 году был представлен Word2vec (w2v). С помощью обучения без учителя он представляет слова в виде чисел, а точнее — векторов чисел. (Раньше это делалось через one-hot-кодирование.) Будучи методом без учителя, он способен обучаться на больших корпусах неразмеченных данных (например, Wikipedia). При использовании в разнообразных нижестоящих задачах (например, классификации) эти словные эмбеддинги существенно улучшают качество модели.
There are two ways to train w2v models: Continuous Bag of Words (CBOW) and Skip-gram. In CBOW, we predict the center target word given the context words around it. In Skip-gram, we predict the surrounding context words given a center word (similar to CBOW, but in reverse). Skip-gram was found to work better with smaller amounts of data and to represent rare words better. CBOW trains faster and has better representations of more frequent words. (I’ve usually found Skip-gram to work better.)
Есть два способа обучать модели w2v: Continuous Bag of Words (CBOW) и Skip-gram. В CBOW мы предсказываем центральное целевое слово по окружающим его контекстным словам. В Skip-gram мы предсказываем окружающие контекстные слова по центральному слову (так же, как в CBOW, но наоборот). Было обнаружено, что Skip-gram лучше работает на меньших объёмах данных и лучше представляет редкие слова. CBOW обучается быстрее и лучше представляет более частотные слова. (Я обычно находил, что Skip-gram работает лучше.)
I've found this intuition helpful for understanding this. Let’s start with a sample sentence: “Today is a ___ day for writing”. The most common center words include “beautiful”, “productive”, “great” while rare words include “hellacious”.
Мне показалась полезной такая интуиция для понимания этого. Начнём с примера предложения: «Today is a ___ day for writing» («Сегодня ___ день для письма»). Самые частые центральные слова — «beautiful» (прекрасный), «productive» (продуктивный), «great» (отличный), тогда как к редким относится «hellacious» (адский).
In CBOW, the rare words (i.e, “hellacious”) are drowned out by the more frequent words. Thus, CBOW doesn’t learn representations of these rare words as well.
В CBOW редкие слова (то есть «hellacious») заглушаются более частотными словами. Поэтому CBOW не так хорошо выучивает представления этих редких слов.
However, with Skip-gram, these rare words don’t have to “compete” with the more common words (in terms of probability of occurrence). Instead, they have their own context pairs, such as (“is”, “hellacious”), (“a”, “hellacious”), (“hellacious”, “day”), and (“hellacious”, “for”). These context pairs are treated as separate observations and thus help Skip-gram to learn these rare words better.
Однако в Skip-gram этим редким словам не приходится «конкурировать» с более частыми словами (по вероятности появления). Вместо этого у них есть собственные контекстные пары, такие как («is», «hellacious»), («a», «hellacious»), («hellacious», «day») и («hellacious», «for»). Эти контекстные пары рассматриваются как отдельные наблюдения и тем самым помогают Skip-gram лучше выучивать эти редкие слова.
Word2vec applied subsampling, where words that occurred relatively frequently were dropped out with a certain probability. This accelerated learning and improved word embeddings for rare words.
Word2vec применял сабсэмплинг (subsampling), при котором относительно частотные слова отбрасывались с определённой вероятностью. Это ускоряло обучение и улучшало словные эмбеддинги для редких слов.
It also tweaked the problem slightly. Instead of predicting the most probable nearby words (out of all possible words), it tries to predict whether the word-pairs (from skip-gram) were actual pairs. This changes the final layer from a softmax with all the words (expensive) to a sigmoid that does binary classification (much cheaper) .
Он также слегка изменил саму постановку задачи. Вместо предсказания наиболее вероятных соседних слов (из всех возможных слов) он пытается предсказать, были ли словные пары (из skip-gram) настоящими парами. Это меняет финальный слой с softmax по всем словам (дорого) на сигмоиду, выполняющую бинарную классификацию (намного дешевле).
However, our dataset and word pairs only have positive samples. Thus, negative sampling is done to generate negative samples based on the distribution of the unigrams. (In the paper, they applied an interesting trick and raised the word counts to the 3/4 power.)
Однако наш набор данных и словные пары содержат только положительные примеры. Поэтому выполняется негативное сэмплирование (negative sampling) для генерации отрицательных примеров на основе распределения униграмм. (В статье применили интересный трюк и возвели счётчики слов в степень 3/4.)
Global Vectors for Word Representation (GloVe) was introduced a year later (2014). While w2v learns word co-occurrence via a sliding window (i.e., local statistics), GloVe learns via a co-occurrence matrix (i.e., global statistics). GloVe then trains word vectors so their differences predict co-occurrence ratios. Surprisingly, though w2v and GloVe have different starting points, their word representations turn out to be similar.
Global Vectors for Word Representation (GloVe) был представлен годом позже (2014). Если w2v выучивает совместную встречаемость слов через скользящее окно (то есть локальную статистику), то GloVe выучивает её через матрицу совместной встречаемости (то есть глобальную статистику). Затем GloVe обучает словные векторы так, чтобы их разности предсказывали отношения совместной встречаемости. Удивительно, но, несмотря на разные отправные точки w2v и GloVe, их словные представления оказываются схожими.
There are also variants of w2v that learn subword or character embeddings. Subword embeddings learn the most frequent character segments (i.e., breaking a word into 2-3 character segments). One approach is FastText (where the original Word2vec author is a co-author). FastText open-sourced its code as well as the multiple-language word embeddings trained with it.
Существуют также варианты w2v, которые выучивают эмбеддинги подслов или символов. Эмбеддинги подслов выучивают наиболее частые символьные сегменты (то есть разбивают слово на сегменты по 2–3 символа). Один из подходов — FastText (соавтором которого является автор оригинального Word2vec). FastText выложил в открытый доступ свой код, а также словные эмбеддинги для множества языков, обученные с его помощью.
Before embeddings, we mostly relied on n-grams and one-hot vectors to represent text. (With embeddings, one-hot approaches are used less often. This occurs in non-NLP machine learning too, where categorical values are increasingly represented with embeddings instead of one-hot.)
До эмбеддингов мы в основном полагались на n-граммы и one-hot-векторы для представления текста. (С появлением эмбеддингов one-hot-подходы стали использоваться реже. Это происходит и за пределами NLP в машинном обучении, где категориальные значения всё чаще представляют эмбеддингами вместо one-hot.)
On top of these one-hot vectors, we can apply singular vector decomposition (SVD) for topic modelling. Various supervised learning techniques (e.g., logistic regression, naive Bayes, decision trees, neural networks) can also be applied for classification (e.g., sentiment analysis, spam detection).
Поверх этих one-hot-векторов можно применить сингулярное разложение (SVD) для тематического моделирования. Для классификации (например, анализа тональности, обнаружения спама) можно также применять различные методы обучения с учителем (например, логистическую регрессию, наивный байесовский классификатор, деревья решений, нейронные сети).
An example of this is the Otto Product Classification Competition on Kaggle. In this competition, the dataset had 93 numerical features that represented counts of different events. This is assumed to be counts of product text tokens and other attributes. The top submissions used TF-IDF and ensembles of decision trees, K-nearest neighbours, naive Bayes, and neural networks (more here).
Пример этого — соревнование Otto Product Classification на Kaggle. В этом соревновании набор данных имел 93 числовых признака, представлявших счётчики различных событий. Предполагается, что это счётчики токенов текста о товарах и других атрибутов. В лучших решениях использовались TF-IDF и ансамбли деревьев решений, метод K ближайших соседей, наивный байесовский классификатор и нейронные сети (подробнее здесь).
For my product classification API, I adopted a combination of n-grams, TF-IDF, and naive Bayes. Paul Graham also used a similar approach for spam detection.
Для своего API классификации товаров я использовал комбинацию n-грамм, TF-IDF и наивного байесовского классификатора. Пол Грэм тоже использовал похожий подход для обнаружения спама.
Improving word embeddings with context (2018)
Улучшение словных эмбеддингов с помощью контекста (2018)
In traditional word embeddings (e.g., Word2vec, GloVe), each token has only one representation (i.e., embedding). This is regardless of how it’s used in a sentence. For example, “date”:
В традиционных словных эмбеддингах (например, 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) improves on this (in 2018) by providing word representations based on the entire sentence. It does this via a bidirectional language model (biLM). ELMO’s biLM comprises a two-layer bidirectional LSTM.
Embeddings from Language Models (ELMo) улучшает это (в 2018 году), предоставляя представления слов на основе всего предложения. Делает он это с помощью двунаправленной языковой модели (biLM). biLM в ELMo состоит из двухслойной двунаправленной LSTM.
By going both left-to-right (LTR) and right-to-left (RTL), ELMo can learn more about a word’s context. For example, in “Today is a hellacious day for writing”, the LTR LM will encode “today is a” while the RTL LM will encode “writing for day”. Together, they consider the entire sentence for the word “hellacious”. These embeddings are learned via separate LMs and concatenated before being used downstream. (Why do these LMs have to be separate? See Why can’t we use bidirectional context with multiple layers?)
Двигаясь и слева направо (LTR), и справа налево (RTL), ELMo может узнать больше о контексте слова. Например, в «Today is a hellacious day for writing» LTR-модель закодирует «today is a», тогда как RTL-модель закодирует «writing for day». Вместе они учитывают всё предложение для слова «hellacious». Эти эмбеддинги выучиваются отдельными языковыми моделями и конкатенируются перед использованием в нижестоящих задачах. (Почему эти модели должны быть отдельными? См. Почему нельзя использовать двунаправленный контекст с несколькими слоями?)
Pre-trained ELMo can be used in a variety of supervised tasks. First, the biLM is trained and the word representation layers are frozen. Then, the ELMo word representation (i.e., vector) is concatenated with the token vector to enhance the word representation in the downstream task (e.g., classification).
Предобученный ELMo можно использовать в разнообразных задачах обучения с учителем. Сначала biLM обучается, а слои словных представлений замораживаются. Затем словное представление ELMo (то есть вектор) конкатенируется с вектором токена, чтобы усилить представление слова в нижестоящей задаче (например, классификации).
ELMo embeddings concatenated with input tokens (the blue blocks) for downstream tasks (source)
Эмбеддинги ELMo, конкатенированные с входными токенами (синие блоки), для нижестоящих задач (источник)
Attention to remove the need for recurrence (2017)
Внимание, чтобы устранить необходимость в рекуррентности (2017)
(We’re done with word representations; back to model architectures.)
(С представлениями слов мы закончили; возвращаемся к архитектурам моделей.)
Recurrent models (e.g., RNN, LSTM, GRU) have a sequential nature—each hidden state requires the input of the previous hidden state. Thus, training cannot be parallelized. Furthermore, they can’t learn long-range dependencies well; while LSTM and GRU improved on the RNN, they too had their limits.
Рекуррентные модели (например, RNN, LSTM, GRU) имеют последовательную природу — каждое скрытое состояние требует на входе предыдущего скрытого состояния. Поэтому обучение нельзя распараллелить. Кроме того, они плохо выучивают дальние зависимости; хотя LSTM и GRU улучшили RNN, у них тоже были свои пределы.
The Transformer (2017) solved both problems with attention. At a high level, attention determines how other tokens (in the input sequence) should be weighted while encoding the current token (i.e., how the others words in “Today is a hellacious day for writing” should weigh on “hellacious”). Together with the positional encodings (more later), we can process the entire sentence at once (no recurrence!) and compute each word’s representation based on the entire sequence.
Transformer (2017) решил обе проблемы с помощью внимания (attention). На высоком уровне внимание определяет, с какими весами следует учитывать другие токены (во входной последовательности) при кодировании текущего токена (то есть как другие слова в «Today is a hellacious day for writing» должны влиять на «hellacious»). Вместе с позиционными кодировками (positional encodings, подробнее ниже) мы можем обрабатывать всё предложение сразу (никакой рекуррентности!) и вычислять представление каждого слова на основе всей последовательности.
The Transformer is made up of encoder and decoder stacks. In each encoder stack, there are six identical sub-layers, each having a self-attention mechanism followed by a fully connected feedforward neural network. The decoder stack is similar but includes an additional attention layer to learn attention over the encoder’s output. (It seems the Transformer was intended for seq2seq problems such as translation.)
Transformer состоит из стеков энкодеров и декодеров. В каждом стеке энкодера есть шесть одинаковых подслоёв, каждый из которых имеет механизм self-attention, за которым следует полносвязная нейронная сеть прямого распространения. Стек декодера устроен похоже, но включает дополнительный слой внимания для обучения вниманию над выходом энкодера. (Похоже, Transformer задумывался для seq2seq-задач, таких как перевод.)
Multi-headed attention (eight heads) is used with each head randomly initialized. (Is it just me, or is this ensembling?) The outputs from these eight heads are concatenated and multiplied by an additional weight matrix. In the decoder stack, the attention mechanism is masked (to prevent looking ahead at future tokens).
Используется многоголовое внимание (multi-headed attention, восемь голов), причём каждая голова инициализируется случайно. (Мне одному кажется, или это ансамблирование?) Выходы этих восьми голов конкатенируются и умножаются на дополнительную матрицу весов. В стеке декодера механизм внимания маскируется (чтобы не подглядывать в будущие токены).
Why didn't the chicken cross the road? Attention from two different heads (source)
Why didn't the chicken cross the road? (Почему курица не перешла дорогу?) Внимание от двух разных голов (источник)
To provide information about the relative and absolute position of tokens in a sequence, positional encodings were used at the bottom of the encoder and decoder stacks. This helps the model to learn from token positions as well as the distance between each token.
Чтобы дать информацию об относительной и абсолютной позиции токенов в последовательности, в нижней части стеков энкодера и декодера использовались позиционные кодировки. Это помогает модели обучаться на позициях токенов, а также на расстоянии между каждым токеном.
(Be sure to check out Jay Alammar’s beautiful write-up on “The Illustrated Transformer”.)
(Обязательно ознакомьтесь с прекрасным разбором Джея Аламмара «The Illustrated Transformer».)
Fine-tuning learned embeddings (2017)
Дообучение выученных эмбеддингов (2017)
So far, we’ve mostly used word embeddings directly, or concatenated them with input tokens (i.e., ELMo). There was no fine-tuning of the word embeddings for specific tasks. This changed with ULMFiT and OpenAI GPT (and transfer learning).
До сих пор мы в основном использовали словные эмбеддинги напрямую или конкатенировали их с входными токенами (то есть ELMo). Дообучения словных эмбеддингов под конкретные задачи не было. Это изменилось с появлением ULMFiT и OpenAI GPT (и переноса обучения).
ULMFiT (2017) uses AWD-LSTM (LSTM with dropout at the various gates) as its language model and introduced a fine-tuning phase as part of three steps. First, in general-domain LM pre-training, the LM is trained on unlabelled data. ULMFiT trained on Wikitext-103 (28.6k Wikipedia articles and 103 million words).
ULMFiT (2017) использует AWD-LSTM (LSTM с dropout на различных гейтах) в качестве своей языковой модели и ввёл фазу дообучения как часть трёх шагов. Сначала, при предобучении языковой модели на общем домене, LM обучается на неразмеченных данных. ULMFiT обучался на Wikitext-103 (28,6 тыс. статей Wikipedia и 103 миллиона слов).
Then, in target-task fine-tuning, the LM is fine-tuned with the corpus of the target task (no labelled data introduced yet). Discriminative fine-tuning is applied, where each layer is fine-tuned with different learning rates—the last layer has the highest learning rate, with each subsequent layer having reduced learning rates. ULMFiT also adopted slanted triangle learning rates where the learning rate increases quickly before decaying at a slower rate.
Затем, при дообучении под целевую задачу, LM дообучается на корпусе целевой задачи (размеченные данные пока не вводятся). Применяется дискриминативное дообучение (discriminative fine-tuning), при котором каждый слой дообучается с разной скоростью обучения — у последнего слоя наибольшая скорость обучения, а у каждого последующего слоя она снижается. ULMFiT также применял наклонные треугольные скорости обучения (slanted triangle learning rates), при которых скорость обучения быстро возрастает, а затем затухает медленнее.
Finally, in target-task classifier fine-tuning, two additional linear blocks are added on the LM (softmax for the last layer, ReLU for the intermediate layer). Gradual unfreezing is done, where we start with unfreezing the last LM layer and fine-tuning it. One by one, each subsequent layer is unfrozen and tuned.
Наконец, при дообучении классификатора под целевую задачу поверх LM добавляются два дополнительных линейных блока (softmax для последнего слоя, ReLU для промежуточного). Выполняется постепенная разморозка (gradual unfreezing), при которой мы начинаем с разморозки последнего слоя LM и его дообучения. Один за другим каждый последующий слой размораживается и настраивается.
GPT (2017; granddaddy of GPT-3) also applied unsupervised pre-training. It uses the Transformer’s decoder stack. This is an improvement over LSTMs as the Transformer has better learning on long-ranged dependencies and is not recurrent in nature.
GPT (2017; прародитель GPT-3) также применил предобучение без учителя. Он использует стек декодера Transformer. Это улучшение по сравнению с LSTM, так как Transformer лучше выучивает дальние зависимости и не является рекуррентным по своей природе.
GPT is trained via two steps. First, unsupervised pre-training (similar to ULMFiT’s first step) involves learning on a corpus to predict the next word. GPT used the BookCorpus dataset of 7,000 unique, unpublished books. (This differs from ELMo, which uses shuffled sentences, thus destroying the long-range structure).
GPT обучается в два шага. Сначала предобучение без учителя (похоже на первый шаг ULMFiT) включает обучение на корпусе для предсказания следующего слова. GPT использовал датасет BookCorpus из 7000 уникальных, неопубликованных книг. (Это отличается от ELMo, который использует перемешанные предложения, тем самым разрушая дальнюю структуру.)
Then, supervised fine-tuning tweaks the decoder block for the target task. Task-specific inputs and labels are passed through the pre-trained decoder block to obtain the input representation (i.e., embedding). This representation is then fed into an additional linear output layer. In this stage, an auxiliary objective is included. The auxiliary objective predicts the next word in the task-specific corpus (similar to ULMFiT’s second step) and was found to improve generalisation and speed up convergence.
Затем дообучение с учителем настраивает блок декодера под целевую задачу. Входы и метки конкретной задачи пропускаются через предобученный блок декодера для получения представления входа (то есть эмбеддинга). Это представление затем подаётся в дополнительный линейный выходной слой. На этом этапе включается вспомогательная цель. Вспомогательная цель предсказывает следующее слово в корпусе конкретной задачи (похоже на второй шаг ULMFiT) и, как было установлено, улучшает обобщение и ускоряет сходимость.
Inputs are transformed into a single sequence based on the task (source)
Входы преобразуются в единую последовательность в зависимости от задачи (источник)
To use GPT, task-specific input transformations were done for various tasks:
Чтобы использовать GPT, для различных задач выполнялись преобразования входов под конкретную задачу:
$ token.Классификация текста: модель можно использовать напрямую. Текстовое следование (textual entailment): посылка и гипотеза конкатенируются с токеном $. Сходство (similarity): мы берём оба порядка предложений (то есть sentence1-sentence2, sentence2-sentence1) и конкатенируем их. Выход декодера складывается поэлементно и подаётся в линейный слой. Вопросы и ответы с выбором (multiple-choice Q&A): вопрос конкатенируется с каждым возможным ответом, и они пропускаются через линейный слой. Выходы нормализуются через softmax, чтобы получить распределение вероятностей.
(Check out Modern NLP’s Transfer Learning In NLP for comprehensive review on this.)
(Ознакомьтесь со статьёй Modern NLP Transfer Learning In NLP для исчерпывающего обзора по этой теме.)
BERT: No recurrence, bidirectional, pre-trained (2018)
BERT: никакой рекуррентности, двунаправленность, предобучение (2018)
Towards the end of 2018, Bidirectional Encoder Representations from Transformers (BERT) was introduced. It obtained SOTA results on eleven NLP tasks. There were several elements from previous models that made BERT a pragmatic SOTA model:
К концу 2018 года был представлен Bidirectional Encoder Representations from Transformers (BERT). Он получил SOTA-результаты на одиннадцати задачах NLP. Несколько элементов из предыдущих моделей сделали BERT прагматичной SOTA-моделью:
Transformer: BERT использует стек энкодера Transformer и отказывается от рекуррентности (распараллеливаемое обучение). ELMo: подобно ELMo, BERT имеет двунаправленный контекст. ULMFiT и GPT: BERT также применяет предобучение и дообучение; таким образом, LM (после предобучения) можно настроить под различные нижестоящие задачи. GPT: у BERT также единая архитектура и единое представление входа.
BERT uses a multi-layer bidirectional Transformer encoder block as its language model. In contrast, GPT uses a unidirectional Transformer decoder block while ELMo uses twin, separate LSTMs.
BERT использует в качестве своей языковой модели многослойный двунаправленный блок энкодера Transformer. В отличие от него, GPT использует однонаправленный блок декодера Transformer, тогда как ELMo использует две раздельные LSTM.
Input to BERT is represented as a single sentence or a pair of sentences (e.g., question and answer). BERT uses WordPiece embeddings. It also introduces a special classification token (CLS) that is always the first token in a sequence—the final hidden state of this token is used for classification tasks. Sentence pairs are separated by a SEP token (similar to GPT).
Вход для BERT представляется как одно предложение или пара предложений (например, вопрос и ответ). BERT использует WordPiece-эмбеддинги. Он также вводит специальный классификационный токен (CLS), который всегда является первым токеном в последовательности — финальное скрытое состояние этого токена используется для задач классификации. Пары предложений разделяются токеном SEP (аналогично GPT).
Pre-training is done via two unsupervised tasks. First, a masked language model (LM) is trained via the cloze task. (The standard, predict-the-next-word task cannot be used with bidirectional context and multiple layers; more below). BERT masks 15% of tokens randomly (with the MASK token). However, this creates a mismatch between pre-training and fine-tuning. Thus, of the masked tokens, 80% are MASK, 10% are replaced by a random token, and 10% are unchanged. The LM predicts the original token with cross-entropy loss.
Предобучение выполняется через две задачи без учителя. Сначала маскированная языковая модель (LM) обучается через задачу cloze (заполнение пропусков). (Стандартную задачу предсказания следующего слова нельзя использовать с двунаправленным контекстом и несколькими слоями; подробнее ниже.) BERT маскирует 15% токенов случайным образом (токеном MASK). Однако это создаёт расхождение между предобучением и дообучением. Поэтому из замаскированных токенов 80% — это MASK, 10% заменяются случайным токеном, а 10% остаются без изменений. LM предсказывает исходный токен с функцией потерь cross-entropy.
Let’s examine “Today is a hellacious day for writing” with attention layers.
Давайте разберём «Today is a hellacious day for writing» с помощью слоёв внимания.
In the first layer, the vector for “hellacious” does not include itself. However, in layer two, the vector of the words around “hellacious” will include the vector for “hellacious” due to attention (the orange arrow). (In the example below, I only show the this for “day”.) Thus, from layer 3 onwards, the vector for “hellacious” will be able to see itself as part of the weighted attention in layer 2 (the red arrow).
В первом слое вектор для «hellacious» не включает само это слово. Однако во втором слое вектор слов вокруг «hellacious» будет включать вектор для «hellacious» благодаря вниманию (оранжевая стрелка). (В примере ниже я показываю это только для «day».) Таким образом, начиная с третьего слоя, вектор для «hellacious» сможет видеть само себя как часть взвешенного внимания во втором слое (красная стрелка).
How tokens can see themselves via attention from lower layers
Как токены могут видеть сами себя через внимание из нижних слоёв
The second pre-training task involves next sentence prediction (NSP). Assuming two consecutive sentences A and B, 50% of the time sentence B actually follows sentence A. The other 50% of the time sentence B is a random sentence.
Вторая задача предобучения включает предсказание следующего предложения (next sentence prediction, NSP). Если взять два последовательных предложения A и B, то в 50% случаев предложение B действительно следует за предложением A. В остальных 50% случаев предложение B — это случайное предложение.
For both pre-training tasks, BERT uses the BooksCorpus (that GPT also used) and English Wikipedia (2,500 million words, text passages only). A document-level corpus was specifically chosen to learn from long contiguous sentences.
Для обеих задач предобучения BERT использует BooksCorpus (который использовал и GPT) и английскую Wikipedia (2500 миллионов слов, только текстовые отрывки). Корпус на уровне документов был выбран специально, чтобы обучаться на длинных непрерывных предложениях.
Fine-tuning involves passing task-specific inputs and labels to tweak model parameters end-to-end. Then, BERT can be used in various ways:
Дообучение заключается в передаче входов и меток конкретной задачи для настройки параметров модели end-to-end. После этого BERT можно использовать различными способами:
CLSКлассификация отдельного предложения и пары предложений: использовать финальное скрытое состояние CLS. Тегирование отдельного предложения: использовать финальное скрытое состояние каждого токена. Q&A: предсказывать две вероятности на токен — является ли он началом или концом текста.
BERT is practical (read: lower cost and faster to train due to no recurrence) and high performing. As a result, it has been applied to Google Search.
BERT практичен (читай: дешевле и быстрее в обучении из-за отсутствия рекуррентности) и высокопроизводителен. В результате он был применён в Google Search.
More examples of machine learning applied in the real-world: applied-ml
Больше примеров применения машинного обучения в реальном мире: applied-ml
Ablation studies come from experimental neuropsychology, where parts of animals’ brains were removed to study the impact on their behaviour. In the context of machine learning, the term is used to describe removing certain parts of neural networks to gain a better understanding of the network behaviour.
Ablation-исследования пришли из экспериментальной нейропсихологии, где части мозга животных удалялись для изучения влияния на их поведение. В контексте машинного обучения этот термин используется для описания удаления определённых частей нейронных сетей, чтобы лучше понять поведение сети.
Ablation studies are crucial for deep learning research -- can't stress this enough.
Understanding causality in your system is the most straightforward way to generate reliable knowledge (the goal of any research). And ablation is a very low-effort way to look into causality.
Ablation-исследования критически важны для исследований в области глубокого обучения — не могу не подчеркнуть это достаточно сильно. Понимание причинно-следственных связей в вашей системе — самый прямой способ получить надёжное знание (цель любого исследования). А ablation — это очень малозатратный способ заглянуть в причинность. — François Chollet (@fchollet) 29 июня 2018
Findings from ablation studies on BERT:
Выводы из ablation-исследований по BERT:
Удаление предсказания следующего предложения значительно снизило качество. Без двунаправленного языкового моделирования (то есть только слева направо, как в GPT) качество значительно снижается. Более крупная модель часто приводит к улучшению точности, даже когда размеченных обучающих примеров всего 3600. Использование BERT для извлечения признаков (то есть просто использование словных эмбеддингов) тоже работает хорошо. Лучший подход — конкатенировать словные представления из четырёх верхних скрытых слоёв предобученного энкодера. Хотя маскированное языковое моделирование сходится медленнее, чем языковое моделирование слева направо, маскированное языковое моделирование в итоге достигает более высокой точности при том же количестве шагов.
More details of the ablation studies in the BERT paper.
Больше подробностей об ablation-исследованиях в статье о BERT.
Improving on BERT (2019+)
Улучшение BERT (2019 и далее)
Since BERT, several improvements have been made to make it lighter (DistilBERT, ALBERT), optimize it further (RoBERTa). BERT has also been applied to create sentence embeddings in 109 languages.
После BERT было сделано несколько улучшений, чтобы сделать его легче (DistilBERT, ALBERT) и дополнительно оптимизировать (RoBERTa). BERT также применялся для создания эмбеддингов предложений на 109 языках.
One problem BERT had was not being able to learn bidirectionally (which is why BERT used the cloze task for pre-training). XLNet (June 2019) addresses this via permutation language modelling (LM); in contrast, BERT used masked language modelling.
Одна из проблем BERT заключалась в том, что он не мог обучаться двунаправленно (именно поэтому BERT использовал задачу cloze для предобучения). XLNet (июнь 2019) решает это через перестановочное языковое моделирование (permutation LM); в отличие от него, BERT использовал маскированное языковое моделирование.
Permutation LM is tricky but here’s my attempt to explain it. Here’s our example sentence and token indices: “Today(1) is(2) a(3) hellacious(4) day(5) for(6) writing (7)”, with the sequence 1234567.
Перестановочное LM хитрое, но вот моя попытка его объяснить. Вот наше примерное предложение и индексы токенов: «Today(1) is(2) a(3) hellacious(4) day(5) for(6) writing(7)» с последовательностью 1234567.
First, permutation LM creates multiple sequence permutations (e.g., 2347516). Then, it learns representations of each word based on only the preceding tokens: token 4 learns from tokens 2 & 3; token 7 leads from tokens 2, 3, 4. This ensures that the predicted word is never seen indirectly. (Note: This permutation is only used in the computation of attention; the order of tokens in the sequence is unchanged.)
Сначала перестановочное LM создаёт множество перестановок последовательности (например, 2347516). Затем оно выучивает представления каждого слова на основе только предшествующих токенов: токен 4 учится по токенам 2 и 3; токен 7 учится по токенам 2, 3, 4. Это гарантирует, что предсказываемое слово никогда не видно косвенно. (Примечание: эта перестановка используется только при вычислении внимания; порядок токенов в последовательности не меняется.)
BERT also had fixed-sized segments and thus could not handle sequences longer than the segment length (usually 512). XLNet uses previous work from Transformer-XL to get around this—it transfers state across fixed-sized segments (i.e., recurrence on segments) to handle sequences longer than the segment length. Nonetheless, with permutation LM and reintroducing recurrence, XLNet is much more computationally demanding to train.
У BERT также были сегменты фиксированного размера, и поэтому он не мог обрабатывать последовательности длиннее длины сегмента (обычно 512). XLNet использует наработки из Transformer-XL, чтобы обойти это — он передаёт состояние между сегментами фиксированного размера (то есть рекуррентность по сегментам), чтобы обрабатывать последовательности длиннее длины сегмента. Тем не менее с перестановочным LM и повторным введением рекуррентности XLNet намного более требователен к вычислениям при обучении.
Recently, Big Bird (28 July 2020) increased the segment length to 8x of what BERT could handle. BERT is limited by the quadratic dependency of its sequence length due to full attention, where each token has to attend to every other token. This leads to a memory limitation. On standard hardware (16gb RAM), this translates to input sequences (and segment length) of 512 tokens.
Недавно Big Bird (28 июля 2020) увеличил длину сегмента до 8-кратной по сравнению с тем, что мог обрабатывать BERT. BERT ограничен квадратичной зависимостью от длины последовательности из-за полного внимания, при котором каждый токен должен учитывать каждый другой токен. Это приводит к ограничению по памяти. На стандартном оборудовании (16 ГБ ОЗУ) это соответствует входным последовательностям (и длине сегмента) в 512 токенов.
Big Bird has sparser attention that allows it to model on 8x the sequence length of BERT (source)
У Big Bird более разреженное внимание, что позволяет ему моделировать на 8-кратной длине последовательности по сравнению с BERT (источник)
Big Bird proposed generalized attention mechanism which has linear complexity (as opposed to quadratic) on the sequence length. It has three aspects of attention:
Big Bird предложил обобщённый механизм внимания, который имеет линейную сложность (в отличие от квадратичной) по длине последовательности. У него три аспекта внимания:
r random tokens, leading to sparse attention (r = 2).w (w = 3). This is similar to Longformer which uses a localised sliding window-based mask to reduce computation and extend BERT to longer sequences.g tokens in a sequence (g = 2). Global tokens attend to all tokens in the sequence and vice versa. This includes additional tokens such as CLS ala BERT. (Using just random and sliding window attention were insufficient to compete with BERT).Случайное внимание (random attention): учитывает r случайных токенов, что приводит к разреженному вниманию (r = 2). Внимание скользящего окна (sliding window attention): учитывает окно ширины w (w = 3). Это похоже на Longformer, который использует локализованную маску на основе скользящего окна, чтобы сократить вычисления и расширить BERT на более длинные последовательности. Глобальные токены (global tokens): глобальные токены — это подмножество из g токенов в последовательности (g = 2). Глобальные токены учитывают все токены в последовательности и наоборот. Сюда входят дополнительные токены, такие как CLS в стиле BERT. (Использования только случайного внимания и внимания скользящего окна было недостаточно, чтобы конкурировать с BERT.)
Everything is text-to-text
Всё есть text-to-text
Towards the end of 2019, the Text-To-Text-Transfer-Transformer (T5) introduced a unified framework that converts all text-based problems into a text-to-text format. Thus, the input and output are text-strings, making a single T5 fit for multiple tasks.
К концу 2019 года Text-To-Text-Transfer-Transformer (T5) ввёл единый фреймворк, который преобразует все текстовые задачи в формат text-to-text. Таким образом, вход и выход — это текстовые строки, благодаря чему единственный T5 подходит для множества задач.
Translation, Q&A, classification are all text to text, with different prefixes to indicate the task (source)
Перевод, Q&A, классификация — всё это text-to-text, с разными префиксами для указания задачи (источник)
The T5 uses the Transformer encoder-decoder based structure which the authors found to work best for text-to-text. Nonetheless, the authors introduced a few changes such as: removing the layer norm bias, placing the layer norm outside the residual path, and using a different position embedding scheme.
T5 использует структуру на основе энкодера-декодера Transformer, которая, как обнаружили авторы, работает лучше всего для text-to-text. Тем не менее авторы внесли несколько изменений, таких как: удаление смещения в layer norm, размещение layer norm вне остаточного пути и использование иной схемы позиционных эмбеддингов.
Pre-training was done on the Colossal Clean Crawled Corpus (C4), a high quality pre-processed English language corpus. It is approximately 750gb in size and is a cleaned version of the Common Crawl.
Предобучение проводилось на Colossal Clean Crawled Corpus (C4) — высококачественном предобработанном корпусе английского языка. Его размер составляет примерно 750 ГБ, и это очищенная версия Common Crawl.
C-4, or Composition C-4, was developed by the British during World War II … I’m kidding. (Well, while that is how the explosive was developed, it’s not the C4 we’re discussing here. Context is important.)
C-4, или Composition C-4, был разработан британцами во время Второй мировой войны… Шучу. (Хотя именно так была разработана взрывчатка, это не тот C4, о котором мы здесь говорим. Контекст важен.)
First, let’s start with the Common Crawl. The Common Crawl is a publicly available web archive of “web extracted text” from scraped HTML files. It produces 20TB fo data each month. But most of the text is not natural language—there’s a lot of gibberish, boilerplate, error messages, etc.
Сначала давайте начнём с Common Crawl. Common Crawl — это общедоступный веб-архив «извлечённого из веба текста» из скрейпленных HTML-файлов. Он производит 20 ТБ данных каждый месяц. Но большая часть текста — не естественный язык: там много бессмыслицы, шаблонного текста, сообщений об ошибках и т. д.
To clean Common Crawl (and get C4, a 750gb dataset), the following was done:
Чтобы очистить Common Crawl (и получить C4, датасет на 750 ГБ), было сделано следующее:
javascript.lorem ipsum.{ to exclude pages containing code.Сохранялись только строки, заканчивающиеся знаком конечной пунктуации. Отбрасывались страницы с менее чем 5 предложениями, и сохранялись только строки с >= 3 словами. Удалялись страницы со словами из списка «грязных, неприличных, непристойных, плохих слов». Исключалась любая строка со словом javascript. Удалялись страницы с lorem ipsum. Удалялись страницы с {, чтобы исключить страницы, содержащие код. Дедуплицировались трёхпредложенческие фрагменты, встречавшиеся в данных более одного раза. Отфильтровывались страницы, не классифицированные как английские с вероятностью >= 0,99.
With the unified format, the authors thoroughly explored the effectiveness of transfer learning in NLP. I loved how a sizeable portion of the paper was devoted to experiments (and “What didn’t work”) on architectures, objectives, fine-tuning approaches, etc. Here’s a high-level summary (reading the original paper is recommended):
С единым форматом авторы тщательно исследовали эффективность переноса обучения в NLP. Мне очень понравилось, что значительная часть статьи была посвящена экспериментам (и разделу «Что не сработало») по архитектурам, целям, подходам к дообучению и т. д. Вот краткое резюме на высоком уровне (рекомендуется прочитать оригинальную статью):
MASK, dropping corrupted tokens entirely) and different corruption probabilities (e.g., 10%, 15%, 25%)Архитектура энкодер-декодер с denoising-целью работала лучше всего (по сравнению с одиночным стеком Transformer, целью языкового моделирования). Среди целей без учителя маскированное языковое моделирование (в стиле BERT) работало лучше всего (по сравнению с префиксным языковым моделированием, deshuffling и т. д.). Между целями в стиле BERT была ограниченная разница (например, замена всего испорченного фрагмента одним MASK, полное удаление испорченных токенов) и разными вероятностями порчи (например, 10%, 15%, 25%). Обучение на полном датасете в течение 1 эпохи работало лучше, чем обучение на меньшем наборе данных в течение нескольких эпох (моё мнение: больше данных > больше вычислений). Одновременное дообучение всех слоёв показало наилучший результат (по сравнению с разморозкой каждого слоя и его настройкой, добавлением адаптерных слоёв различных размеров). Увеличение размера модели оказывало большее влияние, чем увеличение времени обучения или размера батча.
Hyperparameter tuning approach on unsupervised objectives for pre-training (source)
Подход к подбору гиперпараметров для целей без учителя при предобучении (источник)
Downstream performance on a variety of benchmarks was evaluated (e.g., GLUE and SuperGLUE text classification, CNN/Daily Mail abstractive summarization, SQuAD question answering, and WMT translations.) With the insights from the experimental study, SOTA performance was achieved on 18 out of 24 tasks considered.
Качество на нижестоящих задачах оценивалось на разнообразных бенчмарках (например, классификация текста GLUE и SuperGLUE, абстрактивная суммаризация CNN/Daily Mail, ответы на вопросы SQuAD и переводы WMT). С учётом инсайтов из экспериментального исследования была достигнута SOTA-производительность на 18 из 24 рассмотренных задач.
Summary
Итоги
Whew, a lot has happened in NLP since 1985. To recap, here’s what we covered so far:
Ух, в 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)
And here’s a table summary if that’s what you prefer.
А вот и табличное резюме, если вам так удобнее.
Did I miss any key milestones? Let me know by responding to this tweet or in the comments below!
Я упустил какие-нибудь ключевые вехи? Дайте знать, ответив на этот твит или в комментариях ниже!
NLP is developing at a very fast pace.
I recently took some time to review my notes and write a summary of the broad strokes (e.g., embeddings, architectures, transfer learning).
Did I miss anything important/oversimplify? Any error? Feedback welcome! https://t.co/264TycIQDf
NLP развивается очень быстрыми темпами. Недавно я выделил время, чтобы перечитать свои заметки и написать обзор в общих чертах (например, эмбеддинги, архитектуры, перенос обучения). Я что-то важное упустил/чрезмерно упростил? Есть ошибки? Обратная связь приветствуется! https://t.co/264TycIQDf — Eugene Yan (@eugeneyan) 20 августа 2020
References
Ссылки
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
Thanks to Yang Xinyi and Pratik Bhavsar for reading drafts of this.
Спасибо Yang Xinyi и Pratik Bhavsar за прочтение черновиков.
If you found this useful, please cite this write-up as:
Если вы нашли это полезным, пожалуйста, цитируйте эту статью так:
Yan, Ziyou. (Aug 2020). NLP for Supervised Learning - A Brief Survey. eugeneyan.com. https://eugeneyan.com/writing/nlp-supervised-learning-survey/.
Yan, Ziyou. (Aug 2020). NLP for Supervised Learning - A Brief Survey. eugeneyan.com. https://eugeneyan.com/writing/nlp-supervised-learning-survey/.
or
или
@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/}
}
@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/} }
Join 11,800+ readers getting updates on machine learning, RecSys, LLMs, and engineering.
Присоединяйтесь к 11 800+ читателям, получающим обновления о машинном обучении, RecSys, LLM и инженерии.