跳转至

三十:Rerank

来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247484348&idx=1&sn=331815f9e4cf3303a6560445375a985f&chksm=f01eb0c5c76939d316c06eb93daddbbc419012632ae2cf34df8694acfd5cb0ecc0bb2b7604f2#rd

1. 学习范围

本日主题是 Rerank,重点是 Rerank 与 Embedding 的关系。RAG 系统中,embedding 检索通常负责从大规模知识库中快速召回候选,rerank 负责对候选进行更精细排序。二者是召回与精排的关系,不是简单替代关系。 本日覆盖: - Rerank 的定义和在 RAG 中的位置。

  • Embedding bi-encoder 与 reranker cross-encoder 的区别。

  • 两阶段检索:retrieve top-n -> rerank top-k。

  • Rerank 模型类型:cross-encoder、LLM reranker、ColBERT/late interaction、规则 reranker。

  • Rerank 与 embedding 在速度、精度、成本、可扩展性上的权衡。

  • Rerank 评估指标、训练数据、生产化和常见排错。

2. Rerank 的定位

RAG 中常见链路:

Query
  -> Retriever / Embedding Search: recall top 50/100
  -> Reranker: reorder candidates
  -> Keep top 3/5/10
  -> LLM Answer
第一阶段 retriever 目标是高召回、低延迟,从大量文档中找到可能相关的候选。第二阶段 reranker 目标是高精度,对较少候选做更细粒度相关性判断。 Rerank 的核心价值: - 把真正相关的证据排到前面。

  • 降低无关 chunk 进入 prompt 的概率。

  • 提升上下文质量。

  • 降低幻觉风险。

  • 在相同 top-k 下提升答案正确率。

3. Embedding Retriever 的特点

Embedding retriever 通常是 bi-encoder 架构(双编码器;双塔模型):

query -> encoder -> q_vector
doc   -> encoder -> d_vector
score = sim(q_vector, d_vector)
优点: - 文档向量可离线预计算。

  • 查询速度快。

  • 可使用向量数据库大规模检索。

  • 适合百万/千万级候选召回。

缺点: - query 和 document 独立编码,交互较弱。

  • 对细粒度匹配、否定、条件、数字、复杂语义不够敏感。

  • 容易召回语义相似但不支持答案的 chunk。

Embedding retriever 适合作为 first-stage recall。

4. Cross-Encoder Reranker

Cross-encoder reranker 把 query 和 document 一起输入模型:

input = [query, document]
score = model(input)
模型可以在 token 级别建模 query 与 document 的细粒度交互,因此排序精度通常高于 bi-encoder。 优点: - 相关性判断更准确。

  • 更擅长处理细节、否定、条件和多词关系。

  • 能显著提升 top-k precision。

缺点: - 每个 query-document pair 都要单独推理。

  • 无法离线预计算全部 pair。

  • 成本和延迟高。

  • 不适合直接在全库上运行。

因此 reranker 通常只用于 first-stage retriever 返回的候选集合。

5. Rerank 与 Embedding 的核心区别

维度 Embedding Retriever(嵌入召回器) Reranker(重排器) 底层架构 Bi-Encoder 双塔编码器 Cross-Encoder / LLM / Late Interaction 交互模型 文档向量 全库文档可离线预计算、持久化入库 必须 Query + 文档成对拼接输入,无法提前缓存文档表征 核心优化目标 保证高召回率,不漏相关文档 提升排序精度,筛选最优结果 推理速度 极快,仅编码 Query+ANN 检索 很慢,每条候选都要单独前向推理 适配数据规模 支持百万 / 亿级全文档库全局检索 仅能作用于召回输出的少量 Top-N 候选(几十条以内) 文本交互能力 Query、文档编码全程无深度交互,仅向量空间匹配 强,token 级交叉注意力,能捕捉细粒度语义匹配 模型输出 相似度排序后的 Top-N 候选文档列表 每条 (Query,Doc) 匹配分数,用于重新排序 一句话:embedding 负责“先找一批可能相关的”,rerank 负责“从这批里面挑最相关的”。

6. 两阶段检索

典型两阶段检索:

