Как работает модель Word2Vec (CBOW vs Skip-gram)?

Word2Vec — это метод обучения векторных представлений слов (word embeddings), разработанный командой Google в 2013 году. Он основан на предположении, что значение слова определяется его контекстом ("You shall know a word by the company it keeps" — J.R. Firth). Вместо представления слов в виде one-hot векторов или индексов, Word2Vec отображает каждое слово в плотный вектор фиксированной размерности, в котором семантически близкие слова находятся рядом в пространстве.

Word2Vec использует нейросетевую архитектуру без скрытых слоёв и обучается на задаче предсказания слов или контекста. Существует две основных архитектуры: CBOW и Skip-gram.

Общая идея Word2Vec

Цель — построить такую функцию векторного представления слов, при которой:

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

  • Операции с векторами отражают семантические связи (напр. king - man + woman ≈ queen).

CBOW (Continuous Bag of Words)

CBOW предсказывает центральное слово, зная его контекст.

Пример:

В предложении:

The quick brown \___ jumps over the lazy dog

Контекст: [The, quick, brown, jumps, over]
Целевое слово: fox

CBOW пытается на основе среднего вектора контекстных слов предсказать целевое слово.

Архитектура:

  1. Вход: N слов контекста (например, по 2 слова слева и справа).

  2. Каждое слово переводится в one-hot вектор → умножается на матрицу эмбеддингов → получаем векторы.

  3. Среднее (или сумма) этих векторов → передаётся на выходной слой.

  4. Выходной слой — softmax по всем словам словаря → предсказывается вероятность для каждого слова.

  5. Обучение происходит с помощью обратного распространения ошибки (backpropagation).

Формально:

Обучается вероятность:

P(wt∣wt−c,…,wt−1,wt+1,…,wt+c)P(w_t \mid w_{t - c}, \ldots, w_{t - 1}, w_{t + 1}, \ldots, w_{t + c}) Skip-gram

Skip-gram делает наоборот: предсказывает контекстные слова по центральному слову.

Пример:

В том же предложении, если центральное слово fox, skip-gram попытается предсказать quick, brown, jumps, over.

Архитектура:

  1. Вход — одно слово (one-hot → эмбеддинг).

  2. Выход — softmax-классификатор, который предсказывает каждый контекстный токен по входному вектору.

  3. Для каждого слова в контексте создаётся отдельная пара (w_t, w_c).

Формально:

Обучается максимизация:

∏−c≤j≤c,j≠0P(wt+j∣wt)\prod_{-c \le j \le c, j \ne 0} P(w_{t+j} \mid w_t)

Каждая пара центр-контекст считается независимой.

Реализация вектора

Word2Vec обучает две матрицы весов:

  • W: входные эмбеддинги (input embeddings)

  • W': выходные эмбеддинги (output embeddings)

После обучения можно:

  • использовать только входные векторы (W)

  • усреднить W и W'

  • использовать W' (реже)

Обучение и оптимизация

Проблема softmax:

Обычный softmax требует вычислений по всему словарю, что очень дорого при большом количестве слов (~миллионы).

Решения:

  1. Negative Sampling (чаще всего):

    • Вместо расчета вероятности по всему словарю, модель обучается различать настоящие пары (w_center, w_context) и случайные "ложные" пары.

    • Используется логистическая регрессия:
      log⁡σ(vc⊤vo)+∑k=1KEwk∼Pn(w)[log⁡σ(−vc⊤vk)]\log \sigma (v_c^\top v_o) + \sum_{k=1}^K \mathbb{E}_{w_k \sim P_n(w)} [\log \sigma (-v_c^\top v_k)]
      где:

      • vcv_c: вектор центрального слова,

      • vov_o: вектор настоящего контекстного слова,

      • vkv_k: вектора случайных ("отрицательных") слов,

      • Pn(w)P_n(w): шумовое распределение (обычно униграммное с пониженными частотами).

  2. Hierarchical Softmax:

    • Представляет словарь как бинарное дерево (Huffman-дерево).

    • Вместо softmax вычисляется путь от корня до слова, что снижает сложность с O(V) до O(log V), где V — размер словаря.

Сравнение CBOW vs Skip-gram

Характеристика CBOW Skip-gram
Цель Предсказать слово по контексту Предсказать контекст по слову
--- --- ---
Скорость Быстрее Медленнее (обучает больше пар)
--- --- ---
Производительность Лучше на частых словах Лучше на редких словах
--- --- ---
Эффективность Меньше шума Улавливает больше семантики
--- --- ---
Качество на маленьких корпусах Похуже Лучше
--- --- ---

Пример

Допустим, у нас предложение:

He is learning deep learning techniques

С контекстом ширины 2, Skip-gram создаст пары:

  • (learning → is), (learning → He), (learning → deep), (learning → techniques)

CBOW, наоборот, соберёт входы: He, is, deep, techniques → и попытается предсказать: learning

Ключевые особенности Word2Vec

  • Легкая архитектура, быстрая реализация.

  • Обучение без аннотаций — не требует разметки.

  • Полученные эмбеддинги хорошо захватывают семантические и синтаксические отношения.

  • Работает как базовая модель для downstream-задач: классификация текста, кластеризация, тематическое моделирование, анализ тональности, и пр.

Использование (на Python)

С помощью библиотеки Gensim:

from gensim.models import Word2Vec
sentences = \[\["he", "is", "learning", "deep", "learning", "techniques"\]\]
model = Word2Vec(sentences, vector_size=100, window=2, min_count=1, sg=1) # sg=1 → Skip-gram, sg=0 → CBOW
print(model.wv\["learning"\]) # Вектор слова
print(model.wv.most_similar("learning"))

Word2Vec — это одна из первых моделей, позволивших перейти от разреженных представлений слов (bag-of-words) к плотным векторным эмбеддингам. Она остаётся важной базой в NLP, несмотря на развитие более мощных моделей вроде BERT или GPT.