Диагностика Mock-интервью
Главная · Языковые модели: от n-грамм до трансформера

Эмбеддинги и word2vec

Как превратить слово в вектор так, чтобы геометрия отражала смысл: близкие по смыслу слова — рядом, а «король − мужчина + женщина» приземляется около «королевы». Эмбеддинги — фундамент семантического поиска, RAG и первый слой любого трансформера.

Интуиция

Модели нужны числа вместо слов. Наивный вариант — one-hot вектор: длина равна размеру словаря, единица стоит на позиции слова, остальное нули. Проблема в том, что такое представление бессмысленно: любые два one-hot вектора ортогональны и равноудалены. «Кот» одинаково далёк и от «пса», и от «карбюратора» — геометрия не знает о смысле ничего.

Выход подсказывает дистрибутивная гипотеза (distributional hypothesis): смысл слова определяется его типичными контекстами. Перефразируя классиков: «скажи мне, с кем рядом слово стоит, — и я скажу, что оно значит». Слова «мяукает», «пушистый» и «кормить» окружают и «кота», и «кошку» — значит, эти слова должны оказаться рядом и в векторном пространстве.

Как работает word2vec

Word2vec (2013) превращает гипотезу в задачу обучения. Два режима:

Сеть крошечная: слой эмбеддингов и выходной слой. Хитрость в том, что нам не нужны её предсказания — нужен побочный продукт. Если у двух слов похожие контексты, им выгодно иметь близкие векторы: иначе не получится одинаково хорошо предсказывать одних и тех же соседей. Обучение само стягивает похожие слова в плотные кластеры. Итоговый эмбеддинг (embedding) слова — строка обученной матрицы, плотный вектор размерности 100–300 вместо разреженного one-hot на весь словарь.

Похожесть векторов меряют косинусной близостью (cosine similarity) — углом, а не длиной:

cos(u, v) = (u · v) / (|u| · |v|)

1 — векторы сонаправлены, 0 — «ничего общего», −1 — противоположны.

Самое знаменитое свойство — векторная арифметика: король − мужчина + женщина ≈ королева. Направление «мужское → женское» оказывается устойчивым вектором, одинаковым для многих пар. Так же работают «страна → столица», единственное → множественное число и десятки других отношений.

💡 Ключевая мысль Смысл можно закодировать геометрией: обучение по контекстам само раскладывает слова так, что близость векторов = близость смысла, а устойчивые направления = отношения между понятиями.

Ниже — игрушечная 2D-карта из 18 слов (настоящие эмбеддинги имеют сотни измерений — это лишь наглядная проекция). Кликайте по словам и запускайте векторную арифметику.

Ограничения и наследники

У word2vec один вектор на слово — и это фундаментальное ограничение. «Ключ» от двери и гаечный «ключ» слипаются в один усреднённый вектор; многозначность (polysemy) статическому эмбеддингу недоступна. Решение принесли контекстные эмбеддинги (contextual embeddings) трансформеров: вектор токена пересчитывается с учётом всего предложения через механизм внимания, поэтому «ключ» в разных фразах получает разные векторы.

Идея эмбеддингов никуда не делась и внутри LLM: первый слой любого трансформера — это таблица эмбеддингов токенов (после токенизации каждый id токена меняется на свою строку этой матрицы). Разница лишь в том, что дальше эти векторы не застывают, а прокачиваются через десятки слоёв внимания, впитывая контекст. Word2vec в этом смысле — «нулевой слой» современных моделей, обученный отдельно.

Сегодня эмбеддинги — рабочая лошадка прода: специальные модели-энкодеры кодируют целые предложения и фрагменты документов в одно пространство. Запрос и документы превращаются в векторы, ближайшие соседи по косинусу — кандидаты в ответ. На этом стоит семантический поиск, дедупликация, кластеризация обращений и весь RAG.

⚠️ Подводный камень Эмбеддинги из разных моделей живут в разных системах координат: сравнивать косинусом вектор из модели A с вектором из модели B бессмысленно, даже если размерность совпадает. Векторный индекс и запросы к нему должны кодироваться одной и той же моделью — и одной её версией; смена модели означает переиндексацию всей базы.
🎤 На собеседовании
  • «Чем плох one-hot?» — все слова равноудалены, смысла в геометрии нет, размерность равна словарю.
  • «Почему „кот“ и „пёс“ близки, если рядом в тексте почти не встречаются?» — важна не совместная встречаемость, а похожесть контекстов: соседи у них общие.
  • «Skip-gram против CBOW?» — skip-gram предсказывает соседей по слову (лучше для редких слов), CBOW — слово по соседям (быстрее).
  • «Чем контекстные эмбеддинги лучше статических?» — многозначные слова получают разные векторы в зависимости от предложения.