Embedding

embedding — вектор смысла для слова, фрагмента текста или картинки

Раздел
Языковые модели
Обновлено
05.09.26

Embedding (эмбеддинг) — числовой вектор, которым модель представляет объект: слово, фрагмент текста, изображение или другой материал. Если модель обучена для поиска, близость векторов помогает находить подходящие документы даже при разных формулировках. Какая именно близость отражается в числах, зависит от обучения и задачи.

Коротко

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

Что это такое

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

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

Отдельные координаты обычно не подписаны как «кошка», «скорость» или «память». Смысловая связь проявляется в сочетании чисел и способе сравнения. Поэтому эмбеддинг удобнее понимать как выученное представление, а не универсальный «вектор смысла».

Идея развивалась много лет: word2vec и GloVe сделали популярными распределённые представления слов, а контекстные энкодеры научились давать одному слову разные векторы в разных предложениях. Embeddings стали базовым механизмом для RAG, семантического поиска, кластеризации и сопоставления модальностей.

В большом разборе «RAG и AI-поиск» embedding показан как рабочий этап: документ делится на фрагменты, каждый фрагмент получает вектор, после чего поиск может сопоставлять близкие смыслы даже при разных формулировках.

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

Текстовая embedding-модель часто использует трансформер и способ собрать представления отдельных токенов в итоговый вектор. Размер и устройство могут быть разными: эмбеддинги не ограничены маленькой сетью без выходного слоя.

Жизненный цикл одного embedding'а:

  1. Вход. Произвольный текст: слово, фраза или абзац в пределах контекстного лимита выбранной embedding-модели.
  2. Токенизация. Текст режется на токены.
  3. Вычисление представления. Модель обрабатывает токены и формирует вектор предусмотренной размерности.
  4. Нормализация. Часто вектор делится на свою длину, чтобы все embedding'и были на единичной сфере — упрощает сравнение через косинусное расстояние.

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

Один из способов сравнения — косинусная близость:

similarity = dot(A, B) / (|A| · |B|)

Косинусная близость лежит в диапазоне от −1 до 1, в том числе для нормализованных векторов. Значение ближе к 1 означает похожее направление, но рабочий порог зависит от модели, корпуса и задачи.

Для некоторых моделей возможен поиск между языками или типами данных:

  • русское «кот» и английское «cat» могут иметь близкие представления в многоязычной модели;
  • CLIP сопоставляет изображения и тексты в общем пространстве;
  • поисковая модель может связать вопрос с подходящим ответом, хотя они не являются перефразировками друг друга.

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

Пример на практике

Представим архив монтажёра: Markdown-заметки о микрофонах, проектах и настройке звука. Хочется находить запись по сути вопроса, не вспоминая её точный заголовок.

Стек:

  1. Embedding-модель: выбирается по языку корпуса, лицензии, размерности и доступной среде. Англоязычный checkpoint нельзя автоматически считать подходящим для русского.
  2. Хранилище: векторный индекс или база, в которой можно связать вектор с исходным текстом, датой и идентификатором документа.
  3. Пайплайн индексации:
    • Прочитать все .md файлы.
    • Разбить на смысловые фрагменты подходящего размера.
    • Для каждого куска посчитать embedding.
    • Сохранить вектор + текст в хранилище.
  4. Пайплайн поиска:
    • Запрос пользователя → embedding.
    • Найти несколько ближайших векторов и применить нужные фильтры.
    • Вернуть тексты этих кусков.

Запрос «как я настраивал звук для интервью» может привести к заметке о микрофоне и компрессии. Если нужен определённый год, его лучше передать отдельным фильтром по дате. Близость вектора не заменяет точную проверку времени, имени проекта или номера оборудования.

В ComfyUI нода CLIP Text Encode подготавливает текстовое условие для генерации. Её выход CONDITIONING нельзя без проверки считать готовым единичным вектором поискового индекса. Для поиска нужны совместимые энкодеры запросов и документов, правильное объединение представлений и подходящий способ сравнения.