1. embedding retriever 召回 top 50
2. reranker 对 50 个候选逐一打分
3. 按 rerank score 排序
4. 取 top 5 进入 LLM prompt
为什么不是直接 embedding top 5? - embedding top 5 precision 可能不够。

  • 正确证据可能在 embedding 排名 20-50。

  • reranker 可以把正确证据提到前面。

为什么不是直接 rerank 全库? - 成本不可接受。

  • 延迟不可接受。

  • 无法预计算 query-doc pair。

两阶段检索是召回率、精度、成本之间的折中。

7. Rerank 模型类型

7.1 Cross-Encoder Reranker

专门训练的重排序模型,如 BGE reranker、MS MARCO cross-encoder 等。输入 query 和 passage,输出相关性分数。

7.2 LLM Reranker

用大模型判断候选与 query 的相关性,可以输出分数、排序或理由。理解能力强,但成本高、延迟大、稳定性和批处理效率较差。

7.3 Late Interaction 晚交互模型

介于Bi-Encoder(无交互)与Cross-Encoder(全交互)中间。 - 双塔分别编码 query、文档,得到token 粒度细粒度向量,不是单一全局向量;

  • 推理时不做全层交叉注意力,仅在最后阶段计算 token 间最大相似度聚合得到匹配分;

如 ColBERT,一定程度上保留 token-level interaction,同时比 full cross-encoder 更适合检索。它介于 bi-encoder 和 cross-encoder 之间。

7.4 规则 Reranker

基于元数据、时间、新鲜度、权限、标题匹配、关键词命中、来源权威性等规则调整排序。 实际系统常使用多种 rerank 信号融合。

8. Rerank 分数的含义

Reranker 输出的分数通常表示 query-document 相关性。不同模型的分数尺度不一定可比。 注意事项: - 分数不一定是概率。

  • 不同 query 之间分数不一定可直接比较。

  • 不同 reranker 模型分数不一定同尺度。

  • 阈值需要基于验证集校准。

生产中常使用相对排序,而不是绝对分数。若要做拒答或过滤,需要单独调阈值。

9. Rerank 与 Top-k

Rerank 常涉及两个 k:

retrieval_top_n: 第一阶段召回候选数,如 50/100
final_top_k: rerank 后进入 prompt 的候选数,如 3/5/10
retrieval_top_n 太小: - 正确证据可能进不了候选,reranker 无法补救。

retrieval_top_n 太大: - rerank 成本高。

  • 延迟增加。

final_top_k 太小: - 证据可能不完整。

final_top_k 太大: - prompt 噪声增加。

  • token 成本增加。

Rerank 常与 hybrid search 配合:

dense retrieval top 50 稠密检索,通过向量语义匹配
sparse retrieval top 50 稀疏检索,通过关键词精准匹配等方式
merge + deduplicate
rerank top 100
keep top 5
Hybrid search 提高候选召回多样性,rerank 提高最终精度。对技术文档、法律条款、错误码、API 文档等场景尤其有效。

11. Rerank 与 Query Transformation

query rewrite、multi-query、decomposition 可能扩大候选集合。rerank 可以在合并候选后重新排序,减少 query expansion 带来的噪声。 常见流程:

original query -> rewrite/multi-query
retrieve candidates
merge candidates
rerank with original query or rewritten query
通常最终 rerank 应尽量使用最能代表用户意图的 query。复杂场景可以把原始 query 和改写 query 一起输入 reranker。

12. Rerank 与 Contextual Compression

Rerank 选择最相关 chunk,contextual compression 在 chunk 内进一步去掉无关内容。 关系: - rerank 解决 chunk 级排序。

  • compression 解决 chunk 内内容过长或噪声过多。

常见组合:

retrieve top 50 -> rerank top 10 -> compress -> final context
这能提升上下文密度,但压缩可能误删关键限制条件,因此需要评估。

13. Rerank 训练数据

Reranker 通常需要 query-document relevance 数据。 数据形式: - pairwise:query, positive doc, negative doc。

  • pointwise:query, doc, relevance label。

  • listwise:query, ranked docs。

负样本很关键: - random negative:随机无关文档,容易区分。

  • hard negative:被 retriever 召回但不相关的文档,更有训练价值。

RAG 场景中,hard negative 往往来自 embedding top-k 中相似但不能回答问题的 chunk。

14. Rerank 评估指标

