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 拼接编码,准,用于重排序。平衡延迟和效果靠控制候选数、选轻量模型、分级重排、并行缓存、按场景动态调整。
评论专区
评论加载中...登录后即可发表评论