Эмбеддинги: векторные представления для поиска и RAG
Кратко. Эмбеддинг — это числовой вектор, в который модель кодирует текст или картинку так, что близкие по смыслу объекты лежат рядом, а далёкие — врозь. Расстояние между векторами отражает сходство по смыслу. На этом стоят семантический поиск, RAG, кластеризация и рекомендации.
Когда говорят про семантический поиск или про RAG, в основании почти всегда лежат эмбеддинги — способ перевести смысл текста в числа, с которыми умеет работать машина. Идея родилась в обработке естественного языка с моделью word2vec в 2013 году, а сегодня это рабочий инструмент любого ИИ-приложения, которое ищет по смыслу. Эта страница объясняет, как смысл превращается в вектор, чем меряют близость и где это применяют. Общий разбор раздела — в хабе разработка.
Что такое эмбеддинг
Эмбеддинг — это числовой вектор фиксированной длины, в который модель кодирует смысл объекта: слова, фразы, целого документа или картинки. Геометрия здесь несёт смысл: чем ближе два вектора в пространстве, тем ближе объекты по значению. Слова «кот» и «кошка» дают близкие векторы, а «кот» и «бухгалтерия» — далёкие. Так смысл становится координатами, с которыми можно считать.
Размерность такого вектора обычно лежит в диапазоне от 384 до 3072 чисел — каждое отвечает за некоторую скрытую характеристику смысла, которую модель выучила на больших корпусах текста. Человек эти оси не задаёт и не интерпретирует напрямую: они формируются при обучении. Важна не каждая отдельная координата, а взаимное расположение векторов, которое и переносит смысловые отношения в геометрию.
Как смысл превращается в вектор
Смысл превращается в вектор через модель-энкодер, обученную на огромных текстовых корпусах. Она пропускает входной текст через нейросеть и на выходе выдаёт один вектор, который сжимает значение всего фрагмента. Обучение устроено так, чтобы тексты, встречающиеся в похожих контекстах, получали похожие векторы — отсюда и берётся свойство «близкие по смыслу рядом».
Первой массовой моделью стал word2vec Томаша Миколова и коллег из Google в 2013 году: он показал, что у векторов есть арифметика — «король минус мужчина плюс женщина» даёт вектор, близкий к «королеве». Современные энкодеры на архитектуре трансформера, например Sentence-BERT (2019), кодируют не отдельные слова, а целые предложения с учётом контекста, поэтому одно и то же слово в разных фразах получает разные векторы.
Как меряют близость векторов
Близость векторов чаще всего меряют косинусным сходством — косинусом угла между ними. Значение лежит в диапазоне от минус единицы до единицы: около единицы — векторы смотрят почти в одну сторону, тексты близки по смыслу; около нуля — не связаны; отрицательные значения встречаются реже и означают противоположную направленность. Важен угол, а не длина вектора, поэтому метрика устойчива к разнице в «масштабе».
Реже применяют евклидово расстояние (прямую дистанцию между точками) или скалярное произведение. Для нормированных векторов косинусное сходство и евклидово расстояние дают согласованный порядок, поэтому на практике выбор между ними влияет мало. Семантический поиск сводится к простой операции: закодировать запрос в вектор и найти в базе те векторы, у которых косинусное сходство с ним максимально.
Где применяются эмбеддинги
Эмбеддинги применяют везде, где нужно сравнивать объекты по смыслу, а не по точному совпадению строк. Семантический поиск находит релевантные документы по запросу, даже если формулировки расходятся; рекомендательные системы подбирают похожие товары и статьи; кластеризация группирует тексты по темам без заранее заданных меток. Объединяет эти задачи одно: всё сводится к поиску близких векторов в пространстве.
Отдельная крупная область — RAG: перед генерацией ответа языковая модель получает релевантные фрагменты из базы знаний, и находят их именно через эмбеддинги. Документы заранее режут на чанки, кодируют в векторы и складывают в векторную базу; на запрос система берёт ближайшие по сходству чанки и подставляет их в промпт. Подробный разбор архитектуры — в материале RAG.
- Семантический поиск — поиск по смыслу запроса, а не по совпадению слов.
- RAG — подбор контекста для языковой модели из базы знаний.
- Кластеризация — группировка текстов по темам без ручной разметки.
- Рекомендации — подбор похожих товаров, статей, треков по близости векторов.
- Дедупликация — поиск почти-дубликатов и near-duplicate контента.
Какие бывают модели эмбеддингов
Модели эмбеддингов делятся на проприетарные API и открытые веса, и выбор определяет приватность, цену и контроль. Из API-моделей распространены OpenAI text-embedding-3 (small и large) и Cohere Embed — их подключают одним запросом, без своей инфраструктуры. Из открытых популярны семейства E5, BGE и GTE: их можно запустить локально через библиотеку sentence-transformers и не отдавать данные наружу.
Для русского языка важна многоязычность. Хорошо работают multilingual-e5 (base и large) и multilingual BGE-M3 — они обучены на десятках языков, включая русский, и дают качественные векторы для русскоязычного поиска. Сравнивать модели между собой удобно по бенчмарку MTEB на Hugging Face: он ранжирует энкодеры по качеству на десятках задач — поиск, классификация, кластеризация — и помогает выбрать под конкретный сценарий.
Как начать использовать эмбеддинги
Начать проще всего с библиотеки sentence-transformers на Python: установить пакет, загрузить готовую модель (например, multilingual-e5-base), и метод encode вернёт вектор для любого текста. Дальше закодируйте свою коллекцию документов, посчитайте косинусное сходство между запросом и каждым вектором — и у вас уже работает базовый семантический поиск на нескольких строках кода.
Когда документов становятся десятки тысяч, полный перебор замедляется, и стоит подключить векторную базу: ChromaDB для локального прототипа, Qdrant или pgvector для продакшена. Она строит индекс приближённого поиска ближайших соседей и находит похожие векторы за миллисекунды. Следующий логичный шаг — собрать на этом поиске RAG-контур; если же нужно адаптировать саму модель под узкий домен, смотрите файн-тюнинг.
Источники
- Mikolov T. et al. «Efficient Estimation of Word Representations in Vector Space» (word2vec). 2013. arxiv.org/abs/1301.3781
- Reimers N., Gurevych I. «Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks». 2019. arxiv.org/abs/1908.10084
- MTEB — Massive Text Embedding Benchmark, лидерборд моделей эмбеддингов. Hugging Face. huggingface.co/spaces/mteb/leaderboard
Связанные концепты
- RAG — дополнение ответов языковой модели контекстом, найденным через эмбеддинги
- Файн-тюнинг — адаптация модели под домен, когда поиска по эмбеддингам недостаточно
Частые вопросы
Чем эмбеддинг отличается от обычного поиска по ключевым словам?
Поиск по ключевым словам сопоставляет строки символов: запрос «авто» не найдёт документ со словом «машина», даже если речь об одном и том же. Эмбеддинг сравнивает смысл — оба слова дают близкие векторы, поэтому семантический поиск находит релевантное, даже когда формулировки расходятся. На практике их часто комбинируют: векторный поиск ловит смысл, полнотекстовый (BM25) — точные совпадения вроде кодов и имён.
Сколько измерений у вектора-эмбеддинга?
Обычно от 384 до 3072 в зависимости от модели. У компактных моделей вроде all-MiniLM — 384 измерения, у multilingual-e5-large — 1024, у OpenAI text-embedding-3-large — 3072. Больше измерений обычно означает выше качество и больше памяти на хранение. Для большинства задач семантического поиска хватает диапазона 768–1024.
Нужна ли отдельная база данных под эмбеддинги?
Для прототипа на тысячах документов хватит хранения векторов в памяти или в обычной БД с расширением — например, pgvector поверх PostgreSQL. На больших объёмах нужна векторная база (Qdrant, Weaviate, ChromaDB, Pinecone): она строит индекс приближённого поиска ближайших соседей, который находит похожие векторы за миллисекунды вместо полного перебора.