Что такое word embeddings?

Word embeddings (векторные представления слов) — это способ представления слов в виде плотных числовых векторов фиксированной размерности, отражающих семантическое и синтаксическое сходство между словами. В отличие от one-hot encoding, где каждое слово — это разреженный и ортогональный вектор, word embeddings позволяют моделям "понимать" смысл и контекст слов, так как семантически близкие слова имеют похожие векторы.

Основная идея

Каждое слово представляется вектором из n измерений (обычно от 50 до 300), и расположение этих векторов в пространстве отражает лексическое и контекстное сходство:

  • Вектора слов «король» и «королева» будут близки.

  • Разница между «мужчина» и «женщина» будет аналогична разнице между «король» и «королева».

  • Геометрические операции с векторами отражают логические связи:
    python vec("король")−vec("мужчина")+vec("женщина")≈vec("королева")\\text{vec}("король") - \\text{vec}("мужчина") + \\text{vec}("женщина") ≈ \\text{vec}("королева")

Зачем нужны word embeddings

  1. Снижение размерности
    Вместо тысячи нулей (как в one-hot), каждое слово кодируется компактно: 100–300 значений с информацией о смысле.

  2. Семантическое сходство
    Модель может "понимать", что слова «автомобиль» и «машина» близки по значению.

  3. Контекстное использование
    Современные embeddings (например, BERT) учитывают контекст слова в предложении.

  4. Передача знаний
    Предобученные embeddings можно использовать повторно в разных NLP-задачах.

Как получаются эмбеддинги

Существует два класса методов:

1. Count-based (на частотах)

  • Строится матрица co-occurrence (совместных появлений слов), затем применяется SVD (разложение).

  • Пример: GloVe

2. Predictive (на предсказаниях)

  • Используются нейросети, обученные предсказывать слово по контексту или контекст по слову.

  • Примеры: Word2Vec, FastText, ELMo, BERT

Популярные модели embeddings

Word2Vec (Google, 2013)

  • Обучается предсказывать слово по контексту (CBOW) или контекст по слову (Skip-gram).

  • Вектора плотные, фиксированной длины (обычно 100–300).

  • Плюсы: быстрое обучение, хорошие результаты.

  • Минусы: не учитывает многозначность слов, каждое слово — один вектор.

GloVe (Stanford, 2014)

  • Использует глобальную статистику появления слов (матрица co-occurrence).

  • Слово представляется как вектор, отражающий статистические связи с другими словами.

  • Минусы: как и Word2Vec, GloVe не учитывает контекст.

FastText (Facebook, 2016)

  • Каждое слово представляется как сумма эмбеддингов символов (n-грамм).

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

  • Особенно полезен для морфологически богатых языков (в т.ч. русского).

ELMo, BERT, GPT — контекстные эмбеддинги

  • Учитывают положение слова в предложении.

  • Одно и то же слово («банк») будет иметь разные вектора в зависимости от контекста.

  • Построены на основе трансформеров.

  • Обычно не обучаются "с нуля", а используются как предобученные модели (Transfer Learning).

Формальное описание

Допустим, у нас есть словарь из VV слов, и мы хотим получить для каждого слова вектор размерности dd:

E∈RV×dE \in \mathbb{R}^{V \times d}

  • Каждое слово wiw_i имеет вектор-эмбеддинг ei⃗∈Rd\vec{e_i} \in \mathbb{R}^d

  • Матрица EE обучается либо отдельно, либо как часть нейросети.

Использование эмбеддингов

1. Обучение с нуля

from keras.models import Sequential
from keras.layers import Embedding
model = Sequential()
model.add(Embedding(input_dim=10000, output_dim=100, input_length=50)) # 10k слов, 100-мерные вектора

2. Использование предобученных embeddings

import gensim.downloader as api
model = api.load("word2vec-google-news-300")
vector = model\["king"\] # вектор слова
similar_words = model.most_similar("king", topn=5)

3. Встроенные эмбеддинги в трансформерах (BERT и др.)

from transformers import AutoTokenizer, AutoModel
import torch
tokenizer = AutoTokenizer.from_pretrained("bert-base-multilingual-cased")
model = AutoModel.from_pretrained("bert-base-multilingual-cased")
inputs = tokenizer("Пример текста", return_tensors="pt")
outputs = model(\*\*inputs)
embeddings = outputs.last_hidden_state # \[batch, seq_len, hidden_size\]

Методы сравнения слов

  1. Косинусное расстояние — основная метрика близости векторов:
cos(θ)=A⃗B⃗∣∣A⃗∣∣⋅∣∣B⃗∣∣\\cos(\\theta) = \\frac{\\vec{A} \\cdot \\vec{B}}{||\\vec{A}|| \\cdot ||\\vec{B}||}  
  1. Евклидово расстояние — менее популярно из-за зависимости от масштаба.

Примеры аналогий

Word embeddings позволяют находить аналогии между словами:
model.most_similar(positive=\['королева', 'мужчина'\], negative=\['женщина'\])
\# Вывод: "король"

Визуализация

Для интерпретации можно уменьшить размерность (PCA, t-SNE) и построить 2D/3D карту слов:

from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
words = \["король", "королева", "мужчина", "женщина"\]
vectors = \[model\[w\] for w in words\]
pca = PCA(n_components=2)
result = pca.fit_transform(vectors)
plt.scatter(result\[:, 0\], result\[:, 1\])
for i, word in enumerate(words):
plt.annotate(word, xy=(result\[i, 0\], result\[i, 1\]))
plt.show()

Преимущества word embeddings

  • Семантическое моделирование: близкие по смыслу слова имеют схожие представления.

  • Обучаемость: можно дообучать на своей предметной области.

  • Переносимость: один и тот же эмбеддинг может использоваться в разных задачах.

  • Контекстуальность (в современных моделях): один и тот же токен в разных предложениях может иметь разный вектор.

Ограничения классических эмбеддингов

  • Не учитывают контекст (Word2Vec, GloVe)

  • Один вектор на слово (вне зависимости от значения)

  • Уязвимы к OOV (неизвестным словам), за исключением FastText

  • Зависимость от корпуса: на специализированных тематиках могут плохо работать

Word embeddings представляют собой мощный инструмент в NLP, позволяющий переходить от простого индексирования слов к более "понимающим" машинам, способным оперировать смыслами, аналогиями и связями между словами. С развитием трансформеров понятие embeddings расширилось до контекстных и даже мультиязычных представлений.