使用 Sentence Transformers 的多模态 Embedding 与 Reranker 模型
摘要
Sentence Transformers v5.4 引入了对多模态嵌入和重排序的支持,允许用户使用统一的 API 对文本、图像、音频和视频进行编码和比较。
查看缓存全文
缓存时间: 2026/05/08 09:09
多模态 Embedding 与 Reranker 模型:Sentence Transformers 实践指南
来源:https://huggingface.co/blog/multimodal-sentence-transformers 返回文章列表 (https://huggingface.co/blog)
Tom Aarsen 的头像 (https://huggingface.co/tomaarsen)
- 目录 (https://huggingface.co/blog/multimodal-sentence-transformers#table-of-contents)
- 什么是多模态模型? (https://huggingface.co/blog/multimodal-sentence-transformers#what-are-multimodal-models)
- 安装 (https://huggingface.co/blog/multimodal-sentence-transformers#installation)
- 多模态 Embedding 模型 (https://huggingface.co/blog/multimodal-sentence-transformers#multimodal-embedding-models)- 加载模型 (https://huggingface.co/blog/multimodal-sentence-transformers#loading-a-model) - 编码图像 (https://huggingface.co/blog/multimodal-sentence-transformers#encoding-images) - 跨模态相似度 (https://huggingface.co/blog/multimodal-sentence-transformers#cross-modal-similarity) - 编码查询与文档 (https://huggingface.co/blog/multimodal-sentence-transformers#encoding-queries-and-documents)
- 多模态 Reranker 模型 (https://huggingface.co/blog/multimodal-sentence-transformers#multimodal-reranker-models)- 多模态文档排序 (https://huggingface.co/blog/multimodal-sentence-transformers#ranking-mixed-modality-documents) - 预测配对分数 (https://huggingface.co/blog/multimodal-sentence-transformers#predicting-pair-scores)
- 检索与重排序 (https://huggingface.co/blog/multimodal-sentence-transformers#retrieve-and-rerank)
- 输入格式与配置 (https://huggingface.co/blog/multimodal-sentence-transformers#input-formats-and-configuration)- 支持的输入类型 (https://huggingface.co/blog/multimodal-sentence-transformers#supported-input-types) - 检查模态支持 (https://huggingface.co/blog/multimodal-sentence-transformers#checking-modality-support) - Processor 与 Model kwargs (https://huggingface.co/blog/multimodal-sentence-transformers#processor-and-model-kwargs)
- 支持的模型 (https://huggingface.co/blog/multimodal-sentence-transformers#supported-models)- 支持的多模态 Embedding 模型 (https://huggingface.co/blog/multimodal-sentence-transformers#supported-multimodal-embedding-models) - 支持的多模态 Reranker 模型 (https://huggingface.co/blog/multimodal-sentence-transformers#supported-multimodal-reranker-models) - 纯文本 Reranker 模型(v5.4 新特性) (https://huggingface.co/blog/multimodal-sentence-transformers#text-only-reranker-models-also-new-in-v54) - CLIP 模型 (https://huggingface.co/blog/multimodal-sentence-transformers#clip-models)
- 其他资源 (https://huggingface.co/blog/multimodal-sentence-transformers#additional-resources)- 文档 (https://huggingface.co/blog/multimodal-sentence-transformers#documentation) - 训练 (https://huggingface.co/blog/multimodal-sentence-transformers#training) - Hugging Face Hub (https://huggingface.co/blog/multimodal-sentence-transformers#hugging-face-hub) - 相关博客 (https://huggingface.co/blog/multimodal-sentence-transformers#companion-blogposts)
Sentence Transformers (https://sbert.net/) 是一个用于使用和训练 embedding 与 reranker 模型的 Python 库,适用于检索增强生成(RAG)、语义搜索等场景。随着 v5.4 版本的更新,你现在可以使用熟悉的 API 来编码和对比文本、图像、音频和视频。在本篇博客中,我将展示如何在 embedding 和 reranking 中使用这些新多模态能力。
多模态 embedding 模型将不同模态的输入映射到共享的 embedding 空间,而多模态 reranker 模型则对混合模态配对的相关性进行打分。这开启了视觉文档检索、跨模态搜索、多模态 RAG 流水线等应用场景。
如果你想训练自己的多模态模型,请查看配套博客:使用 Sentence Transformers 训练与微调多模态 Embedding & Reranker 模型。
目录 (https://huggingface.co/blog/multimodal-sentence-transformers#table-of-contents)
- 什么是多模态模型? (https://huggingface.co/blog/multimodal-sentence-transformers#what-are-multimodal-models)
- 安装 (https://huggingface.co/blog/multimodal-sentence-transformers#installation)
- 多模态 Embedding 模型 (https://huggingface.co/blog/multimodal-sentence-transformers#multimodal-embedding-models)- 加载模型 (https://huggingface.co/blog/multimodal-sentence-transformers#loading-a-model) - 编码图像 (https://huggingface.co/blog/multimodal-sentence-transformers#encoding-images) - 跨模态相似度 (https://huggingface.co/blog/multimodal-sentence-transformers#cross-modal-similarity) - 编码查询与文档 (https://huggingface.co/blog/multimodal-sentence-transformers#encoding-queries-and-documents)
- 多模态 Reranker 模型 (https://huggingface.co/blog/multimodal-sentence-transformers#multimodal-reranker-models)- 多模态文档排序 (https://huggingface.co/blog/multimodal-sentence-transformers#ranking-mixed-modality-documents) - 预测配对分数 (https://huggingface.co/blog/multimodal-sentence-transformers#predicting-pair-scores)
- 检索与重排序 (https://huggingface.co/blog/multimodal-sentence-transformers#retrieve-and-rerank)
- 输入格式与配置 (https://huggingface.co/blog/multimodal-sentence-transformers#input-formats-and-configuration)- 支持的输入类型 (https://huggingface.co/blog/multimodal-sentence-transformers#supported-input-types) - 检查模态支持 (https://huggingface.co/blog/multimodal-sentence-transformers#checking-modality-support) - Processor 与 Model kwargs (https://huggingface.co/blog/multimodal-sentence-transformers#processor-and-model-kwargs)
- 支持的模型 (https://huggingface.co/blog/multimodal-sentence-transformers#supported-models)
- 其他资源 (https://huggingface.co/blog/multimodal-sentence-transformers#additional-resources)
什么是多模态模型? (https://huggingface.co/blog/multimodal-sentence-transformers#what-are-multimodal-models)
传统的 embedding 模型将文本转换为固定大小的向量。多模态 embedding 模型在此基础上扩展,将来自不同模态(文本、图像、音频或视频)的输入映射到共享的 embedding 空间。这意味着你可以使用熟悉的相似度函数,将文本查询与图像文档进行对比(反之亦然)。
类似地,传统的 reranker(Cross Encoder)模型计算文本配对之间的相关性分数。多模态 reranker 则可以对其中一个或两个元素为图像、图文组合文档或其他模态的配对进行打分。
例如,你可以将文本查询与图像文档对比、找到与描述匹配的视频片段,或构建跨模态工作的 RAG 流水线。
安装 (https://huggingface.co/blog/multimodal-sentence-transformers#installation)
多模态模型需要额外的依赖。根据你需要的模态安装对应的 extras(详见安装文档):
# 图像支持
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 需要至少约 8 GB VRAM 的 GPU。对于 8B 版本,预计需要约 20 GB。如果没有本地 GPU,可考虑使用云 GPU 服务或 Google Colab。在 CPU 上运行这些模型会非常慢;纯文本或 CLIP 模型更适合 CPU 推理。
多模态 Embedding 模型 (https://huggingface.co/blog/multimodal-sentence-transformers#multimodal-embedding-models)
加载模型 (https://huggingface.co/blog/multimodal-sentence-transformers#loading-a-model)
加载多模态 embedding 模型的方式与加载纯文本模型完全相同:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("Qwen/Qwen3-VL-Embedding-2B")
部分模型目前可能需要
revision参数,如果其集成 PR 尚未合并。合并后,就可以像上面那样直接加载,无需指定 revision。
模型会自动检测支持的模态,无需额外配置。如需控制图像分辨率、模型精度等参数,请参阅 Processor 与 Model kwargs。
编码图像 (https://huggingface.co/blog/multimodal-sentence-transformers#encoding-images)
加载多模态模型后,model.encode() (https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.encode) 可同时接受图像和文本。图像可通过 URL、本地文件路径或 PIL Image 对象提供(详见支持的输入类型):
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("Qwen/Qwen3-VL-Embedding-2B")
# 从 URL 编码图像
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",
])
print(img_embeddings.shape)
# (2, 2048)
跨模态相似度 (https://huggingface.co/blog/multimodal-sentence-transformers#cross-modal-similarity)
由于模型将文本和图像映射到同一空间,你可以计算它们之间的相似度:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("Qwen/Qwen3-VL-Embedding-2B")
# 编码图像
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 较远。这是由于模态差距:不同模态的 embedding 倾向于聚集在空间的不同区域。跨模态相似度通常低于同模态相似度(如文本-文本),但相对排序得以保留,因此检索效果仍然良好。
编码查询与文档 (https://huggingface.co/blog/multimodal-sentence-transformers#encoding-queries-and-documents)
对于检索任务,推荐使用 encode_query() (https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.encode_query) 和 encode_document() (https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.encode_document)。许多检索模型会根据输入是查询还是文档来前置不同的指令提示,类似于聊天模型根据目标应用不同的系统提示。模型作者可以在模型配置中指定提示词,encode_query()/encode_document() 会自动加载并应用正确的提示:
encode_query()使用模型的"query"提示(如可用),并设置task="query"。encode_document()使用"document"、"passage"或"corpus"中第一个可用的提示,并设置task="document"。
底层而言,两者都是 encode() 的轻量封装,仅负责提示词选择。以下是跨模态检索的示例:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("Qwen/Qwen3-VL-Embedding-2B")
# 使用查询提示编码文本查询
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() 完全一致。
多模态 Reranker 模型 (https://huggingface.co/blog/multimodal-sentence-transformers#multimodal-reranker-models)
多模态 reranker(CrossEncoder)模型对输入配对的相关性进行打分,每个元素可以是文本、图像、音频、视频或它们的组合。它们在质量上通常优于 embedding 模型,但速度较慢,因为需要逐对处理。目前可用的预训练多模态 reranker 主要聚焦文本和图像输入,但架构支持底层模型能处理的任何模态。
多模态文档排序 (https://huggingface.co/blog/multimodal-sentence-transformers#ranking-mixed-modality-documents)
rank() (https://sbert.net/docs/package_reference/cross_encoder/cross_encoder.html#sentence_transformers.cross_encoder.CrossEncoder.rank) 方法对文档列表相对于查询进行打分和排序,支持混合模态:
from sentence_transformers import CrossEncoder
model = CrossEncoder("Qwen/Qwen3-VL-Reranker-2B")
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)
"""
Reranker 正确识别出汽车图像(document 0)为最相关结果,其次是关于汽车的图文组合文档(document 3)。
相似文章
使用 Sentence Transformers 训练和微调多模态 Embedding 与 Reranker 模型
本文提供了使用 Sentence Transformers 库训练和微调多模态 Embedding 与 Reranker 模型的技术指南,展示了在基于 Qwen3-VL 的视觉文档检索任务上的性能提升。
jina-embeddings-v5-omni:通过冻结塔组合实现文本几何保持的多模态嵌入
本文介绍了 jina-embeddings-v5-omni,这是一套多模态嵌入模型,通过冻结塔组合技术将文本嵌入扩展至图像、音频和视频。该方法仅训练总权重的 0.35%,在保持文本几何结构的同时,以显著降低的计算成本实现了极具竞争力的最先进性能。
你的嵌入模型比你想象的更聪明
SMART是一个框架,能够解锁单向量模型中的潜在多向量能力,用于多模态检索,通过对比训练和后期交互推理,在降低计算成本的同时提升最先进的性能。
MulTaBench:基于文本与图像的多模态表格学习基准测试
介绍了 MulTaBench,一个包含40个数据集的基准测试,用于文本和图像模态的多模态表格学习。实验表明,任务特定的嵌入调优优于冻结的预训练嵌入,特别是在模态提供互补预测信号时。
通过多模态突破纯文本瓶颈?
本文讨论了多模态 AI 模型(如 GPT-4o 和 Claude 3.5 Sonnet)如何通过支持可视化调试、音频转数据以及增强型 RAG 系统,来克服纯文本处理的瓶颈。