ГАЙД 2026

EmbeddingGemma 2 для RAG: локальные эмбеддинги, MRL и мультимодальный поиск

Одна модель на 740 млн параметров, которая кладёт текст, картинки, видео и звук в общее 768-мерное пространство и ужимает вектор до 128 измерений почти без потерь. Пошаговая настройка для RAG без облачных эмбеддингов.

RAGЭмбеддингиOpen Source
Категория Векторный поиск и RAGЛицензия Apache-2.0Обновлено 19.10.2026

EmbeddingGemma 2 — открытая мультимодальная модель эмбеддингов Google DeepMind на 740 млн параметров, опубликованная 14 сентября 2026 года. Она переводит текст (включая код), изображения, видео и аудио в одно общее пространство на 768 измерений, поддерживает усечение вектора до 128 измерений и работает на ноутбуке. За месяц репозиторий набрал 167 750 загрузок и 2 718 лайков (снято 19.10.2026) — это лучший результат среди открытых моделей эмбеддингов такой размерности.

740 млн
Параметров
все модальности
768
Вектор
усечение до 128
8 192
Контекст
токена на всё
100+
Языков
и код
167 750
Скачиваний
Hugging Face
Короткий ответ
Ставьте sentence-transformers, грузите google/embeddinggemma-2, считайте запросы с префиксом SearchQuery, документы — с префиксом Document. Для хранения хватит 256 измерений вместо 768: по MTEB мультиязычный балл падает с 61,36 до 60,41, а объём индекса — втрое. Не используйте float16: активации модели выходят за его диапазон и вы получите NaN вместо ошибки.

01Зачем локальные эмбеддинги и что даёт EmbeddingGemma 2

Эмбеддинги — самая недооценённая часть RAG. Генеративную модель можно менять хоть каждую неделю, но если поиск по базе знаний находит не те фрагменты, ответ будет плохим при любой LLM. Облачные embedding-API решают вопрос быстро, но у них есть три цены: деньги за каждый миллион токенов, задержка на каждом запросе и передача содержимого документов наружу. Локальная модель снимает все три, если железо тянет инференс.

EmbeddingGemma 2 сделана по модульному принципу: текстовый бэкбон на 130M параметров и эмбеддер на 140M дают базовые 270M, а зрительный кодировщик на 170M и аудиокодировщик на 300M подключаются по необходимости. Если вы строите обычный текстовый поиск, качайте только текст — получите модель на 270M, которая помещается в память рядом с любым приложением.

Состав модели EmbeddingGemma 2
Текстовый бэкбон — 130M24 слоя, sliding window 1024 токена, словарь 262 144Эмбеддер — 140Mmean pooling и проекция 512 → 768Зрительный кодировщик — 170Mизображения и кадры видео, подключается по необходимостиАудиокодировщик — 300Mречь и звуки, моно 16 кГц
Распределение параметров
41%23%19%18%740MпараметровАудиокодировщик300 · 41%Зрительный кодировщик170 · 23%Эмбеддер140 · 19%Текстовый бэкбон130 · 18%
Данные карточки модели, снято 19.10.2026.
Активные модальностиconfig_kwargsРазмер
Только текст{"vision_config": None, "audio_config": None}270M
Текст и изображения{"audio_config": None}440M
Текст и аудио{"vision_config": None}570M
Всё сразу{}740M
По карточке модели: отключение кодировщиков уменьшает память, но требует соответствующей поддержки в библиотеке.

02Установка и первый эмбеддинг

Минимальный путь — библиотека sentence-transformers. Она сама скачает веса и разложит их по кэшу, а API из двух строк закрывает 90% задач RAG. Для продакшена с батчами и GPU имеет смысл смотреть в сторону vLLM, но начинать точно стоит здесь.

Первый запуск за пять минут
1
Установить библиотеки
sentence-transformers подтянет transformers и torch; для GPU-сборки torch ставится отдельно под вашу CUDA.
terminalcopy
pip install -U sentence-transformers transformers
2
Посчитать эмбеддинги
Обратите внимание на prompt_name: запрос и документ кодируются разными префиксами.
embed.pycopy
from sentence_transformers import SentenceTransformer

model = SentenceTransformer("google/embeddinggemma-2")
query = "Как оплатить API из России?"
document = "Оплата идёт через посредника, расчёт в рублях."

q = model.encode(query, prompt_name="SearchQuery")
d = model.encode(document, prompt_name="Document")
print(model.similarity(q, d))
3
Усечь вектор при индексации
truncate_dim включает MRL-усечение, normalize_embeddings пересчитывает длину — без него косинусная близость поедет.
embed.pycopy
doc_emb = model.encode(
    document,
    prompt_name="Document",
    truncate_dim=256,
    normalize_embeddings=True,
)

Есть нюанс с документами, у которых есть заголовок. Префикс Document подставляет title: none, поэтому для статей с заголовком карточка советует собирать строку вручную: title: {title} | text: {document}. Иначе модель не увидит заголовок и качество поиска по коротким документам просядет.

