~6m10:03
Скрытый слой

Эмбеддинги на пальцах: рисуем 3D-карту смыслов

1 нояб. 2026 г.

Read: ~6m · You save: 4 min

Эмбеддинги на пальцах: рисуем 3D-карту смыслов

Как поиск понимает, что «починить кран» и «устранение протечки смесителя» про одно и то же? Разбираем эмбеддинги, карту смыслов и косинусное сходство на пальцах.

Поисковый запрос «Как починить кран?» может вернуть первой ссылкой статью об устранении протечки смесителя. Ни одного общего слова в запросе и тексте нет. Причина в том, что языковые модели работают не с буквами, а с векторами, которые кодируют смысл. Такие векторы называют эмбеддингами. Они лежат в основе поиска, рекомендаций и чат-ботов по документам.

От текста к числам

Компьютер работает только с числами, поэтому текст сначала делят на токены. Токен — это слово или часть слова. Каждому токену присваивают номер в словаре. Например, слову «кошка» может соответствовать номер 18342, слову «кот» — номер 51907.

Номер не отражает смысл. В числовом порядке «кошка» и «кот» стоят далеко друг от друга, а соседом «кошки» может оказаться «кошелёк». Складывать и сравнивать такие номера бессмысленно.

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

Нужно представление, которое будет коротким, плотным и расположит близкие по смыслу слова рядом. Таким представлением и является эмбеддинг. Термин происходит от английского embedding, что буквально означает «вложение». Слова как бы вкладываются в пространство.

Пространство смыслов

Представим карту, где каждое слово имеет координаты. Одна ось показывает, насколько объект живой. Другая — насколько он большой. Мышь, кошка, собака и слон располагаются справа, по росту. Чайник и грузовик — слева.

В этой системе «кошка» описывается двумя числами: 0,9 и 0,2. Их можно изобразить точкой или стрелкой из центра координат. Стрелка называется вектором, поэтому эмбеддинги также называют векторами.

Двух осей недостаточно. «Тигр» и «кошка» на такой карте почти совпадают. Добавление третьей оси («домашний» или «дикий») разводит их. Каждая новая ось добавляет число и различие, которое модель может учитывать.

Реальные модели используют сотни и тысячи осей. Размерность эмбеддингов составляет 768, 1024 или более 3000 чисел. Такое пространство невозможно нарисовать, но математика в нём совпадает с математикой плоской карты.

Важно учитывать, что в реальной модели оси не имеют названий вроде «живое» или «большое». Модель самостоятельно решает, как распределить смысл по числам. Одно свойство обычно распределено по многим осям одновременно. Значение имеет положение точки в целом, а не отдельное число.

Как измерить сходство

Расстояние между точками часто не отражает близость по смыслу. Длина вектора зависит от факторов, не связанных со значением слова, например от частоты слова в обучающих данных. Вектор может стать длиннее, при этом его направление не изменится.

Поэтому сходство измеряют углом между векторами, точнее косинусом угла:

  • векторы направлены в одну сторону: косинус равен 1;
  • векторы перпендикулярны: косинус равен 0, общего смысла нет;
  • векторы направлены в противоположные стороны: косинус равен −1.

Косинусное сходство вычисляют так: перемножают соответствующие координаты векторов, складывают результаты и делят на произведение длин векторов.

Для слов «кошка» и «котёнок» значение будет высоким, для «кошки» и «собаки» — ниже, для «кошки» и «холодильника» — низким.

Неочевидная деталь: в реальных моделях даже не связанные между собой тексты часто дают значение не 0, а, например, 0,3. Поэтому оценивают не абсолютное значение, а относительное: какая пара ближе, а какая дальше.

Главное: эмбеддинг — это точка в пространстве смыслов. Похожесть — это угол между точками, если смотреть из центра.

Как модель расставляет точки

Никто не задаёт координаты слов вручную. Метод опирается на идею лингвиста Джона Руперта Фёрта, сформулированную в 1957 году: слово можно понять по его окружению.

Рассмотрим фразы с пропуском. На место пропуска подходят «чай», «кофе» и «какао». Слова с похожим окружением обычно имеют близкий смысл, поэтому их точки должны располагаться рядом.

