Embedding
embedding — вектор смысла для слова, фрагмента текста или картинки
Embedding (эмбеддинг) — это длинный вектор чисел, который представляет смысл слова, фразы, документа или изображения. Близкие по смыслу объекты получают близкие вектора. Это позволяет искать по смыслу, а не по ключевым словам, кластеризовать документы и сравнивать тексты на любом языке. На embedding'ах построены семантический поиск, RAG, рекомендации и кросс-модальный поиск «текст ↔ картинка».
Коротко
Коротко. Embedding — это вектор из сотен или тысяч чисел, в который превращается слово, фраза, документ или изображение. Близкие по смыслу объекты получают близкие вектора: «кот» и «котёнок» рядом, «кот» и «автомобиль» далеко. На этом построены семантический поиск, RAG, кластеризация документов и сопоставление текста и картинок. Embedding-модели часто маленькие (десятки–сотни мегабайт) и быстрые.
Что это такое
Поисковая строка: «как уменьшить размер модели для слабой видеокарты». Классический поиск ищет точные слова: «уменьшить», «размер», «модели». Документы про «квантизацию» или «pruning» в ответ не попадут — там нужных слов нет.
Семантический поиск работает иначе. Запрос превращается в вектор (1536 чисел для OpenAI ada-002, 768 для bge-small). Документы в базе тоже хранятся как вектора. Поиск ищет те, чьи вектора ближе всего к вектору запроса. Слова разные — смысл близкий — нужные документы находятся.
Это и есть embedding в действии. Произвольный текст — будь то слово, абзац или целая статья — превращается в точку в многомерном пространстве. Координаты этой точки описывают «смысл» объекта так, как его видит модель. Чем ближе точки, тем ближе смысл.
Идея развивалась много лет: word2vec и GloVe сделали популярными распределённые представления слов, а контекстные энкодеры научились давать одному слову разные векторы в разных предложениях. Embeddings стали базовым механизмом для RAG, семантического поиска, кластеризации и сопоставления модальностей.
В большом разборе «RAG и AI-поиск» embedding показан как рабочий этап: документ делится на фрагменты, каждый фрагмент получает вектор, после чего поиск может сопоставлять близкие смыслы даже при разных формулировках.
Как это работает
Embedding-модель — это обычно небольшая нейросеть (transformer без output-projection), обученная так, что близкие по смыслу пары текстов получают близкие вектора.
Жизненный цикл одного embedding'а:
- Вход. Произвольный текст: слово, фраза или абзац в пределах контекстного лимита выбранной embedding-модели.
- Токенизация. Текст режется на токены.
- Forward pass через embedding-модель. Внутри — слои трансформера, на выходе — вектор фиксированной длины.
- Нормализация. Часто вектор делится на свою длину, чтобы все embedding'и были на единичной сфере — упрощает сравнение через косинусное расстояние.
Размерность вектора задаёт выбранная модель. У разных семейств это могут быть сотни или тысячи координат. Числа из двух разных моделей нельзя сравнивать напрямую, даже если размерность случайно совпала.
Сравнение двух embedding'ов: чаще всего косинусное расстояние:
similarity = dot(A, B) / (|A| · |B|)
Косинусная близость лежит в диапазоне от −1 до 1, в том числе для нормализованных векторов. Значение ближе к 1 означает похожее направление, но рабочий порог зависит от модели, корпуса и задачи.
Что мощно: семантическая близость работает между языками и модальностями.
- «кот» (русский) → почти такой же вектор, как «cat» (английский) в многоязычных моделях.
- Фотография кота → почти такой же вектор, как текст «cat» в моделях типа CLIP.
- «уменьшить размер модели для слабой видеокарты» → близко к статье про «квантизацию», даже если в ней нет слов «уменьшить» и «слабой».
Пример на практике
Видеомонтажёр собирает «семантический поиск по своим заметкам» — 3 года Markdown-файлов про проекты, монтаж, оборудование. Хочет искать по смыслу, а не по точным словам.
Стек:
- Embedding-модель: выбирается по языку корпуса, лицензии, размерности и доступной среде. Англоязычный checkpoint нельзя автоматически считать подходящим для русского.
- Векторная БД: ChromaDB (можно начать с in-memory). Запускается одной командой.
- Пайплайн индексации:
- Прочитать все .md файлы.
- Разбить на смысловые фрагменты подходящего размера.
- Для каждого куска посчитать embedding.
- Сохранить вектор + текст в Chroma.
- Пайплайн поиска:
- Запрос пользователя → embedding.
- Найти несколько ближайших векторов и применить нужные фильтры.
- Вернуть тексты этих кусков.
Запрос: «как я в прошлом году настраивал звук для интервью». В прямом поиске Markdown'а ничего не нашлось бы — заметки могут содержать «микрофон», «де-эссер», «компрессия», но не «звук для интервью». Семантический поиск находит их по близости вектора запроса к векторам этих фрагментов.
В ComfyUI всё то же собирается визуально — нода CLIP Text Encode или специализированная embedding-нода превращает текст или картинку в вектор, дальше нода Cosine Similarity сравнивает с базой. Тот же подход — и текст→текст, и текст→картинка, и картинка→картинка.
С чем часто путают
- Embedding и токен — токен это id из словаря. Embedding — это вектор смысла. У каждого токена есть свой embedding (look-up таблица в LLM), но «embedding» как термин чаще означает вектор для текста целиком.
- Embedding и feature vector — feature vector в классическом ML обычно сконструирован человеком (например, [возраст, доход, длина]). Embedding — выучен моделью; отдельные числа в нём не интерпретируются.
- Embedding и hash — hash это уникальный детерминированный отпечаток, не несущий смысла (близкие тексты дают разные хеши). Embedding — мягкий: близкие тексты дают близкие вектора.
- 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 — основной use-case embeddings: поиск релевантных кусков перед генерацией.
- Semantic search — поиск по смыслу через embeddings.
- CLIP — модель, делающая embedding и текста, и картинки в одно пространство.
- Cosine similarity — стандартная метрика близости двух embedding'ов.
- Chunking — разбивка длинных документов перед embedding'ом.
- Reranking — пере-сортировка найденных embedding'ов через более точную модель.
- Textual Inversion — особый embedding в Stable Diffusion, не путать с обычным.
Частые вопросы
Сколько занимает один embedding в памяти? Размерность × 4 байта (FP32) или × 2 байта (FP16). Для 1536-мерного embedding'а — 6 КБ или 3 КБ. На миллион документов нужны гигабайты, но не терабайты.
Где брать embedding-модель? Hugging Face MTEB Leaderboard — рейтинг open-source моделей.
Можно ли искать русский запрос по английским документам? Да, если использовать многоязычную модель: bge-m3, mE5, paraphrase-multilingual-MiniLM. На моноязычной (например, ada-002) качество кросс-языкового поиска ниже.
Сколько документов можно проиндексировать локально? Объём зависит от размерности и типа вектора, индекса, метаданных, фильтров и запаса памяти. Его оценивают на контрольной части корпуса, а затем измеряют скорость поиска и размер индекса при росте данных.
Как обновлять индекс при изменении документов? Перепосчитать embedding изменённых кусков, обновить в БД. Поддерживается во всех vector databases. Полная переиндексация нужна только при смене embedding-модели.
Главное
Embedding — числовое представление объекта, в котором близость должна отражать полезное для задачи сходство. На embeddings строят RAG, рекомендации, кросс-модальный поиск и кластеризацию. Размерность сама по себе не показывает качество: важны язык, домен, способ обучения и метрика. Подходящую модель выбирают по retrieval-тесту на собственных запросах.