Мультимодальные модели эмбеддингов и реранкеры в Sentence Transformers


Sentence Transformers — это Python-библиотека, предназначенная для работы с моделями эмбеддингов и реранкерами, которые находят применение в таких задачах, как генерация с дополнением поиском и семантический поиск. С обновлением v5.4 вы сможете кодировать и сравнивать не только тексты, но и изображения, аудио с видео через привычный API.

Кроме того, вы сможете вычислять сходство между эмбеддингами текста и изображений, поскольку модель отображает и те, и другие в одно общее пространство.

Изучите, как архитектура Transformer изменилась в 2026 году, включая детали о Mixture of Experts. Это позволит вам понять, как эти технологии влияют на современные мультимодальные модели, такие как Sentence Transformers. Архитектура Transformer в 2026 году

Понимание основных бенчмарков для тестирования GenAI и LLM поможет оценить производительность новых моделей, в том числе и мультимодальных моделей. Бенчмарки тестирования GenAI и LLM

Содержание
  1. Что такое мультимодальные модели и чем они отличаются от текстовых
  2. Установка и требования к окружению
  3. Мультимодальные модели эмбеддингов
  4. Загрузка модели
  5. Кодирование изображений через model.encode в Sentence Transformers
  6. Кросс-модальное сходство
  7. Кодирование запросов и документов
  8. Мультимодальные модели реранкинга
  9. Ранжирование документов смешанных модальностей
  10. Предсказание оценок для пар
  11. Поиск с последующим реранкингом
  12. Форматы входных данных и конфигурация
  13. Поддерживаемые типы входных данных
  14. Проверка поддержки модальностей
  15. Параметры процессора и модели
  16. Поддерживаемые модели
  17. Поддерживаемые мультимодальные модели эмбеддингов
  18. Поддерживаемые мультимодальные модели реранкинга
  19. Только текстовые модели реранкинга (также новые в v5.4)
  20. Дополнительные ресурсы
  21. Документация
  22. Обучение
  23. Hugging Face Hub
  24. Ответы на эти вопросы могут быть для вас полезными

Что такое мультимодальные модели и чем они отличаются от текстовых

Традиционные модели эмбеддингов преобразуют текст в фиксированные векторы. Мультимодальные модели же добавляют к этому возможность обработки данных из разных источников (таких как текст, изображения, аудио и видео), объединяя их в одном эмбеддинговом пространстве, позволяя сравнивать текстовые запросы с изображениями и наоборот

В то время как традиционные реранкеры оценивают релевантность только пар текстов, мультимодальные реранкеры способны учитывать пары, где один или оба элемента представляют собой изображения или комбинированные документы с текстом и графикой.

Например, вы можете сравнивать текстовый запрос с документами-изображениями, находить видеоклипы, соответствующие описанию, или строить RAG-пайплайны, работающие с несколькими модальностями

Установка и требования к окружению

Мультимодальные модели требуют дополнительных зависимостей. Установите дополнения для нужных вам модальностей:

# Поддержка изображений
pip install -U "sentence-transformers[image]"
# Поддержка аудио
pip install -U "sentence-transformers[audio]"
# Поддержка видео
pip install -U "sentence-transformers[video]"
# Комбинированная установка
pip install -U "sentence-transformers[image,video,train]"

Модели на базе VLM (визуально-языковые модели), такие как Qwen3-VL-2B, требуют GPU с минимум 8 ГБ видеопамяти, а модели с 8B требуют около 20 ГБ. Если у вас нет локального GPU, вы можете воспользоваться облачными GPU-сервисами или Google Colab; на CPU они значительно медленнее.

Мультимодальные модели эмбеддингов

Загрузка модели

Загрузка мультимодальной модели эмбеддингов работает точно так же, как загрузка текстовой модели:

from sentence_transformers import SentenceTransformer
model = SentenceTransformer( "Qwen/Qwen3-VL-Embedding-2B", revision="refs/pr/23"
)

Параметр revision необходим, так как интеграция для этих моделей все еще находится на этапе обсуждения. После завершения этого процесса вы сможете загружать модели без указания ревизии.

