~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, которая сделала эмбеддинги широко известными. Процесс обучения устроен следующим образом:
- Каждому слову присваивается случайная точка.
- Модель проходит по большому массиву текста и учится предсказывать, какие слова стоят рядом.
- Каждая ошибка слегка смещает точки: соседи сближаются, случайные пары расходятся.
- После миллиардов таких смещений случайное облако превращается в структурированную карту.
В результате напитки группируются с напитками, животные — с животными, города — с городами. Модель не получала определения понятия «напиток». Она выявила эту группу из способа, которым люди пишут тексты.
Далее обнаружилось свойство, которое удивило даже авторов методики: направления в пространстве начинают соответствовать отношениям между словами. Если взять вектор «король», вычесть «мужчину» и прибавить «женщину», ближайшим словом, за исключением исходных, окажется «королева». Аналогично работают пары «страна» и «столица». В современных моделях такая арифметика выполняется менее точно, но принцип сохраняется.
Таблица эмбеддингов
Первый шаг любой языковой модели — таблица эмбеддингов. В ней есть строка для каждого токена словаря. Модель получает номер токена и извлекает соответствующую строку. Так слово превращается в вектор.
Например, у 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 на аналогию «мужчина к программисту как женщина к ...» ответил «домохозяйке»
- Эмбеддинги учатся на текстах людей вместе с их стереотипами
- Векторы разных моделей несовместимы: у каждой своя карта, при смене модели базу нужно пересчитать полностью