Word2Vec — алгоритм получения плотных векторных представлений слов (word embeddings), разработанный Томасом Миколовым с коллегами в Google в 2013 году. Революционная идея: «расскажи мне, с кем ты дружишь, и я скажу, кто ты» — контекст определяет значение. Слова с похожими контекстами получают близкие векторы.
Два режима обучения
- Skip-gram — по центральному слову предсказывает соседние (контекстные). Хорошо работает на редких словах и больших корпусах
- CBOW (Continuous Bag of Words) — по контексту предсказывает центральное слово. Быстрее обучается, лучше на частых словах
Оба режима обучают нейросеть с одним скрытым слоем (shallow network). Веса этого слоя и становятся эмбеддингами.
Замечательные свойства
Главное открытие Миколова: арифметика векторов работает! Вектор(«король») − Вектор(«мужчина») + Вектор(«женщина») ≈ Вектор(«королева»). Семантическая близость: «кошка» и «собака» рядом, «Москва» и «Россия» рядом. Типы отношений кодируются одинаковыми направлениями в пространстве.
Параметры и обучение
Google News корпус: 100 млрд слов → 3 млн слов в словаре → 300-мерные векторы. Оригинальная модель Google — стандарт для многих задач. Отрицательная выборка (Negative Sampling) — ключевой трюк для эффективного обучения: вместо softmax по всему словарю бинарная классификация для нескольких «негативных» слов.