检索/排序指标: - MRR。

  • nDCG@k。

  • Precision@k。

  • Recall@k。

  • MAP。

RAG 端到端指标: - 答案正确性。

  • Faithfulness。

  • Citation accuracy。

  • Context relevance。

  • 拒答准确率。

Rerank 优化不应只看排序指标,还要看最终 LLM 答案是否更好。

15. Rerank 阈值与拒答

有些系统会基于 rerank score 做过滤或拒答:

if max_rerank_score < threshold:
    return "资料不足"
风险: - 分数尺度不稳定。

  • 不同 query 难度不同。

  • 阈值过高导致过度拒答。

  • 阈值过低导致无关上下文进入 prompt。

阈值必须用验证集校准,并结合 query 类型、候选数量和业务风险。

16. Rerank 成本与延迟优化

优化方法: - 降低 retrieval_top_n。

  • 使用轻量 reranker。

  • batch rerank。

  • 缓存 query-candidate 分数。

  • 先规则过滤再 rerank。

  • 只对低置信 query 启用 rerank。

  • 使用蒸馏或量化 reranker。

  • 对高频问题缓存最终上下文。

成本优化不能过度牺牲 recall。如果正确证据未进入 reranker 候选集,精排无意义。

17. 常见失败模式

Rerank 常见问题: - 第一阶段漏召回,reranker 无法补救。

  • reranker 偏向长文本或关键词多的文本。

  • reranker 分数不能直接做全局阈值。

  • 候选 chunk 重复,top-k 多样性不足。

  • reranker 选择相关但不支持答案的背景资料。

  • query rewrite 偏移后 rerank 错误。

  • rerank 延迟过高影响用户体验。

排查时要同时看 first-stage candidates、rerank score、最终 context 和答案。

18. Rerank 在 RAG 中的实战流程

一个稳健流程:

1. 原始 query 和改写 query 生成。
2. Dense + sparse hybrid retrieval 召回 top 50-200。
3. 合并去重,保留元数据。
4. Reranker 对候选排序。
5. 根据 token budget 选择 top-k。
6. 对长 chunk 做 contextual compression。
7. LLM 基于上下文生成答案和引用。
8. 评估 answer correctness、faithfulness、citation。
调参顺序: - 保证 first-stage recall。

  • 选择 reranker 模型。

  • 调 retrieval_top_n 和 final_top_k。

  • 校准 score threshold。

  • 评估端到端答案。

19. 面试表达要点

Rerank 的高分表达:

Embedding 检索是 bi-encoder,可以离线预计算文档向量,适合大规模快速召回,但 query-doc 交互弱。
Reranker 通常是 cross-encoder,把 query 和候选文档一起输入,能做细粒度相关性判断,因此精度高但成本高。
所以 RAG 常用两阶段架构:先用 embedding/hybrid search 召回较多候选,再用 reranker 精排,最后取少量高质量证据给 LLM。
Reranker 不能弥补第一阶段漏召回;它优化的是候选排序和上下文质量。

20. 核心总结

Rerank 的核心结论: - Embedding 负责召回,rerank 负责精排。

  • Bi-encoder 快但交互弱,cross-encoder 慢但精度高。

  • 两阶段检索是 RAG 质量和成本的常见折中。

  • Rerank 能提升 top-k precision 和上下文质量。

  • Rerank 不能解决 first-stage 漏召回。

  • Rerank 分数需要校准,不能随便跨 query 使用固定阈值。

  • 生产中要同时评估排序指标和端到端答案指标。

21. 参考资料

  • SentenceTransformers Cross-Encoder Rerankers: https://www.sbert.net/examples/applications/retrieve_rerank/README.html

  • BAAI FlagEmbedding / BGE Reranker: https://github.com/FlagOpen/FlagEmbedding

  • Cohere Rerank docs: https://docs.cohere.com/docs/reranking

  • Jina AI Reranker docs: https://jina.ai/reranker/

  • 盘点 rerank 方法: https://weaxsey.org/articles/2024-10-20/#gte-rerank

  • 深入理解 rerank 重排序的工作原理: https://juejin.cn/post/7440705321942663207#heading-22

  • 重新排序器和两阶段检索: https://techdiylife.github.io/blog/topic.html?category2=t07&blogid=0048

            预览时标签不可点
    

    <div class="