Векторные представления слов (Word Embeddings) — это числовые векторы, которые кодируют семантическое и синтаксическое значение слов так, что слова с похожим значением имеют близкие векторные представления в многомерном пространстве.
Представьте, что каждое слово — это точка в пространстве. Чем ближе точки, тем более «похожи» слова.
Пример 1. Векторное представление слов (упрощенно):
- «Кошка» = [0.7, 0.3]
- «Собака» = [0.6, 0.4]
- «Самолет» = [-0.2, -0.8]
Здесь «кошка» и «собака» близки, а «самолет» далеко от них.
Пример 2. Расчет семантической близости слов
В современных NLP слова кодируются как векторы в многомерном пространстве (обычно от 50 до 300 измерений), и это позволяет компьютеру работать с семантикой и синтаксисом языка математически. Разберем ключевые аспекты.
Даны векторы слов:
- кот = [1, 0.2]
- собака = [0.8, 0.3]
- мышь = [0.3, 0.9]
Требуется:
- Найти косинусную близость между векторами:
- кот и собака
- кот и мышь
- Какие слова семантически ближе?

Пример 3. Анализ текста с помощью векторов вручную
Если ты хочешь разобраться как можно работать с векторными представлениями слов
1. Создай мини-модель (на примере 3 слов)
Возьмём текст:
«Кошка ловит мышку. Собака гонит кошку.»
Шаг 1: Составь таблицу совместных встречаемости
Записываешь, сколько раз слова стоят рядом (в окне ±1 слово):
| Слово | кошка | ловит | мышку | собака | гонит |
|---|---|---|---|---|---|
| кошка | 0 | 1 | 0 | 1 | 0 |
| ловит | 1 | 0 | 1 | 0 | 0 |
| мышку | 0 | 1 | 0 | 0 | 0 |
| собака | 1 | 0 | 0 | 0 | 1 |
| гонит | 0 | 0 | 0 | 1 | 0 |
Пояснение:
- «Кошка» и «ловит» встретились 1 раз → ставим 1 в соответствующую ячейку.
- «Кошка» и «мышку» не стоят рядом → 0.
2. Упрости таблицу (аналог PCA)
Цель: Уменьшить размерность с 5D (по числу слов) до 2D, чтобы нарисовать на бумаге.
Шаг 2: Выдели главные признаки
- Признак 1: Животное (кошка, собака, мышка).
- Признак 2: Действие (ловит, гонит).
Шаг 3: Назначь координаты
Придумай примерные значения для каждого слова:
| Слово | Признак 1 (Животное) | Признак 2 (Действие) |
|---|---|---|
| кошка | 0.9 | 0.1 |
| собака | 0.8 | 0.2 |
| мышку | 0.6 | -0.3 |
| ловит | -0.2 | 0.7 |
| гонит | -0.1 | 0.8 |
Как придумать числа?
- Чем сильнее слово связано с животными, тем больше Признак 1.
- Чем больше связано с действиями, тем больше Признак 2.
3. Нарисуй график
Шаг 4: Построй оси и отметь точки
- Ось X: Признак 1 (Животное).
- Ось Y: Признак 2 (Действие).
Что видно:
- «Кошка» и «собака» близки по оси X (оба животных).
- «Ловит» и «гонит» близки по оси Y (оба действия).
4. Проверь семантические аналогии
Пример:
«Кошка относится к мышке, как собака к …?»
Шаг 5: Реши вручную
- Найди разницу векторов:
"кошка" - "мышка" ≈ [0.9 - 0.6, 0.1 - (-0.3)] = [0.3, 0.4] - Прибавь к «собака»:
"собака" + [0.3, 0.4] ≈ [0.8 + 0.3, 0.2 + 0.4] = [1.1, 0.6] - Посмотри, какое слово ближе всего к
[1.1, 0.6]:- «кошка»:
[0.9, 0.1]→ далеко. - «собака»:
[0.8, 0.2]→ ближе. - Вывод: Собака тоже гоняет кого-то (например, «кошку»).
- «кошка»:
Ограничения ручного метода
- Мало данных: На больших текстах таблица станет огромной.
- Неточность: Числа назначаются «на глаз», а не вычисляются.
- Сложные аналогии: Вручную трудно вычислить
король - мужчина + женщина.
Вывод:
- Составил таблицу встречаемости слов.
- Назначил признаки (например, «животное» и «действие»).
- Нарисовал график и увидел кластеры.
- Проверил аналогии через разность векторов.
Основные идеи
Свойства векторного пространства слов
- Семантическая упорядоченность (близость = схожесть). Слова с похожим значением расположены близко в векторном пространстве. Косинусная близость.
- Алгебраическая структура (аналогии через операции). Векторы сохраняют семантические и синтаксические отношения.
- Кластеризация по темам. Образуют группы слов одной тематики. Методы кластеризации (K-means, DBSCAN).
- Инвариантность к морфологии. Формы одного слова («бегать», «бегал», «бег») имеют близкие векторы.
- Переносимось признаков. Векторы, обученные на одном корпусе (например, Википедия), работают для других задач (анализ отзывов).
One-hot векторы: просто, но неэффективно
Как это работало:
- Каждому слову в словаре присваивался вектор размером
V(гдеV— размер словаря). - Вектор состоял из нулей и одной единицы на позиции слова:
- «Кошка» =
[1, 0, 0, ..., 0] - «Собака» =
[0, 1, 0, ..., 0]
- «Кошка» =
Проблемы:
- Гигантская размерность: Для словаря в 100K слов — вектор из 100K нулей и одной 1.
- Нет сходства между словами: Все векторы ортогональны.
Пример: Косинусное сходство между «кошкой» и «собакой» = 0, хотя они семантически близки. - Не учитывает контекст: Слово «ключ» (дверной vs музыкальный) имеет одинаковое представление.
Плотные (dense) векторы: Word Embeddings
Решение:
Сжимаем огромные one-hot векторы в плотные низкоразмерные (обычно 50–300 значений), где:
- Каждое число в векторе — это «признак» слова (например, «живое», «может лаять», «летает»).
- Слова с похожим значением имеют близкие векторы.
Пример плотных векторов:
- «Кошка» =
[0.7, -0.2, 0.3, ..., 0.1](размерность 300) - «Собака» =
[0.6, -0.1, 0.4, ..., 0.2]
Косинусное сходство ≈ 0.8 (близко!)
Методы получения Word Embeddings
- Word2Vec (Mikolov et al., 2013)
- Skip-gram: Предсказывает контекстные слова по заданному слову.
- CBOW (Continuous Bag of Words): Предсказывает слово по контексту.
- Обучение через нейросеть с одним скрытым слоем.
- GloVe (Global Vectors, 2014)
- Использует статистику совместной встречаемости слов во всем корпусе.
- Оптимизирует матрицу совместных вероятностей.
- FastText (Bojanowski et al., 2017)
- Учитывает морфологию: слова разбиваются на n-граммы символов.
- Полезно для редких слов и языков с богатой морфологией (например, русский).
Эволюция до контекстных векторов
Современные модели на основе Transformer (например, BERT, GPT, RoBERTa) генерируют разные векторные представления для одного слова в разных контекстах. Это революционное отличие от классических методов (Word2Vec, GloVe), где слово всегда кодировалось одним вектором.
- Проблема: Плотные векторы всё ещё статичны (у «ключа» один вектор).
- Решение: Transformer-модели (BERT, GPT), где вектор зависит от контекста:
- «Ключ от двери» →
[0.9, -0.1, ...] - «Музыкальный ключ» →
[-0.3, 0.8, ...]
- «Ключ от двери» →
Как это реализовано в Transformer-моделях?
a) Механизм внимания (Self-Attention)
- Модель анализирует все слова в предложении одновременно.
b) Динамические векторы
- Выходной вектор слова — это комбинация его собственного embedding + контекста от соседей.
Преимущества контекстных представлений
- Учёт многозначности: Одно слово в разных значениях → разные векторы.
- Улучшение качества задач NLP:
- Точность в классификации, NER (распознавание именованных сущностей), машинном переводе.
- Работа с редкими словами: Даже если слово встречалось редко, его вектор адаптируется к контексту.
Примеры моделей
| Модель | Особенность | Пример использования |
|---|---|---|
| BERT | Двунаправленный контекст | Классификация, QA |
| GPT | Односторонний контекст (слева направо) | Генерация текста |
| RoBERTa | Оптимизированная версия BERT | Анализ тональности |
| XLNet | Учитывает все перестановки слов | Сложные NLP-задачи |
Ограничения
- Вычислительная сложность: Требуют GPU и много памяти.
- Необходимость тонкой настройки (fine-tuning): Предобученные модели нужно дообучать под конкретную задачу.
Быстрый старт:
- Платформа Hugging Face с готовыми моделями.
- Пример: BERT для русского языка.
Визуализация
Чтобы увидеть векторы в 2D/3D, используют методы снижения размерности:
- PCA (линейный метод),
- t-SNE (нелинейный, подчеркивает кластеры),
- UMAP (аналог t-SNE с сохранением глобальной структуры).
PCA (Principal Component Analysis)
Как работает?
- Находит главные направления (оси), где данные меняются сильнее всего.
- Проецирует векторы на эти оси, отбрасывая менее важные измерения.
Плюсы:
✅ Быстро работает даже на тысячах слов.
✅ Сохраняет глобальную структуру (например, общие группы: «животные», «города»).
Минусы:
❌ Линейный метод — плохо разделяет сложные нелинейные кластеры.
t-SNE (t-Distributed Stochastic Neighbor Embedding)
Как работает?
- Оптимизирует расположение точек в 2D/3D, чтобы похожие в многомерном пространстве слова стали ближе на графике.
- Использует вероятности: «Если слова часто встречались в одном контексте, они должны быть рядом».
Плюсы:
✅ Лучше выделяет локальные кластеры (например, «яблоко», «груша», «апельсин»).
Минусы:
❌ Медленнее PCA (не подходит для очень больших данных).
❌ Глобальные расстояния могут искажаться (например, размер кластеров не всегда важен).
| Метод | Лучше подходит для… | Размер данных | Скорость |
|---|---|---|---|
| PCA | Общего понимания структуры | Большие (>10K слов) | Быстро |
| t-SNE | Детального анализа кластеров | Малые/средние (<5K слов) | Медленно |
Примеры использования
- Классификация текстов (сентимент-анализ).
- Поиск синонимов, машинный перевод.
- Похожесть документов (через усреднение векторов слов).
Классические работы
📜 Word2Vec (2013)
- Авторы: Tomas Mikolov, Kai Chen, Greg Corrado, Jeffrey Dean (Google)
- Статьи:
- «Efficient Estimation of Word Representations in Vector Space» (arXiv:1301.3781)
- «Distributed Representations of Words and Phrases and their Compositionality» (arXiv:1310.4546)
- Суть: Предложены архитектуры Skip-gram и CBOW, которые обучают векторы, предсказывая контекстные слова.
Word2vec в картинках: https://habr.com/ru/articles/446530/
📜 GloVe (2014)
- Авторы: Jeffrey Pennington, Richard Socher, Christopher Manning (Stanford)
- Статья: «GloVe: Global Vectors for Word Representation» (arXiv:1405.4053)
- Суть: Комбинирует идеи матрицы совместной встречаемости и оптимизации через нейросети.
📜 FastText (2017)
- Авторы: Piotr Bojanowski, Edouard Grave, Armand Joulin, Tomas Mikolov (Facebook AI)
- Статья: «Enriching Word Vectors with Subword Information» (arXiv:1607.04606)
- Суть: Учитывает морфологию слов (n-gram символов), что полезно для редких слов.
Контекстные Embeddings
📜 ELMo (2018)
- Авторы: Matthew Peters, Mark Neumann (AI2)
- Статья: «Deep Contextualized Word Representations» (arXiv:1802.05365)
- Суть: Первая модель, создающая разные векторы для одного слова в зависимости от контекста.
📜 BERT (2018)
- Авторы: Jacob Devlin, Ming-Wei Chang (Google)
- Статья: «BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding» (arXiv:1810.04805)
- Суть: Использует Transformer для создания контекстно-зависимых векторов.
Теоретические основы
- Distributional Hypothesis (Zellig Harris, 1954):
«Слова, встречающиеся в одинаковых контекстах, имеют схожие значения». - Neural Network Language Models (Bengio et al., 2003):
Первые нейросетевые модели, предсказывающие слова через векторы.
Библиотеки с русской документацией:
- Natasha (для русского языка): github.com/natasha