С чем часто путают

  • Эмбеддинг и токен — токен задаётся идентификатором из словаря. Во входном слое LLM ему обычно сопоставляется обучаемый вектор. Представление целого документа — другая задача, а не просто идентификатор одного токена.
  • Embedding и feature vector — feature vector в классическом ML обычно сконструирован человеком (например, [возраст, доход, длина]). Embedding — выучен моделью; отдельным координатам обычно нельзя приписать простой смысл. Само понятие вектора признаков шире и включает выученные представления.
  • Embedding и hash — криптографический хэш служит для проверки совпадения данных, а не смысловой близости. Коллизии теоретически возможны. Эмбеддинг может сблизить разные формулировки, но не гарантирует точного совпадения содержимого.
  • Embedding и vector database — embedding это объект (вектор). Vector database — хранилище таких объектов с поиском по близости.
  • Embedding и LoRA — LoRA в diffusion это адаптер для модели, не вектор. В Stable Diffusion слово «Embedding» исторически означает Textual Inversion — это отдельный концепт, см. ниже.

Частые ошибки и заблуждения

  • «Embedding безопасно публиковать вместо текста». Вектор не является обычной обратимой кодировкой, но может раскрывать признаки исходных данных и использоваться в атаках восстановления текста. К нему применяют те же правила доступа, что и к чувствительному корпусу.
  • «Embeddings одной модели совместимы с другой». Нет. Каждая модель создаёт свои вектора в своём пространстве. text-embedding-3-small и bge-small-en — это разные пространства, их вектора нельзя сравнивать напрямую.
  • «Чем выше размерность — тем лучше». Размерность сама по себе не измеряет качество поиска. Модели сравнивают на размеченных запросах из своего корпуса.
  • «Достаточно одного embedding для документа любой длины». Один вектор большого документа часто теряет локальные детали. Размер фрагментов и перекрытие подбирают по структуре текста и измеряют на поисковой выборке.
  • «Embedding отражает истину». Он отражает то, на чём модель училась. На редких языках или специфичных доменах качество может проседать.

Связанные термины

  • Vector Database — хранилище и поиск по embedding'ам.
  • RAG — одно из применений эмбеддингов: поиск подходящих фрагментов перед генерацией.
  • Semantic search — поиск по смыслу через embeddings.
  • CLIPмодель, делающая embedding и текста, и картинки в одно пространство.
  • Cosine similarity — стандартная метрика близости двух embedding'ов.
  • Chunking — разбивка длинных документов перед embedding'ом.
  • Reranking — повторная оценка найденных документов относительно запроса.
  • Textual Inversion — особый embedding в Stable Diffusion, не путать с обычным.

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

Сколько занимает один embedding в памяти? Для плотного вектора: размерность × размер одного числа. Например, 1536 координат FP32 занимают 6144 байта (6 КиБ), а FP16 — 3072 байта (3 КиБ). Отдельно нужны память под индекс, текст, метаданные и служебные структуры; у одного документа может быть много фрагментов.

Где брать embedding-модель? В официальном репозитории разработчика или каталоге моделей. В карточке важны язык, назначение, предел длины, правила подготовки запроса и документа, лицензия. Документация Sentence Transformers объясняет, почему модели для поиска ответа и поиска похожих фраз могут различаться.

Можно ли искать русский запрос по английским документам? Да, если модель обучена сопоставлять эти языки в общем пространстве. Но пометка «многоязычная» не обещает одинаковое качество для каждой пары языков и предметной области.

Сколько документов можно проиндексировать локально? Объём зависит от размерности и типа вектора, индекса, метаданных, фильтров и запаса памяти. Его оценивают на контрольной части корпуса, а затем измеряют скорость поиска и размер индекса при росте данных.

Как обновлять индекс при изменении документов? Пересчитать представления изменённых фрагментов, удалить устаревшие записи и обновить метаданные. Возможность точечного обновления зависит от индекса. Смена модели, способа разбиения или подготовки текста может потребовать пересчёта всего корпуса.

Главное

Embedding — числовое представление объекта, в котором близость должна отражать полезное для задачи сходство. На embeddings строят RAG, рекомендации, кросс-модальный поиск и кластеризацию. Размерность сама по себе не показывает качество: важны язык, домен, способ обучения и метрика. Подходящую модель выбирают по тесту поиска на собственных запросах.