Late-interaction: когда не нужно сливать всё в один блендер
Представьте, что вы ищете в медицинском справочнике. Текст говорит про воспаление лёгких, а на картинке - рентгеновский снимок со странным затемнением. Обычная мультимодальная модель пытается слить эти два сигнала в один вектор ещё на этапе эмбеддинга. Как результат - теряется половина информации.
ColEmbed V2 не смешивает изображения и текст заранее. Она генерирует отдельные эмбеддинги для каждого модальности, а сравнивает их только в момент поиска. Это как держать ингредиенты в разных мисках до самого момента готовки.
Архитектура выглядит так: ViDoRe V3 для изображений (последняя версия на 04.02.2026), трансформер для текста, и специальный слой late-interaction, который вычисляет сходство между ними уже после того, как каждый получил своё векторное представление.
Три размера на выбор: от 3B до 8B параметров
NVIDIA выпустила три версии модели, и выбор зависит от того, сколько у вас GPU-памяти и насколько точный поиск нужен:
| Модель | Параметры | VRAM (FP16) | Точность на BEIR |
|---|---|---|---|
| ColEmbed V2-3B | 3 миллиарда | ~6 ГБ | 58.2 |
| ColEmbed V2-4B | 4 миллиарда | ~8 ГБ | 61.7 |
| ColEmbed V2-8B | 8 миллиарда | ~16 ГБ | 64.1 |
Цифры по BEIR - это средний показатель по 15 датасетам для текстового поиска. Для мультимодальных задач разница заметнее: 8B-версия на 12% точнее в поиске по документам с таблицами и схемами.
Установка: проще, чем кажется (если у вас есть GPU)
Если вы уже работали с мультимодальным RAG на Llama Nemotron, то ColEmbed V2 покажется знакомой. Но есть нюансы.
pip install transformers torch torchvision
pip install sentencepiece protobuf
Не пытайтесь запустить 8B-версию на карте с 8 ГБ VRAM. Даже с 4-битным квантованием она займет около 10 ГБ. Проверьте свободную память через nvidia-smi перед загрузкой.
Базовый код для генерации эмбеддингов выглядит так:
from transformers import AutoProcessor, AutoModel
import torch
from PIL import Image
processor = AutoProcessor.from_pretrained(
"nvidia/Nemotron-ColEmbed-V2-8B",
trust_remote_code=True
)
model = AutoModel.from_pretrained(
"nvidia/Nemotron-ColEmbed-V2-8B",
torch_dtype=torch.float16,
device_map="auto",
trust_remote_code=True
)
# Для текста
inputs = processor(text=["медицинский отчет о пневмонии"], return_tensors="pt")
with torch.no_grad():
text_embeddings = model.get_text_features(**inputs)
# Для изображения
image = Image.open("xray.png")
inputs = processor(images=[image], return_tensors="pt")
with torch.no_grad():
image_embeddings = model.get_image_features(**inputs)
Ключевой момент: text_embeddings и image_embeddings имеют одинаковую размерность (1024 для 8B-версии), но вычисляются независимо. Сравнивать их нужно через косинусное сходство уже в вашем поисковом индексе.
Почему ColEmbed V2 бьет Llama-Nemotron-Embed-VL-1B по всем фронтам
Старая модель от NVIDIA (да, та самая, что мы обсуждали в статье про мультимодальный RAG) имела один фатальный недостаток: раннее слияние модальностей.
Конкретные цифры из бенчмарков NVIDIA (актуальные на 04.02.2026):
- Поиск по научным статьям с графиками: +18% точности
- Поиск по товарам с фотографиями: +22% точности
- Поиск по медицинским документам: +25% точности (тут late-interaction особенно важен)
- Скорость инференса: в 1.8 раза быстрее при том же железе
Но есть и минус. ColEmbed V2 требует в 2-3 раза больше памяти. Если у вас ограниченные ресурсы, придется выбирать между точностью и возможностью запуска.
Квантование для поиска: можно ли сжать без потерь?
Техника, о которой мы писали в статье про ускорение инференса, здесь работает иначе. Для поисковых эмбеддингов квантование - это минное поле.
Попробуйте сжать 8B-модель до 4 бит - и точность поиска упадет на 30%. Почему? Потому что late-interaction архитектура чувствительна к малейшим искажениям в векторах. Каждый бит важен.
NVIDIA официально рекомендует использовать FP16 для production. INT8 работает с потерей 5-7% точности, но только для 8B-версии. Меньшие модели теряют слишком много.
Кому подойдет ColEmbed V2, а кому лучше остаться на старом
Берём ColEmbed V2 если:
- У вас документы с таблицами, схемами, графиками (финансовые отчеты, научные статьи)
- Есть GPU с 12+ ГБ VRAM (для 8B-версии) или 8+ ГБ (для 4B)
- Точность поиска важнее скорости и экономии памяти
- Нужен поиск по смешанным запросам вроде "найди график, где доход падал в третьем квартале"
Остаёмся на Llama-Nemotron-Embed-VL-1B или других моделях из обзора мультимодальных моделей если:
- Работаете на CPU или слабом GPU
- В основном ищете по тексту, а изображения - второстепенны
- Нужна максимальная скорость (1B-модель в 4 раза быстрее)
- Уже настроили пайплайн под раннее слияние модальностей и не хотите переписывать код
Практический совет: как не сломать RAG пайплайн
Самая частая ошибка при переходе с Llama-Nemotron на ColEmbed V2 - попытка использовать старые индексы. Не делайте так.
Эмбеддинги от разных архитектур несовместимы. Придется переиндексировать все документы. Звучит болезненно, но есть лайфхак: индексируйте только новые документы ColEmbed V2, а старые оставьте на предыдущей модели. Потом объединяйте результаты поиска через реранкинг.
И ещё момент: ColEmbed V2 возвращает нормализованные векторы (длина = 1). Не забывайте об этом при вычислении косинусного сходства - не нужно дополнительно нормализовать.
Что дальше? Судя по тому, как NVIDIA развивает Nemotron-семейство (вспомните Nemotron-3-nano:30b), через полгода увидим ColEmbed V3 с поддержкой видео и аудио. А пока - late-interaction архитектура становится новым стандартом для мультимодального поиска. Те, кто успеют перейти сейчас, получат преимущество в точности, которое конкурентам будет сложно догнать.