Как работает модель 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 пытается на основе среднего вектора контекстных слов предсказать целевое слово.
Архитектура:
-
Вход: N слов контекста (например, по 2 слова слева и справа).
-
Каждое слово переводится в one-hot вектор → умножается на матрицу эмбеддингов → получаем векторы.
-
Среднее (или сумма) этих векторов → передаётся на выходной слой.
-
Выходной слой — softmax по всем словам словаря → предсказывается вероятность для каждого слова.
-
Обучение происходит с помощью обратного распространения ошибки (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.
Архитектура:
-
Вход — одно слово (one-hot → эмбеддинг).
-
Выход — softmax-классификатор, который предсказывает каждый контекстный токен по входному вектору.
-
Для каждого слова в контексте создаётся отдельная пара (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 требует вычислений по всему словарю, что очень дорого при большом количестве слов (~миллионы).
Решения:
-
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): шумовое распределение (обычно униграммное с пониженными частотами).
-
-
-
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.