Embedding
embedding — вектор смысла для слова, фрагмента текста или картинки
Embedding (эмбеддинг) — числовой вектор, которым модель представляет объект: слово, фрагмент текста, изображение или другой материал. Если модель обучена для поиска, близость векторов помогает находить подходящие документы даже при разных формулировках. Какая именно близость отражается в числах, зависит от обучения и задачи.
Коротко
Коротко. Эмбеддинг — представление объекта в виде набора чисел. Его можно сравнивать с другими представлениями, чтобы искать похожие тексты, группировать документы или подбирать изображение к описанию. Это не полная запись смысла: полезные связи модель усваивает во время обучения, а какие-то различия может потерять.
Что это такое
Допустим, вы ищете «как уменьшить модель для слабой видеокарты», а заметка называется «Квантизация весов». При поиске только точных совпадений её легко пропустить. Полнотекстовый поиск может учитывать синонимы и формы слов, но векторный поиск добавляет ещё один способ сопоставления.
Запрос и заметка получают числовые представления в совместимом пространстве. Если модель хорошо различает технические темы, заметка о квантизации может оказаться близкой к запросу. Это делает её кандидатом для выдачи, но ещё не доказывает, что она отвечает на вопрос.
Отдельные координаты обычно не подписаны как «кошка», «скорость» или «память». Смысловая связь проявляется в сочетании чисел и способе сравнения. Поэтому эмбеддинг удобнее понимать как выученное представление, а не универсальный «вектор смысла».
Идея развивалась много лет: word2vec и GloVe сделали популярными распределённые представления слов, а контекстные энкодеры научились давать одному слову разные векторы в разных предложениях. Embeddings стали базовым механизмом для RAG, семантического поиска, кластеризации и сопоставления модальностей.
В большом разборе «RAG и AI-поиск» embedding показан как рабочий этап: документ делится на фрагменты, каждый фрагмент получает вектор, после чего поиск может сопоставлять близкие смыслы даже при разных формулировках.
Как это работает
Текстовая embedding-модель часто использует трансформер и способ собрать представления отдельных токенов в итоговый вектор. Размер и устройство могут быть разными: эмбеддинги не ограничены маленькой сетью без выходного слоя.
Жизненный цикл одного embedding'а:
- Вход. Произвольный текст: слово, фраза или абзац в пределах контекстного лимита выбранной embedding-модели.
- Токенизация. Текст режется на токены.
- Вычисление представления. Модель обрабатывает токены и формирует вектор предусмотренной размерности.
- Нормализация. Часто вектор делится на свою длину, чтобы все embedding'и были на единичной сфере — упрощает сравнение через косинусное расстояние.
Размерность вектора задаёт выбранная модель. У разных семейств это могут быть сотни или тысячи координат. Числа из двух разных моделей нельзя сравнивать напрямую, даже если размерность случайно совпала.
Один из способов сравнения — косинусная близость:
similarity = dot(A, B) / (|A| · |B|)
Косинусная близость лежит в диапазоне от −1 до 1, в том числе для нормализованных векторов. Значение ближе к 1 означает похожее направление, но рабочий порог зависит от модели, корпуса и задачи.
Для некоторых моделей возможен поиск между языками или типами данных:
- русское «кот» и английское «cat» могут иметь близкие представления в многоязычной модели;
- CLIP сопоставляет изображения и тексты в общем пространстве;
- поисковая модель может связать вопрос с подходящим ответом, хотя они не являются перефразировками друг друга.
Но близкие представления — не обязательно почти одинаковые векторы. Поддержка конкретного языка, длины текста и типа данных требует проверки.
Пример на практике
Представим архив монтажёра: Markdown-заметки о микрофонах, проектах и настройке звука. Хочется находить запись по сути вопроса, не вспоминая её точный заголовок.
Стек:
- Embedding-модель: выбирается по языку корпуса, лицензии, размерности и доступной среде. Англоязычный checkpoint нельзя автоматически считать подходящим для русского.
- Хранилище: векторный индекс или база, в которой можно связать вектор с исходным текстом, датой и идентификатором документа.
- Пайплайн индексации:
- Прочитать все .md файлы.
- Разбить на смысловые фрагменты подходящего размера.
- Для каждого куска посчитать embedding.
- Сохранить вектор + текст в хранилище.
- Пайплайн поиска:
- Запрос пользователя → 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, рекомендации, кросс-модальный поиск и кластеризацию. Размерность сама по себе не показывает качество: важны язык, домен, способ обучения и метрика. Подходящую модель выбирают по тесту поиска на собственных запросах.