float16 — тихая поломка
Диапазон активаций EmbeddingGemma 2 шире, чем умеет float16: вместо исключения вы получите NaN или «почти нормальные» векторы с упавшим качеством. Используйте bfloat16 (на поддерживающем железе) или float32 — в том числе на большинстве CPU.

03MRL: как ужать 768 измерений до 256 и не потерять качество

Matryoshka Representation Learning обучает модель так, чтобы первые N чисел вектора сами по себе были осмысленным эмбеддингом. Это даёт редкую возможность: один раз посчитать вектор, а хранить его в усечённом виде. По карточке модели качество почти не падает до 256 измерений, а 128 годятся прежде всего для текстовых задач.

Качество по мере усечения вектораMTEB multilingual v2, Mean(Task), данные авторов, снято 19.10.2026
0%40%80%768d61,4%512d61,2%256d60,4%128d57,9%
На 256 измерениях потеря 0,95 пункта при трёхкратной экономии места; на 128 — уже 3,47 пункта, и мультимодальные задачи страдают сильнее.
РазмерностьСжатиеMTEB multiMIEB liteMMEB overall
768d1:161,3664,6459,01
512d1:1,561,1764,3258,38
256d1:360,4163,1356,24
128d1:657,8959,0645,65
Данные карточки модели. Для мультимодальных задач 128 измерений — заметная деградация (45,65 против 59,01), проверяйте на своей выборке.

Два правила, без которых MRL приносит вред. Первое: после усечения вектор нужно заново нормализовать — срез единичного вектора не сохраняет единичную длину, и косинус начинает врать. Второе: запрос и документы должны иметь одинаковую размерность; запрос на 768 измерений против индекса на 128 просто не посчитается корректно. В sentence-transformers оба правила закрываются параметрами truncate_dim и normalize_embeddings=True.

04Мультимодальность: изображения, видео и звук в одном индексе

Главное отличие второй версии от первой — единое пространство для четырёх модальностей. Текстовый запрос можно сравнивать с эмбеддингом картинки или видеофрагмента напрямую, без отдельной модели-моста. Для интернет-магазина это означает поиск «водонепроницаемые кроссовки для трейла» по фотографиям товаров, для архива — поиск по расшифровкам и звукам одновременно.

Как устроен мультимодальный RAG
1Чанкинг и разметкатекст режется на фрагменты, медиа вставляется плейсхолдерами2Эмбеддингодин вызов model.encode возвращает общий вектор на текст и медиа3Усечение и нормализацияMRL до 256d, L2-нормализация, запись в индекс4Поиск и генерациятекстовый запрос ищет по всем модальностям, найденное уходит в LLMПлейсхолдеры <|image|>, <|video|>, <|audio|> заполняются из соответствующих полей словаря в порядке появления.

Технически смешанный вход собирается словарём: в тексте ставятся маркеры <|image|>, <|video|> и <|audio|>, а значения передаются списками файлов. Каждый маркер заполняется по порядку, на выходе — один вектор, который можно сравнивать с любым другим эмбеддингом модели.

МодальностьСтоимостьМаксимум
Текст1 токен на слово-кусок8 192 токена
Изображение280 токенов (по умолчанию)около 29 картинок
Видео140 токенов на кадроколо 58 кадров
Аудио25 токенов в секундуоколо 327 секунд
Лимиты для одной модальности без текста; в смешанном входе бюджет общий. При снижении бюджета визуальных токенов влезает до ~114 изображений или кадров.
Практика
Для видео по умолчанию берётся 1 кадр в секунду — часовой ролик целиком не влезет, его надо резать на сцены и индексировать фрагментами. Аудио подаётся моно на 16 кГц; стерео или 48 кГц приведут к неверной разметке по времени.

05Цифры: что показывает EmbeddingGemma 2 на бенчмарках

Все числа ниже — из карточки модели, то есть замеры Google DeepMind на полной точности весов. Независимого прогона MTEB на момент публикации мы не видели, поэтому относитесь к ним как к ориентиру, а не как к гарантии.

EmbeddingGemma 2 по типам задачбаллы бенчмарков, данные авторов, снято 19.10.2026
0%40%80%MTEB code78,7%MSEB (аудио)69,5%MMEB VisDoc67,8%MIEB lite64,6%MTEB multilingual61,4%MMEB image57,3%MMEB video50,7%MAEB49,4%
Разные бенчмарки несопоставимы между собой по сложности — сравнивать имеет смысл только с другими моделями внутри той же метрики.
БенчмаркEmbeddingGemma 2EmbeddingGemma 1Комментарий
MTEB multilingual v261,3661,15текст: прирост небольшой
MTEB code v178,6868,76+9,9 пункта — главный рывок
MIEB lite64,64—первая версия не умела картинки
MMEB v2 image57,28—Hit@1
MMEB v2 VisDoc67,84—документы и сканы
MMEB v2 video50,67—самый слабый мультимодальный блок
MSEB retrieval69,54—аудиопоиск
Данные карточки модели, снято 19.10.2026. Прочерк — метрика в первой версии не заявлялась.