В 2013 году компания Google разработала модель Word2Vec, которая сделала эмбеддинги широко известными. Процесс обучения устроен следующим образом:

  1. Каждому слову присваивается случайная точка.
  2. Модель проходит по большому массиву текста и учится предсказывать, какие слова стоят рядом.
  3. Каждая ошибка слегка смещает точки: соседи сближаются, случайные пары расходятся.
  4. После миллиардов таких смещений случайное облако превращается в структурированную карту.

В результате напитки группируются с напитками, животные — с животными, города — с городами. Модель не получала определения понятия «напиток». Она выявила эту группу из способа, которым люди пишут тексты.

Далее обнаружилось свойство, которое удивило даже авторов методики: направления в пространстве начинают соответствовать отношениям между словами. Если взять вектор «король», вычесть «мужчину» и прибавить «женщину», ближайшим словом, за исключением исходных, окажется «королева». Аналогично работают пары «страна» и «столица». В современных моделях такая арифметика выполняется менее точно, но принцип сохраняется.

Таблица эмбеддингов

Первый шаг любой языковой модели — таблица эмбеддингов. В ней есть строка для каждого токена словаря. Модель получает номер токена и извлекает соответствующую строку. Так слово превращается в вектор.

Например, у Llama 3 с 8 млрд параметров словарь содержит 128 тыс. токенов, а каждый эмбеддинг состоит из 4096 чисел. Одна таблица включает более полумиллиарда чисел, и все они определяются в процессе обучения.

У таблицы есть ограничение. Слово «ключ» имеет одну строку, то есть одну точку, для всех значений: «ключ от двери», «скрипичный ключ», «родниковый ключ».

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

На последнем этапе модель вычисляет вероятности следующего слова на основе последнего вектора. Таким образом, любой ответ нейросети начинается с векторов и заканчивается ими.

От слова к тексту

Для поиска недостаточно одного слова: требуется сравнивать фразы и документы. Модель выдаёт вектор на каждый токен, поэтому необходимо получить один вектор для всего текста. Существует два основных способа:

  • Усреднение (mean pooling): вычисляется среднее значение векторов всех токенов.
  • Служебный токен: в начало текста добавляется специальный токен, а модель учится собирать в него смысл всей фразы.

Такой процесс называют пулингом.

Обычная языковая модель не обучается созданию векторов для поиска. Для этого применяют отдельные модели эмбеддингов, которые дообучают на миллионах пар. Вопрос и правильный ответ притягиваются друг к другу, случайные пары отталкиваются. Этот метод называется контрастивным обучением.

После такого обучения фразы «как починить кран» и «устранение протечки смесителя» оказываются рядом. Так объясняется результат поиска из начала статьи.

Области применения

Семантический поиск. Документы заранее преобразуют в векторы и сохраняют в базе данных. Запрос также превращается в вектор, после чего система находит ближайшие векторы. Такие хранилища называют векторными базами данных.

Чат-боты по документам (RAG). Документы делятся на фрагменты, которые преобразуются в векторы. При вопросе система находит ближайшие фрагменты и передаёт их языковой модели. Модель формирует ответ на основе найденного текста, а не только на основе данных, полученных при обучении.

Рекомендации и группировка. Системы определяют похожие товары и фильмы, а также группируют тысячи отзывов по темам без ручной разметки. Во всех случаях выполняется одна операция: поиск ближайших векторов.

Мультиязычные модели. В таких моделях слова «кошка», cat и Katze попадают почти в одну точку пространства. Смысл одинаков, языки различаются.

Мультимодальные модели. Модели типа CLIP размещают в одном пространстве тексты и изображения. Фотография кота оказывается рядом с текстом «фото кота». На этом принципе основан поиск изображений по описанию.

Практическая проверка

Проверку провели на модели BGE-M3. Она хорошо работает с русским языком и запускалась локально через Ollama. Скрипт выполняет три действия: отправляет фразы в модель, получает векторы и вычисляет косинусное сходство каждой пары.

Набор фраз включал две фразы о кране, две о кошках и одну о погоде. Каждая фраза была представлена 1024 числами.

Результаты:

  • Пары «кран» и «смеситель» показали высокое сходство, хотя общих слов у них нет.
  • «Кошка на подоконнике» и «котёнок у окна» также показали высокое сходство.
  • Фраза о погоде имела низкое сходство со всеми остальными фразами.

Поиск по запросу «как починить кран?» вернул текст о протечке смесителя первым, а текст о погоде — последним. Таким образом, семантический поиск реализован менее чем в тридцати строках кода.