Модель автоматически определяет поддерживаемые модальности, что позволяет избежать необходимости в дополнительной настройке Если вам нужно управлять такими параметрами, как разрешение изображений или точность модели, смотрите соответствующий раздел.

Кодирование изображений через model.encode в Sentence Transformers

После загрузки мультимодальной модели метод model.encode() принимает изображения наряду с текстом. Изображения можно передавать в виде URL-адресов, локальных путей к файлам или объектов PIL Image — все поддерживаемые форматы описаны в разделе про типы входных данных.

Кросс-модальное сходство

Вы можете вычислять сходство между эмбеддингами текста и эмбеддингами изображений, поскольку модель отображает и те, и другие в одно пространство:

# Кодируем изображения
img_embeddings = model.encode([ "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg", "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg",
])
# Кодируем текстовые запросы (один совпадающий + один жёсткий негатив на изображение)
text_embeddings = model.encode([ "A green car parked in front of a yellow building", "A red car driving on a highway", "A bee on a pink flower", "A wasp on a wooden table",
])
# Вычисляем кросс-модальные сходства
similarities = model.similarity(text_embeddings, img_embeddings)
print(similarities)
# tensor([[0.5115, 0.1078],
# [0.1999, 0.1108],
# [0.1255, 0.6749],
# [0.1283, 0.2704]])

Как и ожидалось, «A green car parked in front of a yellow building» наиболее похоже на изображение автомобиля (0.51), а «A bee on a pink flower» — на изображение пчелы (0.67). Жёсткие негативные примеры («A red car driving on a highway», «A wasp on a wooden table») корректно получают более низкие оценки.

Вы можете заметить, что даже лучшие оценки совпадения (0.51, 0.67) не очень близки к 1.0. Это связано с модальностным разрывом (modality gap): эмбеддинги из разных модальностей, как правило, группируются в отдельных областях пространства. Кросс-модальные сходства обычно ниже, чем внутримодальные (например, текст–текст), однако относительный порядок сохраняется, поэтому поиск по-прежнему работает хорошо.

Кодирование запросов и документов

На моём опыте для задач поиска лучше использовать методы encode_query() и encode_document(). Многие модели поиска добавляют разные инструкционные промпты в зависимости от того, является ли входные данные запросом или документом — аналогично тому, как чат-модели могут применять разные системные промпты в зависимости от цели. Авторы моделей могут указывать свои промпты в конфигурации модели, а encode_query() / encode_document() автоматически загружают и применяют нужный:

  • encode_query() использует промпт модели «query» (если доступен) и устанавливает task="query"
  • encode_document() использует первый доступный промпт из «document», «passage» или «corpus» и устанавливает task="document"

Под капотом оба метода являются тонкими обёртками над encode() — они просто берут на себя выбор промпта. Вот как выглядит кросс-модальный поиск:

# Кодируем текстовые запросы с промптом для запросов
query_embeddings = model.encode_query([ "Find me a photo of a vehicle parked near a building", "Show me an image of a pollinating insect",
])
# Кодируем скриншоты документов с промптом для документов
doc_embeddings = model.encode_document([ "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg", "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg",
])
# Вычисляем сходства
similarities = model.similarity(query_embeddings, doc_embeddings)
print(similarities)
# tensor([[0.3907, 0.1490],
# [0.1235, 0.4872]])

Эти методы принимают те же типы входных данных, что и encode() (изображения, URL-адреса, мультимодальные словари и т.д.), и передают те же параметры. Для моделей без специализированных промптов для запросов/документов они ведут себя идентично encode().

Мультимодальные модели реранкинга

Мультимодальные модели реранкинга (CrossEncoder) оценивают релевантность между парами входных данных, где каждый элемент может быть текстом, изображением, аудио, видео или их комбинацией. Они, как правило, превосходят модели эмбеддингов по качеству, но работают медленнее, поскольку обрабатывают каждую пару по отдельности. Доступные на данный момент предобученные мультимодальные реранкеры ориентированы на текстовые и графические входные данные, однако архитектура поддерживает любую модальность, с которой способна работать базовая модель.

