Журнал ·

Эмбеддинги простыми словами

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

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

Если представить каждое число как координату, текст превращается в точку в пространстве. Фразы «как вернуть товар» и «оформить возврат покупки» окажутся рядом, хотя общих слов у них почти нет. Фраза «график работы склада» — далеко от обеих.

Откуда берутся эти числа

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

По отдельности числа ничего не значат. Нет «координаты про возврат» или «координаты про доставку». Смысл есть только во взаимном расположении векторов.

«как вернуть товар»          → [0.12, −0.48, 0.33, …]
«оформить возврат покупки»   → [0.10, −0.45, 0.36, …]   ← близко
«график работы склада»       → [−0.71, 0.05, 0.22, …]   ← далеко
(числа условные)

Как измеряют близость

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

Семантический поиск в простейшем виде так и работает: превратить все документы в векторы заранее, превратить вопрос в вектор в момент запроса и вернуть k ближайших документов.

Чем эмбеддинги отличаются от токенов

Это два разных уровня, и их часто путают.

Токены — кусочки текста, на которые модель режет вход: части слов, знаки. Это способ записать текст для модели.

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

Где эмбеддинги подводят

Точные идентификаторы. Номер заказа, артикул, код ошибки. Для эмбеддинга «заказ 18345» и «заказ 18346» почти одно и то же — а для пользователя это разные заказы. Здесь нужен обычный поиск по словам, поэтому в рабочих системах поиск часто гибридный.

Отрицания и мелкие детали. «Можно ли вернуть товар» и «нельзя вернуть товар» по смыслу противоположны, но их векторы могут оказаться рядом: тема одна.

Слишком длинные фрагменты. Один вектор на пять страниц — это усреднённый смысл всего сразу. Конкретный абзац внутри такого фрагмента найти трудно. Поэтому документы перед индексацией режут на части.

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

Смена модели. Векторы разных эмбеддинг-моделей несовместимы: нельзя искать вопросом, закодированным новой моделью, по документам, закодированным старой. Сменили модель — переиндексируйте весь корпус.

Как выбрать эмбеддинг-модель

Не по общему рейтингу, а на своих данных. Соберите 15–20 реальных запросов, для каждого отметьте, какой документ должен найтись, и посчитайте, как часто он попадает в первые пять результатов. Прогоните так две-три модели — разница на ваших данных часто важнее, чем места в таблицах лидеров.

Помимо качества учитывают размерность (влияет на объём индекса и скорость), стоимость эмбеддинга при индексации и при каждом запросе, лицензию и то, можно ли запустить модель у себя, если документы нельзя отправлять наружу.

Когда документов становится много

Сравнить вопрос с каждым вектором — нормально, пока документов тысячи. При миллионах это слишком медленно, и используют приближённые индексы: они находят почти ближайших соседей намного быстрее, иногда пропуская одного-двух настоящих. Компромисс между точностью и скоростью настраивается и, разумеется, измеряется.

Именно здесь в архитектуре появляется векторная база. Но это хранилище и индекс для векторов — а не сам поиск по смыслу и тем более не RAG. Подробнее — в статье «Что такое RAG и почему это не векторная база».

Частые вопросы

Можно ли посмотреть, что означает конкретное число в векторе? Нет, отдельные числа не интерпретируются. Смысл — только в расстояниях между векторами.

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

Эмбеддинги — это только для текста? Нет. Бывают эмбеддинги изображений и звука, и даже общие, где картинка и её описание оказываются рядом. На этом строится поиск по изображениям и мультимодальный RAG.

Где это в программе

Идея «текст → вектор, близкие по смыслу рядом» появляется на L2, когда разбирается, как работает LLM. На L3 эмбеддинги получают через API или локально и строят семантический поиск по корпусу: проект PRJ-04 с эталонным набором из 15–20 запросов, метрикой и сравнением двух эмбеддинг-моделей. На L4 — приближённые индексы, векторные хранилища и обоснованный выбор между ними.

Где это в программе

L2 Уровень

Новичок

Понимаете, как устроены модели на уровне интуиции, и пишете на Python приложение, вызывающее LLM API.

L3 Уровень

Стажёр

Пишете AI-приложение на Python с валидируемым выводом, строите семантический поиск по документам и измеряете качество на golden set.

L4 Уровень

Junior

Объясняете устройство LLM от токена до сэмплирования; строите RAG с отдельной оценкой поиска и генерации; упаковываете сервис в контейнер с тестами.

Специализация C

RAG Engineer

Строит поиск и RAG, которым можно доверять: от парсинга документов до мониторинга качества.

Все статьи журнала

Диагностика уровня

С какого уровня начать?

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

Или напишите: hello@superint.ru