Ограничения эмбеддингов

Логика распознаётся плохо. Эмбеддинги хорошо определяют тему, но плохо различают смысловые противоположности. Фразы «Я люблю кошек» и «Я не люблю кошек» оказываются очень близко, так как слова почти совпадают и тема одна и та же. Для поиска такое поведение допустимо, для понимания смысла — нет.

Модели наследуют стереотипы. Эмбеддинги обучаются на текстах людей, которые содержат их стереотипы. В работе 2016 года на аналогии «мужчина относится к программисту, как женщина к…» Word2Vec ответил «домохозяйка».

Векторы разных моделей несовместимы. У каждой модели собственная карта пространства. При смене модели всю базу векторов требуется пересчитать.

Итог

Эмбеддинг — это адрес смысла в многомерном пространстве. Сходство двух объектов определяется углом между их адресами. Все языковые модели начинаются с таблицы эмбеддингов, которая переводит токены в векторы, а дальнейшие слои уточняют эти векторы с учётом контекста.

Введение: зачем нужны эмбеддинги

Поиск понимает смысл запроса, даже если общих слов нет. Для нейросети слова являются не буквами, а векторами чисел, в которых закодирован смысл.

  • Запрос «Как починить кран?» находит статью про устранение протечки смесителя без общих слов
  • Слово кошка для нейросети представляет собой список из тысячи чисел
  • Похожие слова получают похожие числа, а отношения превращаются в направления
  • Направление от мужчины к женщине примерно совпадает с направлением от короля к королеве
  • Эмбеддинги лежат в основе языковых моделей, поиска, рекомендаций и чат-ботов по документам

Токены, номера и почему нужен эмбеддинг

Текст сначала разбивается на токены, которым присваиваются номера в словаре. Номер сам по себе ничего не говорит о смысле, а one-hot кодирование делает все слова одинаково далекими друг от друга.

  • Текст режут на токены, которые являются словами или частями слов
  • Каждому токену назначается номер в словаре, например кошка 18342, кот 51907
  • Номер не отражает смысл: кошка и кот далеко друг от друга, а соседом кошки может быть кошелек
  • One-hot: строка из нулей длиной во весь словарь с единицей на месте слова
  • При one-hot любые два слова одинаково далеки друг от друга, кошка не ближе к коту, чем к холодильнику
  • Эмбеддинг (от англ. embedding, вложение) это короткое плотное представление, где похожие по смыслу слова стоят рядом

Карта смыслов и векторы

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

  • Пример двумерной карты: ось «насколько живое» и ось «насколько большое»
  • Мышь, кошка, собака и слон располагаются справа по росту, чайник и грузовик слева
  • Кошка описывается двумя числами, 0,9 и 0,2, и может быть представлена точкой или стрелкой (вектором)
  • Двух осей мало: тигр и кошка почти совпадают, добавление оси «домашняя или дикая» их разделяет
  • Размерность реальных эмбеддингов: 768, 1024 или более 3000 чисел
  • В реальной модели оси не имеют понятных названий, а одно свойство обычно размазано по многим осям
  • Важна не отдельная координата, а положение точки целиком

Косинусное сходство

Похожесть измеряется не расстоянием, а углом между векторами через косинусное сходство, так как длина вектора зависит от частоты слова в обучении.

  • Расстояние между точками часто зависит от частоты слова при обучении, поэтому оно не отражает смысл
  • Косинус угла равен 1 при одинаковом направлении, 0 при прямом угле и минус 1 при противоположных направлениях
  • Косинусное сходство считается перемножением координат попарно, суммированием и делением на длины векторов
  • Для кошки и котенка значение высокое, для кошки и собаки меньше, для кошки и холодильника низкое
  • В реальных моделях несвязанные тексты часто дают не ноль, а, например, 0,3, поэтому важно сравнение, а не абсолютное число

Как модель учится: Word2Vec и окружение слов

Модель сама выучивает положение слов по их окружению, следуя идее лингвиста Джона Фёрса. Так работает Word2Vec, созданный в Google в 2013 году.

  • Идея лингвиста Джона Фёрса: слово можно узнать по его окружению
  • Слова, встречающиеся в одинаковом окружении, обычно имеют похожий смысл и получают близкие точки
  • Word2Vec был обучен в Google в 2013 году
  • Сначала каждому слову дается случайная точка, затем модель угадывает соседние слова в огромном тексте
  • Каждая ошибка слегка сдвигает точки: соседи притягиваются, случайные пары расходятся
  • Со временем случайное облако превращается в карту: напитки с напитками, животные с животными, города с городами
  • Направления начинают кодировать отношения: король минус мужчина плюс женщина дает королеву
  • В современных моделях арифметика работает менее чисто, но идея сохраняется

