Skip to content

检索与重排序

检索阶段:向量检索与 BM25 的互补、混合检索与 RRF 融合、交叉编码器重排、两阶段检索管线。

Updated View as Markdown
For humans

检索与重排序

检索阶段的目标是召回覆盖,重排的目标是排序精度。两件事分开做:先宽召回,再精排,别指望一步到位。

向量检索与 BM25 互补

检索方式 擅长 搞不定
向量检索 语义相似、同义词、抽象概念 精确匹配:产品型号、错误码、函数名
BM25 关键词 精确匹配专名、编号、代码标识符 语义理解:搜“怎么退订”,文档写的是“取消订阅”

向量检索理解“意思”,关键词检索抓住“字面”。用户问 “ERR-4023 怎么解决”,向量检索可能召回一堆语义相近但无关的错误处理文档,BM25 精确命中那个错误码。这就是混合检索成为生产标配的原因。

混合检索

混合检索 + 重排的两阶段管线

融合是混合检索的关键。不能把两路分数直接相加:余弦相似度在 0 到 1 之间,BM25 是无上界的正分,量纲不同,直接加权某一路会完全主导。

**RRF(Reciprocal Rank Fusion)**是稳健默认:只看排名不看分数,score(d) = Σ 1/(k + rank_i(d)),k 通常取 60。某一路排名靠前就给高分,天然完成了跨量纲融合和去重。Cormack 等人 2009 年提出,Elasticsearch、OpenSearch、Azure AI Search 都内置。

备选是分数归一后加权求和(min-max 或 z-score),权重按场景调:术语编号多的知识库调高 BM25,概念性内容调高向量。没有标注数据时从均等权重或 RRF 起步。

重排:两阶段的第二段

重排用交叉编码器(Cohere Rerank、bge-reranker),query 和候选块拼接打分,比双编码器精细得多。经验值:粗召回 Top-50,精排后取 Top-5 到 10 进上下文。Anthropic 的实测里,混合检索加 Rerank 的效果可以叠加,top-20 进 Prompt 比 top-5 更有效。

重排不是必须的:延迟敏感或候选已经很准的场景可以省略。但上下文窗口紧张、答案质量敏感时,重排把最相关的少数片段顶到前面,收益明确。

面试追问

  1. 为什么纯向量检索不够? 向量对精确匹配弱:产品型号、错误码、专名。BM25 对语义改写弱。两者互补
  2. RRF 是什么? 倒数排名融合,只看排名不看原始分数,score = Σ 1/(k+rank),k 取 60。绕开量纲问题,免调参
  3. 为什么不能直接把两路分数相加? 量纲不同:余弦在 0 到 1,BM25 无上界。直接加权某一路主导,混合检索退化成单路
  4. 重排用什么模型? 交叉编码器,query 和文档拼接打分。双编码器粗召回、交叉编码器精排,标准两阶段管线
  5. 什么场景不需要重排? 延迟极敏感或候选已经很准。混合检索解决召回覆盖,重排解决排序精度,按需取舍
Navigation

Type to search…

↑↓ navigate↵ selectEsc close