Журнал ·
Эмбеддинги простыми словами
Эмбеддинг — числа, которыми модель описывает смысл текста. Как измеряют близость, где эмбеддинги подводят и как выбрать модель на своих данных.
Эмбеддинг — это список чисел, которым модель описывает смысл текста. Тексты с похожим смыслом получают похожие списки, поэтому «близость чисел» можно использовать как «близость смысла». На этом держится семантический поиск, 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 — приближённые индексы, векторные хранилища и обоснованный выбор между ними.
