学习笔记 · 2026-10-07 · 进阶
混合检索与重排序:先检索,再重新排序
混合检索同时使用关键词检索和语义检索来广泛收集候选,重排序模型则用更昂贵的模型逐一重新评估这些候选并确定顺序。分成两个阶段可以在准确率与成本之间取得平衡,因此成为 RAG 中查找依据的基本结构。
- 关键词检索(BM25)在用词不同时会遗漏,基于嵌入的语义检索在陌生领域可能表现变弱,因此采用将两者结合的混合检索。
- 检索分为“广而廉价地收集”和“窄而昂贵地重新排序”两个阶段,重排序模型负责第二个阶段。
- BERT 重排序模型一次性读取问题和文档,准确但速度慢;ColBERT 采用预先计算文档表示的延迟交互方式来提升速度。
- BEIR 基准测试表明,BM25 仍是一个强基线,而重排序虽然准确,但计算成本高。
- 近来,将 LLM 和视觉-语言模型用作重排序模型并降低成本的研究不断出现,也有报告指出,检索效果提升后,回答准确率并不会同等幅度提高。
为何需要:单一检索方式不够用
长期以来,文档检索主要依靠 TF-IDF、BM25 这类基于词汇(lexical)的方法。这类方法根据问题中的词在文档中出现得多频繁、多稀有来打分。它们速度快且稳健,但正如 BEIR 论文(paper)所指出的,存在“词汇鸿沟(lexical gap)”这一弱点:问题中使用的词如果不在文档中,即使意思相同也找不到,而且也不考虑词序。
为弥补这一弱点,出现了基于神经网络的检索。典型代表是语义检索(Semantic search),它将句子转换为数值向量即嵌入(Embedding),从而找到意思相近的文档。然而,BEIR 在 18 个数据集上比较 10 个检索系统后发现,在未经训练的新领域(zero-shot)中,稠密(dense)嵌入检索反而不如 BM25 的情况并不少见。也没有任何一种方法能在所有数据集上胜出。
因此在实际工作中会将两者叠加使用:用混合检索(Hybrid search)合并关键词检索和语义检索各自找到的候选,减少遗漏的文档;再用重排序模型(Reranker)对合并后的候选进行更精细的重新排序。本文讨论这两个阶段为何如此划分。
核心思路:广泛捞取,仔细挑选
用招聘流程来比喻就容易理解。如果收到数万份申请,面试官不可能全部阅读。先用简历筛选广泛筛出符合条件的人(第一轮),只剩下几十人时,再由面试官逐一深入考察(第二轮)。第一轮快但粗糙,第二轮准确但昂贵。把两者衔接起来,就能以低得多的成本获得接近“全部深入考察”的质量。
检索也是一样。第一阶段的检索器(retriever)从数百万份文档中快速捞出数百到数千个候选。混合检索就是把这第一张网织成双层:用词完全匹配的文档由关键词网捞取,表达不同但意思相符的文档由语义网捞取。
第二阶段的重排序模型将问题与候选文档一起阅读,重新判断“这份文档是否真的能回答这个问题”。Passage Re-ranking with BERT(paper)将这一结构整理为三阶段流水线:用 BM25 找出约 1,000 个候选,用计算量更大的方法重新打分,只把前 10~50 个交给生成答案的阶段。
广泛捞取,仔细挑选
如何运作:从问题到回答依据
第一,预先准备文档。长文档通过分块(Chunking,文档切分)切成长度合适的片段。同一个片段要索引两次:一次存为词项列表(供 BM25 使用),一次存为嵌入向量(供向量数据库使用)。
第二,问题进来后,两个检索器同时寻找候选。BM25 按词语匹配、嵌入检索按向量距离,各自生成排序列表。两种分数单位不同,难以直接相加。因此常见做法是不看分数,而以“排第几名”为基准来合并。倒数排名融合(RRF,reciprocal rank fusion)的做法是:在各列表中排名越靠前,加分越多,再把这些加分相加。临床记录问答研究(paper)也用加权 RRF 合并了 PubMedBERT 稠密检索和 BM25 的结果。
第三,重排序器对合并后的候选重新打分。最常见的形式是交叉编码器(cross-encoder)。BERT 重排序器(paper)把问题作为句子 A、文档作为句子 B 拼接后一次输入模型,用最前面的 [CLS] 向量计算“相关的概率”。问题最多 64 个 token,问题与文档合计最多输入 512 个 token。对每个候选分别求出概率后,再按概率重新排序。
第四,只把排名靠前的几个放进 LLM 的上下文窗口(Context window)来生成答案。重排序的目的归根结底是把最有用的依据放进有限的位置。
发展脉络:准确率、速度、泛化,以及 LLM
BERT 重排序器(paper,2019):把预训练的 BERT 微调(Fine-tuning)为问题-文档相关性分类器,在 MS MARCO 段落排序任务中排名第一。MRR@10(衡量正确答案出现在第几位的指标)比此前最佳成绩相对高出 27%,在开发集上 BM25 为 16.7,而 BERT Large 达到 36.5。值得注意的是,这一结果使用的训练数据不到全部的 2%。不过,每个候选都要把问题和文档整体输入庞大的模型,成本很高。
ColBERT(paper,2020):用“后期交互(late interaction)”解决这个成本问题。它用 BERT 分别编码问题和文档,最后通过轻量计算比较词级相似度。文档一侧的表示可以预先计算好,因此问题到来时要做的工作减少。它在达到与基于 BERT 的模型相近准确率的同时,速度快两个数量级(约 100 倍),每个问题的计算量(FLOPs)少四个数量级。它不仅可用于重排序,也可以借助向量相似度索引,直接在大规模文档集合中检索。
BEIR(paper,2021):在 18 个公开数据集、9 类任务(事实核查、引用预测、生物医学检索等)上以零样本方式评估模型。BM25 是稳健的基线;重排序和后期交互模型平均表现最好,但计算成本高。稠密检索和稀疏检索效率高,但在泛化上常常落后。这一结果为“第一阶段求便宜,第二阶段可昂贵”的分工提供了更多依据。
RankGPT(paper,2023):让 ChatGPT、GPT-4 等生成式 LLM 直接给段落排序。在恰当的指令下,其结果可与最佳有监督方法持平甚至更好。为考察模型是否可能提前见过试题(数据污染),作者基于最新知识新建了 NovelEval 数据集。此外,通过把排序能力迁移到小模型的“Permutation Distillation”,440M 规模的模型在 BEIR 上超过了 3B 的有监督模型。
最新方向:实际场景验证与降低成本
第一,在真实场景中把混合检索和重排序完整串联起来进行检验的研究。长期临床记录问答研究(paper)在医院内部部署并评估了一条 RAG 流水线:PubMedBERT 稠密检索 + BM25 + 加权 RRF + MedCPT 交叉编码器重排序。在 200 名减重手术患者的 1,000 组问答对上,重排序把前 10 个结果中包含正确依据片段的比例(Hit@10)从 46.6% 提高到 60.6%,把 MRR 从 0.2371 提高到 0.3252。然而,用 Qwen3-8B 生成的答案准确率只从 44.8% 提高到 48.6%。这说明检索改进了多少,答案并不会相应改进多少。
第二,以低成本使用昂贵重排序器的研究。RidgeRank(paper)针对处理文档页面图像的多模态(Multimodal)重排序器速度慢的问题。压缩重排序器会降低准确率,为此该研究提出了一个闭式融合公式,从第一阶段检索器的分数中找回重排序器分数所缺失的信号。它不丢弃检索分数和重排序分数,而是将二者混合,可以说是把混合检索的思路也用到了第二阶段。在 ViDoRe 2·3 的 12 个数据集上,它与完整交叉编码器的 NDCG@5 差距控制在 1.2 个百分点以内,速度最高快 48 倍。
第三,尝试减少输入重排序器的内容本身。RenderRank(paper)把文档文本渲染成图像,作为视觉-语言模型的视觉 token(Token)输入。重排序要为一个问题给多个候选打分,因此减少 token 所节省的开销会按候选数累积。在 BEIR 的 11 个数据集上,它少用 16.5~35.5% 的输入 token,平均 NDCG@10 达到 55.96,超过了参与评估的 4B 以下文本重排序器。
加上重排序后:检索大幅改善,答案略有改善
重排序前重排序后
局限与争议
成本与准确率之间的拉锯依然存在。在 BEIR 上最准确的重排序和后期交互模型,同时也是最昂贵的一类。增加候选数量能降低漏掉正确答案的概率,但重排序器的调用成本也会相应增加。这正是近期许多研究的目标不是大幅提高准确率,而是“以更低成本实现相近准确率”的原因。
重排序器只能在第一阶段检索捞出的候选中挑选。BERT 重排序器论文(paper)也写道,MS MARCO 中部分正确段落可能一开始就没被 BM25 找到。第一层网漏掉的文档,再好的重排序器也无法挽回。这就是用混合检索把第一层网织成两层的原因。
评估本身也有陷阱。BEIR 构建数据集时主要使用基于词汇的检索,因此正确答案标注可能偏向词汇方法;该研究报告称,在 TREC-COVID 中人工补上缺失的正确答案后,非词汇方法的分数大幅上升。LLM 重排序器还要考虑训练时是否见过测试数据,因此 RankGPT 专门构建了 NovelEval。
最后,检索指标提高,并不意味着最终答案会同等程度地变好。临床记录研究(paper)用数据展示了这一差距。即使找到了好的依据,LLM 也可能没有正确利用,或者产生幻觉(Hallucination),所以 RAG 需要同时看检索指标和答案指标。
延伸学习
如果是初学者,最好从 Passage Re-ranking with BERT(paper)读起。它篇幅短,并以最简单的方式展示了“第一阶段检索 → 重排序 → 答案生成”三阶段结构以及交叉编码器的输入方式。
接着读 BEIR(paper),就能大致理解词汇、稀疏、稠密、后期交互、重排序五种方式彼此有何不同,以及为什么不能轻易放弃 BM25。它是说明为何使用混合检索的最好依据。之后可以通过 ColBERT(paper)了解“在保持准确率的同时预先计算”这一提速思路,通过 RankGPT(paper)掌握把 LLM 用作重排序器的路线以及蒸馏(Distillation)。
如果想培养实践感,临床记录 RAG 研究(paper)很有用,它用真实数据评估了 BM25 + 稠密检索 + RRF + 交叉编码器这一典型组合。如果关注成本问题,可以把 RidgeRank(paper)和 RenderRank(paper)放在一起看,比较二者的区别:一个通过分数融合、另一个通过输入压缩来降低成本。
相关术语
参考资料
奠基论文
- Passage Re-ranking with BERT (2019)
- ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT (2020)
- BEIR: A Heterogenous Benchmark for Zero-shot Evaluation of Information Retrieval Models (2021)
- Is ChatGPT Good at Search? Investigating Large Language Models as Re-Ranking Agents (2023)
最新研究
由 AI 根据所列参考资料撰写并经过审核。详情请查看原始资料。