获取 YOLO 许可
返回 Ultralytics 术语表

ColBERT

ColBERT 将查询和文档编码为逐 token 的 BERT 嵌入,并通过后期交互(MaxSim)进行评分,实现快速、准确的搜索和 RAG。

ColBERT(基于 BERT 的上下文化后期交互)是一种神经检索模型,它将查询和每篇文档分别表示为每个token一个嵌入,并通过后期交互为文档打分:每个查询 token 找到与之最相似的文档 token,然后将这些最大相似度(称为 MaxSim)相加,得到相关性分数。斯坦福大学的 Omar Khattab 和 Matei Zaharia 在 SIGIR 2020 论文 ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT 中介绍了该模型。文档 token 嵌入只需离线计算一次,因此查询时只需进行简单的相似度计算,而不必对每篇候选文档都完整运行一次 BERT。

后期交互的适用场景#

神经检索器的区别在于查询和文档何时进行交互。双编码器将每段文本压缩为一个向量,这是向量搜索的标准设置:文档向量预先计算好,搜索速度快,但单个向量会模糊各个词项之间的差异。交叉编码器将查询和文档一起输入Transformer,让注意力比较每一对 token。它们精度最高,但每个查询-文档对都必须运行一次,因此只适用于对较短的候选列表进行重排序。

ColBERT 像双编码器一样分别编码查询和文档,但会为每个 token 保留一个 128 维向量,并且只在最后的 MaxSim 步骤中让两侧交互。查询会用 BERT 的掩码 token 填充到固定的 32 个 token,这为模型提供了额外位置,用于扩展查询中的相关词项。在 MS MARCO 和 TREC CAR 段落搜索基准测试中,ColBERT 的表现可与基于 BERT 的排序器相媲美,同时运行速度快两个数量级,每次查询使用的 FLOPs 少四个数量级。

计算 MaxSim 分数#

MaxSim 算子只需几行 PyTorch 代码。下面的示例将其应用于一个小型 BERT 系列编码器生成的上下文 token 嵌入:

import torch.nn.functional as F
from sentence_transformers import SentenceTransformer

encoder = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
query = "who wrote the novel Dune"
docs = [
    "Frank Herbert published the science fiction novel Dune in 1965.",
    "A dune is a hill of sand shaped by the wind.",
]

# One L2-normalized contextual embedding per query token
q = F.normalize(encoder.encode(query, output_value="token_embeddings"), dim=-1)
for doc in docs:
    d = F.normalize(encoder.encode(doc, output_value="token_embeddings"), dim=-1)

    # MaxSim: each query token keeps its best-matching document token, and the maxima are summed
    score = (q @ d.T).max(dim=1).values.sum()
    print(f"{score.item():.2f}  {doc}")

小说段落的得分为 5.90,沙丘段落的得分为 4.33。两段都包含“dune”,因此该词在两段中都能获得较高匹配分数;但在第一段中,查询 token“wrote”与“published”的余弦相似度为 0.72,而“novel”则与自身匹配;在第二段中,“wrote”所能找到的最佳匹配只有 0.29。

  • BERT 本身:ColBERT 为检索任务微调的预训练编码器,并添加一个将每个 token 投影到 128 维的线性层。
  • 后期分块:同样会先在上下文中编码文本再进行拆分,然后将 token 平均为每个块的一个向量;而 ColBERT 会保留每个 token 向量。
  • 语义搜索:ColBERT 执行的任务,即按段落含义而非共享关键词对段落排序。
  • 混合搜索:合并关键词搜索结果和单向量搜索结果,同时实现精确词项匹配和语义匹配。ColBERT 的 token 级匹配则在单个神经模型中实现了部分精确匹配能力。

图像中的后期交互#

后期交互也适用于图像。ColPali(2024)使用视觉语言模型将每页文档截图嵌入为 patch 向量网格,再用 MaxSim 对查询 token 进行匹配,从而将后期交互引入基于 PDF 的多模态 RAG。开放词汇检测出于类似原因保留了细粒度图像特征:Ultralytics YOLOE 会为每个提示类别(例如“双层巴士”)存储一个文本嵌入,并将其与特征图每个位置上的区域特征进行比较,因此简短提示就能匹配一个小物体,而不是使用一个概括整幅图像的单一向量。

ColBERTv2 和 PLAID#

为每个 token 存储一个向量,会让 ColBERT 索引的大小约为单向量索引的十倍;当 ColBERT 在检索增强生成(RAG)流程中充当第一阶段检索器或重排序器时,这一开销尤为重要。斯坦福 ColBERT 代码库实现了两种解决方案。PLAID 是一种搜索引擎,会先根据聚类质心为候选项打分,再运行完整的 MaxSim。ColBERTv2(NAACL 2022)将每个 token 向量存为最近质心的 ID,并将残差量化为每维 1 或 2 位;它还通过交叉编码器蒸馏得到去噪监督信号进行训练,其残差压缩将后期交互的存储占用减少了 6 到 10 倍。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来