Из таблицы видно, где модель сильна, а где нет. Код и визуальные документы — явно приоритетные направления: прирост по коду почти десять пунктов, а VisDoc обгоняет общий MMEB. Видео и общий аудиобенчмарк выглядят скромнее, и если ваш RAG строится вокруг видеархива, стоит протестировать модель на своих данных до того, как закладывать её в архитектуру.

06Где хранить векторы: Chroma, Qdrant и размер индекса

Усечение до 256 измерений — не абстрактная экономия. В float32 один вектор на 768 чисел занимает около 3 КБ, на 256 — около 1 КБ. На миллионе фрагментов это разница между 3 ГБ и 1 ГБ только на векторах, без учёта HNSW-графа и метаданных.

Для локального прототипа достаточно Chroma: она ставится в одно действие и хранит данные файлом. Для нагрузки и фильтрации по метаданным лучше Qdrant — у него есть бесплатный тариф навсегда и usage-based облако, конкретные суммы смотрите на официальной странице цен. Обзор вариантов с таблицей характеристик у нас в гайде сравнение векторных баз.

Важный момент при переходе с облачных эмбеддингов: размерность и метрика должны совпадать у индекса и у модели. Если вы раньше писали векторы OpenAI на 1536 измерений, а теперь перешли на EmbeddingGemma 2, индекс придётся пересчитать целиком — частичная миграция даст мусор в результатах без явной ошибки.

07Пять ошибок, которые ломают качество молча

  1. float16 вместо bfloat16. Активации модели выходят за диапазон — получаете NaN или деградировавшие векторы без исключения.
  2. Нет нормализации после усечения. Срез единичного вектора не единичной длины: косинус даёт правдоподобные, но неверные оценки.
  3. Разная размерность у запроса и индекса. 768-мерный запрос против 128-мерного индекса не сравнить; проверяйте это в коде, а не на глаз.
  4. Забытый префикс задачи. Карточка прямо предупреждает: без рекомендованного префикса качество текстовых эмбеддингов падает.
  5. Индексация заголовков «как есть». Префикс Document подставляет title: none, поэтому заголовок надо добавлять вручную в формате title: … | text: ….
Как проверить, что всё работает
Возьмите 20 пар «вопрос — правильный фрагмент» из своей базы, посчитайте recall@5 на 768 и на 256 измерениях. Если просадка меньше 1–2 пунктов — переходите на 256 и экономьте память. Если больше — оставайтесь на 512. Это дешевле, чем гадать по таблицам бенчмарков.

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

Что такое EmbeddingGemma 2?
Открытая мультимодальная модель эмбеддингов Google DeepMind на 740 млн параметров: текст, код, изображения, видео и аудио в общем 768-мерном пространстве. Лицензия Apache-2.0, контекст 8192 токена.
Сколько памяти нужно для EmbeddingGemma 2?
Текстовая часть — 270M параметров, полный мультимодальный вариант — 740M (примерно 1,5 ГБ в bfloat16). Ненужные кодировщики отключаются через config_kwargs, и модель занимает меньше памяти.
Можно ли усечь эмбеддинги до 256 измерений?
Да, модель обучена по MRL: поддерживаются 768, 512, 256 и 128 измерений. По MTEB мультиязычный балл падает с 61,36 до 60,41, а объём индекса уменьшается втрое. После усечения вектор нужно нормализовать.
Почему нельзя использовать float16?
Активации модели выходят за динамический диапазон float16, и вы получаете NaN или тихо деградировавшие эмбеддинги вместо ошибки. Используйте bfloat16 или float32.
Работает ли EmbeddingGemma 2 с русским языком?
Модель заявляет более 100 языков, включая русский, но авторы предупреждают о неравномерном качестве между языками. Для русскоязычного RAG обязательно проверьте recall на своей выборке.
Чем отличается от EmbeddingGemma 1?
Главное — мультимодальность: вторая версия кладёт картинки, видео и звук в то же пространство, что и текст, и даёт +9,9 пункта на MTEB code (78,68 против 68,76). Текстовые метрики выросли незначительно.

Источники и официальные ссылки

Вердикт Qantcore
8,6/ 10
EmbeddingGemma 2 — редкий случай, когда «локально» не означает «хуже»: 740 млн параметров, четыре модальности в одном пространстве, усечение до 256 измерений почти без потерь и Apache-2.0. Слабое место — видео и общий аудиобенчмарк, а также зависимость от префиксов задач: модель наказывает за небрежную интеграцию. Для текстового RAG на русском и для поиска по документам с картинками это один из самых практичных вариантов 2026 года, особенно если данные не должны покидать ваш контур.
Дальше — собрать поиск
Мы разбираем векторные базы и RAG-пайплайны по проверяемым характеристикам: размерности, тарифы, ограничения движков.