Sentence Transformers 6.0 新增 MultiVectorEncoder:把 ColBERT 式多向量检索纳入主库
Sentence Transformers 6.0 引入 MultiVectorEncoder,为 ColBERT 式的 late interaction 多向量检索提供原生支持,保留 token 级向量并在打分阶段用 MaxSim 进行匹配。此升级将多向量检索能力整合进同一接口,增强视觉文档、音频和视频检索场景,但也带来更高的索引和计算成本及兼容性要求。
Sentence Transformers 6.0 引入 MultiVectorEncoder,为 ColBERT 式的 late interaction 多向量检索提供原生支持,保留 token 级向量并在打分阶段用 MaxSim 进行匹配。此升级将多向量检索能力整合进同一接口,增强视觉文档、音频和视频检索场景,但也带来更高的索引和计算成本及兼容性要求。
Hugging Face 于 2026 年 8 月 18 日发布的官方博客显示,Sentence Transformers 6.0 新增了 MultiVectorEncoder 模型类型,为 ColBERT 式 late interaction(后期交互)检索提供原生支持。新接口不再把一段文档压缩成一个固定长度的向量,而是保留每个 token 的向量表示,并在查询时通过 MaxSim 算法完成匹配。
这意味着 Sentence Transformers 的能力范围从传统的单向量 embedding、交叉编码器重排和稀疏编码,扩展到第四类模型:多向量检索模型。它并不是一次新的基础模型发布,而是一次面向检索框架、模型加载、训练和评估流程的开源库升级。
从单向量压缩转向 token 级匹配
传统的 dense embedding 会把整段文本编码为一个向量。例如,一篇文档可能最终被表示为 384、768 或 1024 个数字,再通过一次向量相似度计算与查询进行匹配。这种方式速度快、索引相对紧凑,但也意味着文档中的细节必须被压缩到同一个向量里。
对于包含多个条件的查询,或者包含产品编号、函数名、罕见实体和关键限定语的文档,这种压缩可能会丢失部分信息。Sentence Transformers 官方博客以“带木质腿和圆形坐垫的绿色沙发”为例说明,单一向量需要把多个属性融合成一个整体表示,可能因此弱化其中某个具体条件。
MultiVectorEncoder 采用了不同的策略。模型会为每个 token 保留一个较低维度的向量。一段有 9 个 token 的文本,得到的不是一个固定长度向量,而是一个 9×128 的矩阵。查询与文档仍然可以分别预先编码,但两者的细粒度交互被推迟到打分阶段,这也是 late interaction 名称的来源。
MaxSim 的计算方式是:对查询中的每个 token,寻找文档 token 中与其相似度最高的向量,再把这些最高相似度相加。由于每个查询 token 都可以寻找自己的文档匹配点,算法既能处理语义相近的表达,也能保留对精确词项的敏感性。
例如,官方博客展示的模型可以把查询中的 “live” 与文档中的 “inhabit” 对齐,即使两个词没有字符层面的重合。另一方面,当查询涉及产品代码、姓氏或函数名时,相关 token 也能够单独参与匹配,而不必被整段文本的平均表示完全稀释。
PyLate、ColBERT 和 ColPali 模型可通过统一接口加载
Sentence Transformers 6.0 的一个重要变化,是把此前分散在不同项目中的 late-interaction 能力纳入同一套 API。官方公告称,PyLate checkpoint 和 Stanford-NLP ColBERT checkpoint 可以直接加载;面向视觉文档检索的 colpali-engine 模型,也可以通过适配配置接入这一接口。
最基本的使用方式与 Sentence Transformers 既有模型相似:
from sentence_transformers import MultiVectorEncoder
model = MultiVectorEncoder("lightonai/LateOn")
query_embeddings = model.encode_query(["哪个星球被称为红色星球?"])
document_embeddings = model.encode_document([
"金星常被称为地球的孪生兄弟。",
"火星因表面呈红色而常被称为红色星球。",
])
scores = model.similarity(query_embeddings, document_embeddings)
不过,多向量模型与普通 embedding 模型有一个重要区别:查询和文档必须分别使用 encode_query 与 encode_document。官方文档指出,两者可能使用不同的前缀、长度上限和评分掩码,不能像许多单向量模型那样随意互换。
模型输出也不再是一个可以直接堆叠成规则矩阵的张量。由于不同文本的 token 数量不同,返回结果是由多个二维张量组成的列表,每个输入对应一个形状为 (num_tokens, embedding_dim) 的矩阵。这种数据结构更适合表达 token 级信息,但也会给批处理、显存管理和索引系统带来额外要求。
视觉文档、音频和视频检索成为同一套工作流的一部分
官方示例覆盖了语义搜索、retrieve-and-rerank、Vespa 索引,以及文档图像、音频和视频检索。对于视觉文档检索,ColPali 一类模型可以直接把页面图像作为文档表示,让文本查询与页面中的视觉区域进行匹配,而不必先经过传统 OCR 流程。
这类能力对发票、表格、幻灯片、扫描文档和版式复杂的 PDF 尤其有意义。传统 OCR 往往需要先把页面转换成文本,再在文本层面进行检索;视觉文档检索则可以保留版面、图表和页面区域之间的关系。通过 late interaction,查询中的不同词语可以分别对应页面图像中的不同 patch。
同样的思路也可以扩展到音频和视频。与其把一段长视频或音频压缩成一个整体向量,多向量表示允许系统保留更细粒度的时间片段或内容片段,再在检索阶段寻找与查询最相关的局部信息。不过,具体效果仍取决于 checkpoint、模态编码器、数据切分方式和部署索引,不能仅根据接口本身推断所有任务都会获得相同收益。
更高的检索质量,换来更大的索引和计算成本
多向量检索的核心代价是存储与评分成本。Hugging Face 博客以 Natural Questions 的 4,874 个 passage 为例,lightonai/LateOn 生成了 608,414 个 token 向量,平均每个 passage 约 124.8 个 token 向量。按照 float32 计算,该索引约占 311.5 MB;相比之下,all-MiniLM-L6-v2 的单向量索引约为 7.5 MB。
这意味着,在未压缩的情况下,多向量索引可能是同规模单向量索引的数十倍。官方示例给出的比较约为 42 倍,但通过量化、PLAID 等索引方法可以明显降低实际占用。博客指出,同一批 token 向量在 fast-plaid 索引中可以压缩到约 92 MB。
评分阶段也存在显存压力。MaxSim 需要处理查询 token 与文档 token 之间的匹配。Sentence Transformers 6.0 提供 chunk_elements 参数,用于限制中间张量的规模,并允许通过分块和指定设备来处理超过 GPU 显存容量的语料库。
此外,MaxSim 的总分会随着查询 token 数量增加而变化,不同模型或不同查询处理方式之间的原始分数不宜直接比较。如果需要有界的评分,可以使用 meanmaxsim,将总分除以查询 token 数量,得到平均余弦相似度。
因此,MultiVectorEncoder 并不意味着单向量 embedding 会被完全替代。对于规模很大的候选集,单向量检索仍然适合作为高效的第一阶段召回;多向量模型则可以作为更精确的召回器或重排器,尤其适用于需要保留局部匹配信息的任务。最终采用哪种方案,需要在召回质量、索引大小、延迟、显存和更新频率之间进行权衡。
6.0 也是一次带有兼容性要求的重大升级
Sentence Transformers 项目的 GitHub 发行说明将 6.0.0 标记为一次重大版本更新。该版本要求 transformers 5.x、PyTorch 2.2 及以上,以及 huggingface-hub 1.x;Python 最低版本保持为 3.10。官方迁移指南还提醒,部分旧版本依赖、量化索引和自定义模块的行为发生了变化。
对 PyLate 用户而言,新的 MultiVectorEncoder 提供了迁移路径:原有 PyLate checkpoint 可以直接加载,但训练和检索接口需要从 PyLate 的 encode(..., is_query=True/False) 等调用方式调整为 encode_query 和 encode_document。官方迁移指南同时说明,Sentence Transformers 目前没有完全等价于 PyLate PLAID 检索器的内置组件;如果依赖特定的索引方案,仍可能需要保留 PyLate 的独立环境。
安装方面,纯推理可以使用普通的 sentence-transformers==6.0.0,训练需要相应的 train extra,视觉、音频和视频任务则需要安装对应的可选依赖。对于已经锁定旧版 transformers 或 PyTorch 的生产环境,升级前应先检查依赖冲突和已有索引的兼容性。
这次更新真正改变的是检索基础设施的选择
Sentence Transformers 6.0 的意义不在于推出一个新的基础模型,而在于降低 late-interaction 模型进入常规工程栈的门槛。此前,团队通常需要在 Sentence Transformers、PyLate、ColBERT、ColPali 或自建检索代码之间维护不同的模型和训练接口;现在,至少在模型加载、编码、评分和评估层面,更多能力可以在同一项目中组织起来。
但这并不消除部署难题。多向量索引仍然需要更大的存储空间,MaxSim 仍然需要更复杂的候选生成和分块策略,视觉文档检索也需要根据页面类型选择合适的 checkpoint。官方博客展示的 benchmark 结果说明多向量表示在多个检索任务上可能优于相同规模的单向量模型,但具体结论依赖模型、数据集和索引方案,不能简单概括为“多向量一定更好”。
对正在构建语义搜索、检索增强生成(RAG)或多模态文档系统的开发者来说,新的接口提供了一个更清晰的试验入口:可以先用单向量模型完成大规模初召回,再以 MultiVectorEncoder 对重点候选进行精细匹配;也可以在页面图像、复杂版式和包含多个精确约束的查询中直接测试 late interaction 的价值。
在这条路径上,Sentence Transformers 6.0 把 ColBERT 式检索从相对独立的工程选择,进一步变成了主流开源 embedding 工具链中的一等能力。它是否适合某个实际系统,仍要由真实数据集上的召回率、延迟、索引成本和维护复杂度来回答。
来源:
- Hugging Face:Multi-Vector (Late Interaction) Embedding Models with Sentence Transformers
- Sentence Transformers 6.0.0 GitHub Release
- Sentence Transformers 官方文档
- Sentence Transformers Quickstart:Multi-Vector Encoder
- Sentence Transformers Migration Guide
- ColBERT 论文:Efficient and Effective Passage Search via Contextualized Late Interaction over BERT
不错过任何一条 AI 大事
订阅 AIFlux 早报,每天 3 分钟看懂产业动态。

