Reranker
重排序器会使用交叉编码器等更慢但更准确的模型,对检索器返回的候选列表重新评分,然后再将结果交给用户或 LLM。
重排序器是一种模型,它接收快速第一阶段检索器给出的短候选列表,更仔细地根据查询为每个候选项评分,然后重新排序。搜索引擎、检索增强生成(RAG)流水线和推荐系统都会采用这种方式,因为最准确的相关性模型运行速度太慢,无法处理数百万份文档,但足以处理排名前几十到几百的结果。在文本搜索中,标准的重排序器是交叉编码器:一种Transformer,它同时读取查询和一个候选项,并输出单一相关性分数。Nogueira 和 Cho(2019)以这种方式微调了 BERT,并在 MS MARCO 段落排序排行榜上夺冠,其 MRR@10 相对高于此前最佳结果 27%。
检索后重排序的工作原理#
第一阶段侧重召回率:通过 BM25 进行关键词匹配、对预先计算的嵌入执行向量搜索,或同时使用两者,在几毫秒内从整个集合中提取数百个可能相关的候选项。重排序器侧重精确率:它会对每个查询-候选项组合完整运行一次模型,只有排名靠前的少数结果会展示给用户或放入 LLM 的上下文窗口。Ultralytics 的 VisualAISearch 解决方案就是这类第一阶段检索器:它使用 CLIP ViT-B/32 为文件夹中的图像生成嵌入,按图像与文本查询之间的余弦相似度排序,默认返回相似度高于 0.1 阈值的最多 30 个匹配项。
交叉编码器与双编码器#
双编码器是常见的检索器,它分别为查询和每份文档生成嵌入,因此文档向量可以预先计算并存储在向量数据库中。这种独立性也构成了它的局限:查询已知之前,文档向量就已经固定。交叉编码器将查询和文档拼接为一个输入,因此自注意力可以比较查询中的每个词和文档中的每个词,但查询时必须为每个组合完整执行一次前向传播。ColBERT介于两者之间:它为每篇文档的每个词元存储一个向量,并通过延迟交互将查询词元与这些向量进行匹配。Sentence Transformers 的 CrossEncoder 类会运行诸如 ms-marco-MiniLM-L6-v2 这样的重排序器,该模型使用 MS MARCO 搜索查询进行训练:
from sentence_transformers import CrossEncoder
query = "When was the transformer architecture introduced?"
# Shortlist returned by a fast first-stage retriever, in its original order
candidates = [
"Transformer models such as GPT and BERT are widely used in natural language processing.",
"An electrical transformer changes the voltage of an alternating current.",
"Convolutional neural networks became popular after AlexNet won ImageNet in 2012.",
"The transformer was introduced in the 2017 paper Attention Is All You Need.",
]
# The cross-encoder reads the query and each candidate together and scores their relevance
reranker = CrossEncoder("cross-encoder/ms-marco-MiniLM-L6-v2")
ranked = reranker.rank(query, candidates)
for hit in ranked:
print(f"{hit['score']:6.2f} {candidates[hit['corpus_id']]}")能够回答问题的段落从最后一名升至第一名,得分为 6.97,远高于下一候选项的 -4.48。关于电气变压器的句子虽然与查询共享关键词,但得分为 -5.29。
重排序器的类型#
- 交叉编码器: 使用相关性标签微调的小型 Transformer,例如 MS MARCO MiniLM 模型和 BAAI 的 bge-reranker 系列,也可以作为托管重排序 API 提供。
- LLM 重排序器: 通过提示大型语言模型(LLM)为候选项评分,或一次性对整个列表排序。RankGPT展示了 ChatGPT 和 GPT-4 可以通过输出排序后的列表来对段落重排序,并将 ChatGPT 的排序结果蒸馏到一个小型专用重排序器中。
- 学习排序模型: 推荐和电商系统使用梯度提升树等模型,根据点击历史、价格和时效性等特征对候选项重新排序,并采用 LambdaMART 等排序目标进行训练;LightGBM和 XGBoost都提供了这类模型。
重排序器与相关概念#
- 语义搜索: 通常使用双编码器检索器按含义搜索。重排序器可以作为其上方的可选第二阶段。
- 混合搜索: 合并关键词和向量搜索的结果列表,通常使用互惠排名融合;这种方法无需重新读取内容即可合并排名。重排序器通常会处理合并后的列表。
- 知识蒸馏: 训练快速检索器模仿慢速重排序器的分数,将部分重排序能力转移到第一阶段。
- 两阶段目标检测器: 对图像采用相同的模式,先由区域提议阶段生成候选框,再由第二阶段重新评分并细化每个候选框,最后通过非极大值抑制(NMS)去除重叠的重复框。










