Глава 1.3 — Нейросетевые языковые модели до RNN

Содержание

  1. Идея, сломавшая потолок n-грамм: распределённые представления
  2. Нейросетевая вероятностная языковая модель Бенджио
  3. Word2Vec: представления как продукт, а не побочный эффект
  4. GloVe: путь к тому же результату через подсчёт
  5. Что эти представления решают, а что нет
  6. Взгляд с точки зрения собеседования
  7. Вопросы для самопроверки
  8. Источники

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. Вопросы для самопроверки

  1. Объясните своими словами, что такое «распределённое представление», и почему оно позволяет модели обобщать между похожими словами так, как таблица n-грамм не может.
  2. Опишите архитектуру нейросетевой вероятностной языковой модели Бенджио 2003 года и объясните, какую конкретно проблему из главы 1.2 она решает, а какую оставляет нерешённой.
  3. В чём разница между целями обучения CBOW и skip-gram в Word2Vec?
  4. Сравните подход обучения GloVe с подходом Word2Vec. Почему может быть значимым, что оба приходят к векторам со схожими полезными свойствами?
  5. Что значит, что векторное представление слова «не зависит от контекста», и почему это реальное ограничение? Приведите пример слова, значение которого меняется в зависимости от контекста, для иллюстрации.
  6. Проследите сквозную линию от проблемы разреженности из главы 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

Тест для самопроверки

Проверьте понимание главы с помощью короткого теста — вопросы по теории и небольшие расчёты.

Какую проблему решает представление слов в виде векторов в непрерывном пространстве, которую счётная таблица n-грамм структурно решить не может?

Объяснение: Когда слова становятся точками в непрерывном пространстве, изучение чего-то полезного рядом с «кот» говорит кое-что и про «пёс», потому что они оказываются рядом. У счётных таблиц такого понятия сходства нет.

Что предсказывает обучающая цель skip-gram в Word2Vec?

Объяснение: Skip-gram идёт от целевого слова к контексту; CBOW (continuous bag-of-words), наоборот, предсказывает целевое слово по окружающему его контексту.

Чем подход обучения GloVe принципиально отличается от Word2Vec?

Объяснение: Word2Vec — предсказательный, локальный, онлайн-подход (по одному окну контекста за раз); GloVe — счётный, глобальный, батчевый (сначала агрегирует статистику по всему корпусу, затем факторизует). Оба сходятся к векторам с похожей полезной линейной структурой.

Какое ключевое ограничение общее у эмбеддингов Word2Vec и GloVe, мотивировавшее переход к контекстным представлениям (RNN, затем трансформеры)?

Объяснение: Статические эмбеддинги присваивают один вектор на тип слова, без возможности подстроиться под конкретное предложение. Исправление этого — вектор, зависящий от контекста, — именно то, для чего были созданы RNN и трансформеры.

Модель Бенджио 2003 года использует 100-мерный эмбеддинг для каждого слова и окно контекста из предыдущих 4 слов. Каков размер конкатенированного входного вектора, подаваемого в скрытый слой?

Объяснение: 4 слова × 100 измерений каждое, конкатенированные = 400.

Словарь содержит 10 000 слов, и каждое слово представлено 50-мерным вектором эмбеддинга. Сколько всего параметров в одной только таблице эмбеддингов (без учёта остальных слоёв)?

Объяснение: 10 000 слов × 50 измерений = 500 000 параметров.

Используя упрощённые 2D игрушечные векторы $\text{король} = (5, 3)$, $\text{мужчина} = (4, 1)$, $\text{женщина} = (2, 4)$, вычислите $\text{король} - \text{мужчина} + \text{женщина}$ (должно оказаться рядом с «королева»). Дайте сумму двух компонент результата.

Объяснение: король − мужчина + женщина = (5−4+2, 3−1+4) = (3, 6). Сумма компонент = 3 + 6 = 9.

Даны два вектора слов: $\text{кот} = (1, 2)$ и $\text{пёс} = (1.5, 2.2)$. Чему равно евклидово расстояние между ними? (Округлите до 2 знаков после запятой.)

Объяснение: $\sqrt{(1{,}5-1)^2 + (2{,}2-2)^2} = \sqrt{0.25 + 0.04} = \sqrt{0.29} \approx 0.54$ — небольшое расстояние, отражающее семантическую близость слов.

Что делает negative sampling, чтобы сделать обучение skip-gram практически осуществимым в большом масштабе?

Объяснение: Вместо нормировки по всему словарю negative sampling обучает бинарный классификатор различать одну истинную пару (целевое слово, контекст) от нескольких случайно сэмплированных негативных пар, затрагивая лишь малое фиксированное число строк словаря на шаг.

Как fastText обрабатывает слово, которого модель никогда не видела при обучении, в отличие от пословных Word2Vec или GloVe?

Объяснение: fastText представляет каждое слово как сумму эмбеддингов составляющих его символьных n-грамм, а не как единый непрозрачный вектор на слово, поэтому невиданное слово всё равно получает пригодный вектор, собранный из общих подсловных кусочков.