✨ 复制成功!

以文会友,打造好学人设!

📋 已复制到剪贴板:

重排序(Rerank)在 RAG 中解决什么问题?Cross-Encoder 和 Bi-Encoder 的区别是什么?引入重排序后如何平衡延迟和效果?

创建时间:2026-09-20 更新时间:2026-09-24 阅读次数:1143 次 分类:Agent与RAG应用

1、先看 RAG 检索链路里重排序的位置

典型 RAG 检索链路:

文档切分 → 向量化 → 索引 → 召回 → 重排序 → 生成
  • 召回(Retrieval):从海量文档里快速找出候选,通常 Top 50~100。
  • 重排序(Rerank):对候选精排,选出最相关的 Top 5~10。
  • 生成(Generation):把精排后的上下文给 LLM。

重排序是召回和生成之间的精排环节。

2、重排序在 RAG 中解决什么问题

(1)召回阶段精度不够

召回阶段追求快,通常用:

  • 向量检索(Bi-Encoder + ANN)
  • 关键词检索(BM25)
  • 混合检索

这些方法快,但精度有限:

  • Bi-Encoder 是 query 和文档分别编码,交互不充分。
  • ANN 是近似检索,可能漏掉或排错。
  • 混合检索融合后,排名也不一定准。

结果:相关文档可能在 Top 50 里,但排不到前面。

(2)Top-K 太大,噪声多

  • 召回 Top 50,如果直接给 LLM,噪声太多。
  • 上下文窗口有限,token 预算有限。
  • 需要把最相关的挑出来,放到最前面。

(3)提升生成质量

  • LLM 对上下文顺序敏感,相关文档排前面效果更好。
  • 噪声少,幻觉少,答案更准。
  • 引用溯源更可靠。

(4)解决“语义相似但不相关”

  • 向量检索可能召回语义相似但事实不相关的内容。
  • Cross-Encoder 能更精细判断 query 和文档的相关性。
  • 减少“看起来相关但没用”的文档。

一句话:重排序解决的是召回快但不够准的问题,把最相关的文档精排到前面,提升生成质量。

3、Cross-Encoder 和 Bi-Encoder 的区别

这是这道题的核心。

(1)Bi-Encoder

做法:

  • query 和 document 分别编码成向量。
  • 然后算相似度(余弦、内积)。
q_vec = Encoder(query)
d_vec = Encoder(document)
score = similarity(q_vec, d_vec)

特点:

  • query 和 document 不交互。
  • 文档向量可以离线预计算。
  • 检索时只算 query 向量,然后 ANN 搜索。
  • 快,适合大规模召回。

缺点:

  • 交互不充分,精度有限。
  • 难以捕捉 query 和文档的细粒度关系。

代表:Sentence-BERT、BGE、E5、OpenAI Embedding。

(2)Cross-Encoder

做法:

  • query 和 document 拼接后一起过模型。
  • 输出一个相关性分数。
score = Encoder(query + [SEP] + document)

特点:

  • query 和 document 充分交互。
  • 精度高,能捕捉细粒度关系。
  • 但每个 (query, document) 对都要过一遍模型。
  • 无法预计算文档表示。
  • 慢,只适合对少量候选精排。

缺点:

  • 计算量大,延迟高。
  • 不能用于大规模召回。
  • 只能对 Top-K 候选做精排。

代表:BGE-Reranker、Cohere Rerank、MonoT5。

(3)对比总结

一句话:

  • Bi-Encoder 快,用于召回。
  • Cross-Encoder 准,用于重排序。
  • 两者配合,先召回后精排。

4、引入重排序后如何平衡延迟和效果

重排序提升效果,但增加延迟。平衡手段有:

(1)控制候选数量

  • 召回 Top 50~100,重排到 Top 5~10。
  • 候选太多,重排慢;太少,可能漏。
  • 根据延迟预算调候选数。

(2)选择轻量重排序模型

  • Cross-Encoder 有大有小。
  • 小模型快,大模型准。
  • 可以用蒸馏小模型。
  • 比如 BGE-Reranker-base vs large。

(3)分级重排

  • 先用轻量模型粗排,再用大模型精排。
  • 比如先 BM25/向量召回,再用小 Cross-Encoder 排到 Top 20,再用大模型排 Top 5。
  • 平衡效果和延迟。

(4)异步 / 并行

  • 重排序和生成可以流水线并行。
  • 多路召回并行,重排并行。
  • 用 GPU 批处理加速。

(5)缓存

  • 热门 query 的结果缓存。
  • 相同 query 不重复重排。
  • 文档表示缓存(Bi-Encoder 可以)。

(6)按场景动态调整

  • 延迟敏感场景:减少候选,用小模型,甚至跳过重排。
  • 质量优先场景:增加候选,用大模型。
  • 线上可以 A/B 测试。

(7)量化 / 蒸馏 / 加速

  • 重排序模型量化(INT8)。
  • 蒸馏到小模型。
  • 用 ONNX、TensorRT 加速。
  • 批处理提高 GPU 利用率。

(8)评估延迟和效果

  • 用 Recall@K、MRR、NDCG 评估效果。
  • 用 P99 延迟、QPS 评估性能。
  • 找到延迟和效果的最佳平衡点。

一句话:平衡延迟和效果的核心是控制候选数、选合适模型、分级重排、并行缓存、按场景动态调整。

5、一句话总结

重排序解决召回快但不够准的问题,把最相关文档精排到前面。Bi-Encoder 分别编码 query 和 doc,快,用于召回;Cross-Encoder 拼接编码,准,用于重排序。平衡延迟和效果靠控制候选数、选轻量模型、分级重排、并行缓存、按场景动态调整。


📌 面试天下网:一款服务于上班族的口袋书,让大家在地铁里/公交上可以学习大模型技术!
📌 网站公告:【悬赏 200 元/篇】寻找“大模型面试战场”的一手回忆录
📌 网站公告:【大模型/Agent面试陪练1V1指导】正式启动......

评论专区

评论加载中...