Глава 1.3 — Нейросетевые языковые модели до RNN
Содержание
- Идея, сломавшая потолок n-грамм: распределённые представления
- Нейросетевая вероятностная языковая модель Бенджио
- Word2Vec: представления как продукт, а не побочный эффект
- GloVe: путь к тому же результату через подсчёт
- Что эти представления решают, а что нет
- Взгляд с точки зрения собеседования
- Вопросы для самопроверки
- Источники
1. Идея, сломавшая потолок n-грамм: распределённые представления
Глава 1.2 закончилась на самом глубоком ограничении счётных языковых моделей: они рассматривают каждое слово как атомарный, ни с чем не связанный символ. Знание о том, что «кот сидел на коврике» — правдоподобное предложение, ничего не говорит таблице n-грамм о фразе «пёс сидел на подстилке», хотя человек мгновенно распознаёт их как структурно взаимозаменяемые. В системе, построенной исключительно на подсчёте отдельных строк, нет никакого понятия сходства между «кот» и «пёс».
Решение — перестать представлять слова как отдельные символы и начать представлять их как точки в непрерывном векторном пространстве, где похожие слова оказываются рядом друг с другом. Это и есть идея распределённого представления (distributed representation): вместо того чтобы одно слово было одним произвольным индексом в гигантской таблице, слово становится вектором, скажем, из нескольких сотен чисел, и эти числа подбираются (обучаются) так, чтобы слова, употребляемые сходным образом, получали сходные векторы. Как только слова оказываются в непрерывном пространстве, модель может обобщать между ними примерно так же, как арифметика обобщается между числами: изучив что-то полезное про область пространства рядом со словом «кот», вы узнаёте кое-что и про «пёс», потому что они оказываются близко друг к другу.
Эта единственная идея — замена символьной идентичности выученным непрерывным представлением — пожалуй, самый важный концептуальный сдвиг во всей истории языкового моделирования, более фундаментальный, чем любая конкретная архитектура. Всё, что начинается с этой главы и вплоть до крупнейших современных трансформеров, — это история о том, что делать, как только слова (или подслова, или пиксели, или что угодно ещё) представлены именно таким образом.
2. Нейросетевая вероятностная языковая модель Бенджио
Статьёй, впервые сделавшей эту идею конкретной и обучаемой целиком, end-to-end, для языкового моделирования, стала работа Йошуа Бенджио (Yoshua Bengio) и коллег 2003 года «A Neural Probabilistic Language Model» («Нейросетевая вероятностная языковая модель»). По современным меркам архитектура выглядит почти по-старомодному: прямая нейронная сеть (feedforward) принимает на вход предыдущие \(n-1\) слов, ищет каждое из них в общей таблице выученных векторов (таблице эмбеддингов), конкатенирует эти векторы, пропускает результат через один-два скрытых слоя и выдаёт распределение вероятностей по словарю для следующего слова — обучаясь, как и любая языковая модель в этой книге, минимизировать перекрёстную энтропию относительно фактического следующего слова.
Три момента в этой конструкции стоит отметить особо, потому что в той или иной форме они сохраняются во всех последующих главах. Во-первых, таблица эмбеддингов обучается совместно с остальной сетью, движимая исключительно целью языкового моделирования, — никто вручную не задаёт, что делает два слова похожими; это возникает само собой в ходе обучения на задаче предсказания. Во-вторых, таблица эмбеддингов является общей (shared): вектор, выученный для «кот», один и тот же независимо от того, в каком месте входного окна слово встречается, поэтому всё, что выучено про «кот» в одном контексте, переносится на любой другой контекст, где оно встречается. В-третьих, и это важнее всего для проблемы разреженности из главы 1.2, эта модель может присвоить разумную, ненулевую вероятность контексту, которого она никогда не видела при обучении, — при условии, что отдельные слова в этом контексте похожи (в выученном векторном пространстве) на слова, встречавшиеся ей в других контекстах. Это именно то обобщение, которое счётные n-граммы структурно не способны были обеспечить.
Модель по-прежнему использовала окно контекста фиксированного размера, точно как модель n-грамм, — по сути, это всё ещё марковская модель, только оцениваемая нейронной сетью вместо таблицы подсчётов. Решить проблему фиксированного окна как таковую предстояло рекуррентным сетям — теме следующей главы. Статья Бенджио решила другую половину проблемы: обобщение между похожими словами в пределах того окна, которое всё же используется.
3. Word2Vec: представления как продукт, а не побочный эффект
Десятилетием позже Томаш Миколов (Tomas Mikolov) и коллеги из Google опубликовали в 2013 году две статьи, которые взяли идею эмбеддингов из модели Бенджио и сделали её самоцелью, а не побочным эффектом обучения полноценной языковой модели. Речь о Word2Vec, представленной в виде двух тесно связанных схем обучения: continuous bag-of-words (CBOW), предсказывающей целевое слово по окружающим его словам контекста, и skip-gram, предсказывающей окружающие слова контекста по целевому слову. Принципиально важно, что Word2Vec отбрасывает глубокие скрытые слои и тяжёлый аппарат полноценной языковой модели — это неглубокая, чрезвычайно быстро обучаемая цель, единственное предназначение которой — получить на выходе хорошие векторы слов, а не быть самой по себе хорошим предсказателем следующего слова.
Этот сдвиг в постановке задачи имел огромное практическое значение. Word2Vec можно было обучать на корпусах, намного превосходящих по размеру то, что было практически осуществимо для полноценной нейросетевой языковой модели того времени, а получившиеся векторы обладали поразительно полезным свойством: простая векторная арифметика улавливала реальные семантические и синтаксические отношения. Знаменитый пример — вектор для «king» («король») минус «man» («мужчина») плюс «woman» («женщина») оказывается близко к вектору для «queen» («королева»): то есть отношения между словами (здесь, грубо говоря, «принадлежность к королевской семье» и «пол») кодируются как устойчивые направления в векторном пространстве, а не просто как близость отдельных точек. Статья Word2Vec об эффективной оценке и её статья-компаньон о распределённых представлениях (введшая negative sampling — приём обучения, сделавший skip-gram практически применимой в большом масштабе) вместе установили, что стратегия «сначала выучи хорошие векторы слов, затем используй их повсюду ниже по конвейеру» сама по себе является жизнеспособной и чрезвычайно полезной, независимо от какой-либо конкретной задачи языкового моделирования.
Стоит точно понимать, что именно делает negative sampling, поскольку его часто упоминают без объяснения. Вычисление настоящей softmax skip-gram по всему словарю — десяткам или сотням тысяч слов — на каждом шаге обучения было бы непозволительно дорогим, поскольку нормирующая сумма softmax требует обращения к каждой записи словаря лишь для предсказания одного контекстного слова:
$$P(w_O \mid w_I) = \frac{\exp(v'^{\top}_{w_O} v_{w_I})}{\sum_{w=1}^{|V|} \exp(v'^{\top}_{w} v_{w_I})}$$
Negative sampling обходит это, превращая задачу в гораздо более дешёвую: вместо предсказания полного распределения вероятностей по всем возможным контекстным словам обучается бинарный классификатор, различающий одну истинную пару (целевое слово, контекст) от горстки случайно сэмплированных пар (целевое слово, случайное слово) — обычно от 5 до 20 негативных примеров на один положительный, — что затрагивает лишь малое, фиксированное число строк словаря на шаг независимо от того, насколько велик словарь. Целевая функция для одной пары (целевое слово, контекст) при этом имеет вид
$$\log \sigma(v'^{\top}_{w_O} v_{w_I}) + \sum_{i=1}^{k} \mathbb{E}_{w_i \sim P_n(w)}\big[\log \sigma(-v'^{\top}_{w_i} v_{w_I})\big]$$ Иерархическая softmax (hierarchical softmax) — более ранний и менее распространённый ответ на ту же проблему — вместо этого организует словарь в виде бинарного дерева и превращает предсказание одного конкретного слова в последовательность бинарных решений вдоль дерева, что снижает стоимость с линейной по размеру словаря до логарифмической. Оба приёма атакуют одну и ту же проблему — дорогую нормировку по огромному словарю — с разных сторон: negative sampling аппроксимативно убирает нормировку целиком, иерархическая softmax перестраивает вычисление так, что точный ответ больше не требует обращения к каждому слову.
4. GloVe: путь к тому же результату через подсчёт
Примерно в то же время Джеффри Пеннингтон (Jeffrey Pennington), Ричард Сочер (Richard Socher) и Кристофер Мэннинг (Christopher Manning) из Стэнфорда опубликовали GloVe (Global Vectors) — метод, приходящий к столь же полезным векторам слов, но с иной отправной точки: вместо локальной задачи предсказания (предсказать слово по его соседям) GloVe явно факторизует глобальную матрицу совместной встречаемости слов (co-occurrence matrix) — по сути, для каждой пары слов фиксируется, как часто они встречаются рядом друг с другом по всему корпусу, — раскладывая её на векторы так, что скалярное произведение двух векторов слов приближает логарифм их статистики совместной встречаемости:
$$w_i^{\top} \tilde{w}_j + b_i + \tilde{b}_j \approx \log X_{ij}$$
Практический результат — векторы с той же полезной арифметической структурой, что и у Word2Vec, — схож, но лежащая в основе философия заслуживает понимания, поскольку она постоянно повторяется в машинном обучении: Word2Vec — это предсказательный, локальный, потоковый подход (обучение по одному окну контекста за раз), тогда как GloVe — это счётный, глобальный, пакетный подход (сначала агрегировать статистику по всему корпусу, затем факторизовать). Тот факт, что две весьма разные процедуры обучения сходятся к векторам со схожими полезными свойствами, сам по себе информативен: это говорит о том, что результат «вектор слова с линейной структурой» — не артефакт одного конкретного трюка обучения, а отражает нечто реальное в статистической структуре того, как слова совместно встречаются в естественном языке.
Стоит назвать ещё один вариант — из-за того, куда он указывает вперёд: fastText, разработанный Бояновски (Bojanowski) с соавторами в Facebook AI Research, оставляет обучающую цель skip-gram из Word2Vec практически неизменной, но представляет каждое слово как сумму эмбеддингов составляющих его символьных n-грамм, а не как единый непрозрачный вектор на целое слово. Слово, которого модель никогда не видела при обучении, — опечатка, редкая словоформа, только что придуманное слово — всё равно получает пригодный вектор, собранный из тех символьных n-грамм, которые оно разделяет со словами, виденными моделью, вместо того чтобы, как у пословных Word2Vec и GloVe, откатываться к заглушке «вне словаря». Этот ход — представлять слово как композицию более мелких, переиспользуемых подсловных кусочков, а не как неделимую единицу, — это ровно та идея, которую подсловная токенизация из главы 4.1 (byte-pair encoding и родственные схемы) доводит ещё дальше, применяя её уже не только к эмбеддингам, но и к самому словарю.
5. Что эти представления решают, а что нет
Стоит точно понимать, что предобученные векторные представления слов (эмбеддинги) на самом деле исправили, а что оставили нетронутым, — потому что обе половины важны для понимания того, почему RNN, а затем и трансформеры всё же оказались необходимы.
Что они исправили: разрыв в обобщении из главы 1.2. Модель, оснащённая векторами Word2Vec или GloVe (или векторами, обучаемыми совместно, как в модели Бенджио), может переносить статистическую силу между похожими словами, значительно смягчая проблему разреженности, и может быть предобучена на гигантских неразмеченных корпусах, а затем переиспользована во многих последующих задачах — ранняя, более узкая версия парадигмы «сначала предобучение, потом адаптация», доминирующей в остальной части этой книги.
Чего они не исправили: длину контекста и чувствительность к порядку слов за пределами фиксированного окна и — что важно — единственный фиксированный вектор на слово независимо от контекста. Слово «bank» («банк»/«берег») получает ровно один вектор Word2Vec вне зависимости от того, используется ли оно в значении речного берега или финансового учреждения; у представления нет способа подстроиться под предложение, в котором оно реально встречается. Именно это ограничение — статичные, не зависящие от контекста эмбеддинги — и было призвано решить контекстуальное представление (создаваемое сначала RNN, а позже трансформерами; и то, и другое рассматривается в следующих главах). Идея векторов слов, введённая в этой главе, никуда не исчезает в последующих архитектурах; она становится входным слоем, на котором строится каждая последующая архитектура, уточняя фиксированный вектор слова до зависящего от контекста по мере прохождения через сеть.
6. Взгляд с точки зрения собеседования
Эта глава часто всплывает на собеседованиях как проверка того, понимаете ли вы эмбеддинги как концепцию, независимо от какой-либо конкретной последующей архитектуры:
- «В чём разница между Word2Vec и GloVe концептуально?» — ожидаемый ответ противопоставляет локальное/предсказательное обучение глобальному/счётному, а не сводится к «оба они — это векторы слов».
- «Почему работает «king − man + woman ≈ queen»?» — хороший ответ объясняет, что отношения кодируются как устойчивые векторные направления из-за того, как цель обучения связывает статистику совместной встречаемости с геометрией, а не как таинственный эмерджентный трюк.
- «В чём фундаментальное ограничение эмбеддингов Word2Vec/GloVe, которое пришлось решать более поздним архитектурам?» — ожидаемый ответ — независимость от контекста: один фиксированный вектор на слово вне зависимости от употребления, что мотивирует контекстуальные эмбеддинги.
- «Почему модель Бенджио 2003 года имела значение, если Word2Vec/GloVe появились десятилетием позже и используются чаще?» — проверяет понимание преемственности: статья Бенджио установила, что эмбеддинги вообще можно обучать совместно с целью нейросетевой языковой модели; Word2Vec и GloVe — это усовершенствования способа эффективно получить хорошие эмбеддинги, а не иная идея.
7. Вопросы для самопроверки
- Объясните своими словами, что такое «распределённое представление», и почему оно позволяет модели обобщать между похожими словами так, как таблица n-грамм не может.
- Опишите архитектуру нейросетевой вероятностной языковой модели Бенджио 2003 года и объясните, какую конкретно проблему из главы 1.2 она решает, а какую оставляет нерешённой.
- В чём разница между целями обучения CBOW и skip-gram в Word2Vec?
- Сравните подход обучения GloVe с подходом Word2Vec. Почему может быть значимым, что оба приходят к векторам со схожими полезными свойствами?
- Что значит, что векторное представление слова «не зависит от контекста», и почему это реальное ограничение? Приведите пример слова, значение которого меняется в зависимости от контекста, для иллюстрации.
- Проследите сквозную линию от проблемы разреженности из главы 1.2 к распределённым представлениям этой главы и далее к необходимости зависящих от контекста представлений в следующей главе. Какой конкретно пробел закрывает каждый шаг и какой пробел он оставляет открытым?
8. Источники
- Bengio, Y., Ducharme, R., Vincent, P., & Jauvin, C. (2003). A Neural Probabilistic Language Model. Journal of Machine Learning Research, 3, 1137–1155. JMLR
- Mikolov, T., Chen, K., Corrado, G., & Dean, J. (2013). Efficient Estimation of Word Representations in Vector Space. arXiv:1301.3781
- Mikolov, T., Sutskever, I., Chen, K., Corrado, G., & Dean, J. (2013). Distributed Representations of Words and Phrases and their Compositionality. arXiv:1310.4546
- Pennington, J., Socher, R., & Manning, C. D. (2014). GloVe: Global Vectors for Word Representation. EMNLP 2014. ACL Anthology D14-1162
- Bojanowski, P., Grave, E., Joulin, A., & Mikolov, T. (2017). Enriching Word Vectors with Subword Information (fastText). TACL. arXiv:1607.04606