Таблица эмбеддингов и контекст

Первый шаг любой языковой модели это таблица эмбеддингов, но статичный вектор не различает значения слова в разных контекстах. Слои модели добавляют контекст, создавая контекстные эмбеддинги.

  • Таблица эмбеддингов содержит по строке на каждый токен словаря
  • У Llama 3 на 8 млрд параметров 128 тыс. строк, в каждой по 4096 чисел
  • Одна таблица содержит больше полумиллиарда чисел, все они выучиваются при обучении
  • Проблема статичной таблицы: слово ключ имеет одну строку и одну точку для всех смыслов (ключ от двери, скрипичный ключ, родниковый ключ)
  • Каждый слой подмешивает к вектору информацию от соседей, и ключ сдвигается к замкам, нотам или родникам
  • Такие векторы называются контекстными эмбеддингами
  • В конце модель по последнему вектору считает вероятности следующего слова

Векторы для целых фраз и контрастивное обучение

Для сравнения целых фраз и документов нужен один вектор на весь текст, который получают пулингом. Для поиска используют отдельные модели эмбеддингов, обученные контрастивно.

  • Модель выдает вектор на каждый токен, а для поиска нужен один вектор на весь текст
  • Усреднение векторов всех токенов является простейшим способом
  • Альтернатива: добавить служебный токен в начало и обучить модель собирать в него смысл фразы; это называется пулингом
  • Обычная языковая модель не учится делать хорошие векторы для поиска, поэтому нужны отдельные модели эмбеддингов
  • Модели доучивают на миллионах пар: вопрос и правильный ответ притягиваются, случайные пары расталкиваются
  • Такое обучение называется контрастивным и сближает «как починить кран» и «устранение протечки смесителя»

Где используются эмбеддинги

Эмбеддинги применяются в семантическом поиске, в RAG-чат-ботах по документам, в рекомендациях и группировке текстов, а также в мультиязычных и мультимодальных моделях.

  • Семантический поиск: документы заранее превращаются в векторы и хранятся в векторной базе данных, запрос тоже превращается в вектор и ищутся ближайшие
  • RAG: документы режутся на куски, превращаются в векторы, по вопросу находятся ближайшие куски и передаются языковой модели
  • Рекомендации и группировка: похожие товары, фильмы и отзывы, разложенные по темам без ручной разметки
  • Мультиязычные модели: кошка, cat и katze попадают почти в одну точку
  • Мультимодальные модели, например CLIP, кладут в одно пространство текст и картинки, поэтому фото кота оказывается рядом с фразой «фото кота»

Практика: семантический поиск на BGE3

Демонстрация семантического поиска на модели BGE3, которая хорошо понимает русский язык и запускается локально через Ollama. Скрипт занимает около тридцати строк кода.

  • Модель: BGE3, понимающая русский язык, запускается локально через Ollama
  • Скрипт отправляет фразы в модель, получает векторы и считает косинусное сходство каждой пары
  • Тестовые фразы: две про кран, две про кошек и одна про погоду
  • Каждая фраза превращается в 1024 числа
  • На тепловой таблице сходства кран и смеситель выделяются, хотя общих слов нет; кошка на подоконнике и котенок у окна тоже близки; погода со всеми тусклая
  • Запрос «как починить кран?» выдает первым текст про протечку смесителя, а последним текст про погоду

Ограничения эмбеддингов

Эмбеддинги хорошо улавливают тему, но плохо понимают логику, наследуют стереотипы и несовместимы между моделями, поэтому при смене модели базу нужно пересчитывать.

  • Фразы «я люблю кошек» и «я не люблю кошек» оказываются очень близко, так как слова и тема почти одинаковы
  • Для поиска это терпимо, для понимания смысла нет
  • В работе 2016 года Word2Vec на аналогию «мужчина к программисту как женщина к ...» ответил «домохозяйке»
  • Эмбеддинги учатся на текстах людей вместе с их стереотипами
  • Векторы разных моделей несовместимы: у каждой своя карта, при смене модели базу нужно пересчитать полностью