Что такое Word2Vec и как он работает?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Word2Vec
Word2Vec — это алгоритм обучения представлений слов (word embeddings), разработанный в Google в 2013 году. Он преобразует слова в плотные векторы чисел, где семантически близкие слова находятся рядом в пространстве.
Основная идея
Широко известная идея: You shall know a word by the company it keeps (Дж. Лайонс). Это означает, что смысл слова определяется контекстом, в котором оно часто появляется.
Word2Vec использует эту идею: слова, которые часто появляются в одинаковом контексте, должны иметь похожие векторные представления.
Два основных варианта
1. CBOW (Continuous Bag of Words)
- Задача: предсказать целевое слово по окружающим словам
- Входные данные: слова контекста
- Выходные данные: целевое слово
- Быстрее обучается
- Работает лучше на маленьких наборах данных
2. Skip-gram
- Задача: предсказать контекст по целевому слову
- Входные данные: целевое слово
- Выходные данные: слова контекста
- Медленнее обучается
- Работает лучше на больших наборах данных
- Лучше захватывает редкие слова
Как работает Skip-gram?
Представим предложение: Король пошёл в королевство найти королеву
Если окно контекста = 2 слова слева и справа:
Текущее слово: пошёл Контекст: [король, в, королевство, найти]
Algorithm обучается предсказывать контекстные слова по целевому.
Архитектура нейросети
# Упрощённая архитектура Skip-gram
# Входной слой: one-hot вектор размера V (размер словаря)
# Скрытый слой: W matrix размера V x D (D - размер embedding)
# Выходной слой: W' matrix размера D x V
input_word -> [V x D] -> hidden_layer -> [D x V] -> output
матрица W матрица W'
Вектор размерности D (обычно 100-300) из скрытого слоя — это и есть embedding слова.
Обучение: Negative Sampling
Победа Word2Vec в том, что обучение эффективно. Если использовать стандартный softmax, приходится считать вероятность для всех V слов в словаре — очень медленно.
Negative Sampling (отрицательная выборка) решает эту проблему:
- Для каждой пары (целевое слово, контекстное слово)
- Берём случайные слова (например, 5-15 слов) как отрицательные примеры
- Обучаем модель максимизировать вероятность положительного примера
- И минимизировать вероятность отрицательных примеров
from gensim.models import Word2Vec
# Обучение Word2Vec
sentences = [
['король', 'пошёл', 'в', 'королевство'],
['королева', 'сидит', 'в', 'дворце'],
['король', 'и', 'королева', 'вместе']
]
model = Word2Vec(
sentences=sentences,
vector_size=100,
window=2,
min_count=1,
workers=4,
sg=1
)
# Получить embedding слова
king_vector = model.wv['король']
print(f"Embedding размер: {king_vector.shape}")
# Найти похожие слова
similar_words = model.wv.most_similar('король', topn=5)
print(f"Похожие на король: {similar_words}")
# Косинусное расстояние
similarity = model.wv.similarity('король', 'королева')
print(f"Сходство король-королева: {similarity:.4f}")
Свойства Word2Vec embeddings
Одно из самых удивительных свойств — это линейные соотношения:
embedding('король') - embedding('человек') + embedding('женщина')
приблизительно равно embedding('королева')
Это показывает, что embedding захватывает сложные семантические отношения.
# Проверка линейных соотношений
result = model.wv.most_similar(
positive=['король', 'женщина'],
negative=['человек'],
topn=5
)
# Результат содержит 'королева' первым!
Преимущества Word2Vec
- Быстрое обучение — эффективно даже на миллиардах слов
- Хорошие представления — capture семантики на удивление хорошо
- Низкая размерность — 100-300 измерений вместо одного горячего кодирования
- Трансфер обучение — pre-trained embeddings можно использовать как стартовую точку
- Простоту реализации — легко использовать через Gensim
Ограничения
- Игнорирует контекст целиком — одно слово = один вектор (омонимы проблемны)
- Синтаксис не учитывается — зависит только от co-occurrence
- Редкие слова плохо представлены — нужно много контекстов для качества
- Не работает с морфологией — король и королями — разные вектора
Современные альтернативы
- GloVe — объединяет методы матричной факторизации и Word2Vec
- FastText — расширение Word2Vec, работает с символами, лучше для морфологии
- ELMo — контекстные embeddings (зависят от предложения)
- BERT / GPT — трансформер-based embeddings, state-of-the-art
Word2Vec остаётся фундаментальным алгоритмом для понимания modern NLP. Даже если используешь BERT, понимание Skip-gram critical для вашего интервью.