Обработка естественного языка
Word Embeddings: Word2Vec, GloVe
2013 год, Google Brain: Томас Миколов замечает странную закономерность в 300-мерном пространстве векторов. `vector('king') - vector('man') + vector('woman') ≈ vector('queen')`. Точность: 98.7%. Этот момент переворачивает NLP: оказывается, семантика кодируется как геометрия. Отношения между словами - это направления в пространстве. Word2Vec с тех пор скачали десятки миллионов раз; идея dense embeddings стала фундаментом для BERT, GPT и всех последующих языковых моделей.
- **Spotify**: Word2Vec на последовательностях треков ('track2vec') - эмбеддинги треков для рекомендаций Discover Weekly
- **Airbnb**: 'listing2vec' на последовательностях бронирований - семантическое пространство для поиска похожего жилья
- **Pinterest**: 'pin2vec' для visual content recommendation - аналогия из текстовой семантики перенесена на изображения
Предварительные знания
- Понимание токенизации и предобработки текста
- Bag of Words и TF-IDF: разреженные представления текста
- Основы линейной алгебры: векторы, скалярное произведение, косинусное расстояние
Томас Миколов (2013)
В январе 2013 года Томас Миколов с коллегами из Google опубликовал две статьи подряд: 'Efficient Estimation of Word Representations in Vector Space' (Word2Vec) и 'Distributed Representations of Words and Phrases and their Compositionality'. До этого существовали LSA (1990) и NNLM (2003), но они были слишком медленными. Миколов убрал hidden layer, добавил negative sampling - и обучение на Google News корпусе (100B слов) заняло дни вместо месяцев. Код был открыт в том же году. Stanford отреагировал GloVe в 2014, Facebook - FastText в 2017. За 4 года индустрия полностью перешла от sparse bag-of-words к dense embeddings. Word2Vec запустил эру distributed representations в NLP, напрямую предшествуя Transformer архитектуре и современным LLM
Word2Vec: нейросетевые эмбеддинги
Word2Vec (Mikolov, 2013) обучает плотные векторные представления слов через предсказание контекста. Два варианта: **Skip-gram** - по центральному слову предсказать контекстные; **CBOW** - по контекстным словам предсказать центральное. Ключевое свойство: геометрические отношения в пространстве отражают семантические. `king - man + woman ≈ queen`.
**Negative sampling** критичен для эффективности: вместо softmax по всему словарю (миллионы слов) - бинарная классификация для K=5-20 случайных негативных слов. Сэмплинг частотно-взвешенный: P(w) ∝ freq(w)^(3/4) - это уменьшает доминирование частых слов.
Почему Word2Vec использует negative sampling вместо softmax по всему словарю?
GloVe: матрица совместных вхождений
GloVe (Pennington et al., Stanford, 2014) - Global Vectors for Word Representation. Вместо локального контекста скользящего окна (Word2Vec) использует **глобальную матрицу совместных вхождений** X, где X_ij - сколько раз слово i встречается в контексте j в корпусе. Цель: произведение векторов слова i и j должно приближать log(X_ij).
GloVe находит аналогии так же хорошо, как Word2Vec, но обучается быстрее на предподсчитанной матрице. Финальный эмбеддинг = среднее w + wt (word + context vectors). На benchmark'е **word analogy** (Mikolov, 2013) GloVe достиг 75% accuracy vs 65% у Word2Vec при одинаковом размере корпуса.
В чём ключевое архитектурное отличие GloVe от Word2Vec?
FastText: subword эмбеддинги
FastText (Bojanowski et al., Facebook AI, 2017) расширяет Word2Vec на уровень **символьных n-gram**. Вместо одного вектора на слово, слово представляется как сумма векторов своих n-gram (n=3-6). Например, слово 'running' = <ru + run + unn + nni + nin + ing + ng> + <running>. Это решает проблему OOV (out-of-vocabulary) слов.
FastText превосходит Word2Vec и GloVe на морфологически богатых языках (русский, финский, турецкий) - много уникальных форм слов. На английском преимущество меньше. Facebook использует FastText для language identification (176 языков) и многоязычных text classification задач.
Почему FastText лучше Word2Vec для морфологически богатых языков (русский, немецкий)?
Геометрия эмбеддингов и аналогии
Ключевое открытие Word2Vec - семантические отношения кодируются как геометрические направления в пространстве. `king - man + woman = queen`. `Paris - France + Italy = Rome`. Это происходит потому, что слова в похожих контекстах получают близкие векторы. **Cosine similarity** - стандартная мера близости: cos(a, b) = (a·b) / (|a||b|).
**Bias в эмбеддингах**: Word2Vec обучается на человеческих текстах и усиливает bias. `doctor - man + woman = nurse`. `programmer - man + woman = homemaker`. Это техническая проблема с серьёзными последствиями для production систем. Методы дебиасинга: Hard Debiasing (Bolukbasi, 2016), Sent-Debiasing.
BERT и GPT эмбеддинги заменили Word2Vec/GloVe и они больше не используются
Static embeddings (Word2Vec, GloVe, FastText) быстрее, легче и достаточны для многих задач: keyword extraction, similarity matching, multilingual classification
BERT требует GPU inference и сотни миллисекунд; FastText работает на CPU за микросекунды - это критично для real-time систем с миллиардами запросов
Почему `king - man + woman ≈ queen` работает в пространстве Word2Vec эмбеддингов?
Связанные темы
Плотные эмбеддинги, придуманные здесь, ведут к контекстным представлениям и далее к трансформерам:
- Bag of Words и TF-IDF — Разреженные представления, которые word2vec заменил плотными векторами
- Контекстные эмбеддинги: ELMo — Следующий шаг: один вектор на слово сменяется вектором, зависящим от контекста
- Эмбеддинги в AI-инженерии — Те же векторы лежат в основе семантического поиска и RAG
Ключевые идеи
- **Word2Vec** (skip-gram/CBOW): предсказание контекста через negative sampling, семантика как геометрия пространства
- **GloVe**: глобальная матрица совместных вхождений - weighted least squares вместо local window prediction
- **FastText**: subword n-gram эмбеддинги - OOV слова, морфологически богатые языки, 176 языков
- **Аналогии**: `king - man + woman = queen` - семантические отношения как геометрические оффсеты
Вопросы для размышления
- Как частотное взвешивание P(w) ∝ freq(w)^0.75 в negative sampling влияет на качество эмбеддингов для редких слов?
- Почему GloVe суммирует word и context vectors в финальном эмбеддинге вместо использования только word vector?
- Как 'king - man + woman = queen' объяснить через дистрибутивную семантику: почему контексты слова 'king' и 'woman' дают 'queen'?