Ранжирование документов смешанных модальностей

Метод rank() оценивает и ранжирует список документов относительно запроса, поддерживая смешанные модальности:

from sentence_transformers import CrossEncoder
model = CrossEncoder( "Qwen/Qwen3-VL-Reranker-2B", revision="refs/pr/11"
)
query = "A green car parked in front of a yellow building"
documents = [
# Документы-изображения (URL или локальный путь)
"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg", "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg",
# Текстовый документ
"A vintage Volkswagen Beetle painted in bright green sits in a driveway.",
# Комбинированный документ: текст + изображение
{ "text": "A car in a European city", "image": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg", },
]
rankings = model.rank(query, documents)
for rank in rankings: print(f"{rank['score']:.4f}\t(document {rank['corpus_id']})")
"""
0.9375 (document 0)
0.5000 (document 3)
-1.2500 (document 2)
-2.4375 (document 1)
"""

Реранкер корректно определяет изображение автомобиля (документ 0) как наиболее релевантный результат, за которым следует комбинированный документ «текст + изображение» об автомобиле в европейском городе (документ 3). Изображение пчелы (документ 1) получает наименьший балл. Следует учитывать, что разрыв между модальностями может влиять на абсолютные оценки: баллы для пар «текст–изображение» могут находиться в другом диапазоне, чем баллы для пар «текст–текст» или «изображение–изображение».

Вы также можете проверить, какие модальности поддерживает реранкер, используя modalities и supports() — точно так же, как и с моделями эмбеддингов.

Предсказание оценок для пар

Метод predict() позволяет получать сырые оценки релевантности для конкретных пар входных данных. Это удобно, когда нужно не ранжировать список, а получить числовую оценку для каждой пары независимо.

Поиск с последующим реранкингом

Распространённый паттерн — использовать модель эмбеддингов для быстрого первоначального поиска, а затем уточнять топовые результаты с помощью реранкера:

from sentence_transformers import SentenceTransformer, CrossEncoder

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

Форматы входных данных и конфигурация

Поддерживаемые типы входных данных

Мультимодальные модели принимают разнообразные форматы входных данных. В model.encode() можно передавать:

  • строки (текст)
  • URL-адреса изображений
  • локальные пути к файлам изображений
  • объекты PIL Image
  • словари с ключами text, image, audio, video для комбинированных документов

Проверка поддержки модальностей

Вы можете проверить, какие модальности поддерживает модель, используя свойство modalities и метод supports().

Параметры процессора и модели

Если нужно управлять такими параметрами, как разрешение изображений или точность модели, используйте аргументы processor_kwargs и model_kwargs при загрузке модели. Это позволяет тонко настраивать поведение под конкретную задачу без изменения кода инференса

Поддерживаемые модели

Ниже перечислены мультимодальные модели, поддерживаемые в v5.4, также доступные в коллекции интеграций v5.4.

Поддерживаемые мультимодальные модели эмбеддингов

МодельПараметрыМодальностиРевизия
Qwen/Qwen3-VL-Embedding-2B2BТекст, Изображение, Видеоrevision="refs/pr/23"
Qwen/Qwen3-VL-Embedding-8B8BТекст, Изображение, Видеоrevision="refs/pr/11"
nvidia/llama-nemotron-embed-vl-1b-v21.7BТекст, ИзображениеРевизия не требуется
nvidia/omni-embed-nemotron-3b4.7BТекст, ИзображениеРевизия не требуется
BAAI/BGE-VL-base0.1BТекст, ИзображениеРевизия не требуется
BAAI/BGE-VL-large0.4BТекст, ИзображениеРевизия не требуется
BAAI/BGE-VL-MLLM-S18BТекст, ИзображениеРевизия не требуется
BAAI/BGE-VL-MLLM-S28BТекст, ИзображениеРевизия не требуется

Поддерживаемые мультимодальные модели реранкинга

МодельПараметрыМодальностиРевизия
Qwen/Qwen3-VL-Reranker-2B2BТекст, Изображение, Видеоrevision="refs/pr/11"
Qwen/Qwen3-VL-Reranker-8B8BТекст, Изображение, Видеоrevision="refs/pr/9"
nvidia/llama-nemotron-rerank-vl-1b-v22BТекст, ИзображениеРевизия не требуется
jinaai/jina-reranker-m02BТекст, ИзображениеРевизия не требуется

Только текстовые модели реранкинга (также новые в v5.4)

МодельПараметрыРевизия
mixedbread-ai/mxbai-rerank-base-v20.5BРевизия не требуется
mixedbread-ai/mxbai-rerank-large-v22BРевизия не требуется

Пример использования только текстового реранкера:

model = CrossEncoder( "mixedbread-ai/mxbai-rerank-base-v2"
)
query = "How do I bake sourdough bread?"
documents = [ "Sourdough bread requires a starter made from flour and water, fermented over several days.", "The history of bread dates back to ancient Egypt around 8000 BCE.", "To bake sourdough, mix your starter with flour, water, and salt, then let it rise overnight.", "Rye bread is a popular alternative to wheat-based breads in Northern Europe.",
]
pairs = [(query, doc) for doc in documents]
scores = model.predict(pairs)
print(scores)

Дополнительные ресурсы

Документация

  • Sentence Transformer > Использование
  • Sentence Transformer > Предобученные модели
  • Cross Encoder > Использование
  • Cross Encoder > Предобученные модели
  • Установка

Обучение

В ближайшие недели я опубликую отдельный материал об обучении и дообучении мультимодальных моделей. А пока вы можете поэкспериментировать с инференсом на предобученных моделях или попробовать обучение, используя документацию:

  • Sentence Transformer > Обзор обучения
  • Sentence Transformer > Примеры обучения
  • Cross Encoder > Обзор обучения
  • Cross Encoder > Примеры обучения
  • Sparse Encoder > Обзор обучения
  • Sparse Encoder > Примеры обучения

Hugging Face Hub

  • Модели Sentence Transformers на Hub
  • Датасеты Sentence Transformers на Hub
  • Коллекция интеграций v5.4

Ответы на эти вопросы могут быть для вас полезными

Чем мультимодальная модель эмбеддингов отличается от обычной текстовой?

Обычная модель принимает только текст и возвращает вектор. Мультимодальная модель принимает текст, изображения, аудио или видео и отображает все эти форматы в одно общее пространство эмбеддингов, что позволяет сравнивать объекты разных типов напрямую.

Почему кросс-модальные оценки сходства ниже 1.0, даже когда запрос явно соответствует документу?

Это следствие модальностного разрыва (modality gap): эмбеддинги из разных модальностей группируются в разных областях пространства. Абсолютные значения оценок ниже, чем при сравнении текст–текст, однако относительный порядок сохраняется, и поиск работает корректно.

Когда использовать реранкер вместо модели эмбеддингов?

Модель эмбеддингов быстро обрабатывает большой корпус и хорошо подходит для первоначального отбора кандидатов. Реранкер оценивает каждую пару по отдельности и даёт более точные оценки релевантности, но работает медленнее. Оптимальный паттерн — двухэтапный: сначала быстрый поиск по эмбеддингам, затем реранкинг топ-N результатов.

Нужен ли GPU для работы с мультимодальными моделями на базе VLM?

Да. Модели на базе VLM, такие как Qwen3-VL-2B, требуют GPU с не менее чем ~8 ГБ видеопамяти. На CPU инференс будет крайне медленным. Если локального GPU нет, подойдут облачные GPU-сервисы или Google Colab. Для CPU-инференса лучше использовать текстовые или CLIP-модели.

Зачем указывать параметр revision при загрузке некоторых моделей?

На момент выхода v5.4 pull request’ы интеграции для ряда моделей ещё не были слиты в основную ветку репозитория. Параметр revision позволяет загрузить нужную версию модели напрямую из открытого PR. После слияния PR загрузка будет работать без указания ревизии.

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x