首页/AI/AI 应用速查/重排模型(Rerank)

重排模型(Rerank)

对初筛候选(如向量召回 top50)做精细相关性打分再取 top-k,是提升 RAG 质量性价比最高的一步;常用 bge-reranker、Cohere Rerank、Qwen-Ranker 等交叉编码器。

AI 应用速查AI更新于 2026-10-13

重排模型是什么

重排(Rerank)模型是检索链路上的精排环节:向量或关键词召回先给出一批候选(常见 50-100 条),重排模型对「查询 + 文档」成对打分,再取分数最高的几条送进生成。它通常是交叉编码器(cross-encoder),把查询与文档拼在一起编码,精度高于分别编码再算相似度的双塔向量模型;代价是必须逐对计算,无法预先建索引。RAG 答非所问时,先加一层重排往往比换成更贵的生成模型更划算。

基本信息

输入查询与候选文档组成的文本对
输出相关性分数,用于重排序
位置召回之后、生成之前
代表模型bge-reranker 系列、Cohere Rerank、Qwen 重排模型
部署小尺寸模型 CPU 可用,大尺寸建议 GPU
延迟随候选数量近似线性增长

典型使用场景

  • RAG 质量优化:召回结果相关度参差时,用精排把噪声挡在上下文之外
  • 多路召回融合:向量与关键词各召回一批,用统一分数排序去重
  • 上下文预算紧张:只把最高分的 3-10 条送进生成,节省输入 token
  • 搜索结果排序:站内检索、文档门户的相关性排序
  • 自建评测闭环:用精排分数辅助定位召回缺失还是排序失准

本地交叉编码器用法

本地交叉编码器用法
# 安装:pip install sentence-transformers
from sentence_transformers import CrossEncoder
# 小尺寸重排模型,CPU 也能跑,适合先验证效果
model = CrossEncoder("BAAI/bge-reranker-v2-m3")
query = "如何申请报销?"
candidates = ["报销流程:登录 OA 提交单据,附发票原件", "年假规则:入职满一年享五天", "发票抬头填写规范"]
scores = model.predict([(query, c) for c in candidates])
# 按分数降序取前 k 条作为生成上下文
ranked = sorted(zip(scores, candidates), reverse=True)[:2]
print(ranked)

参数与候选数怎么定

参数建议取值原因
初排候选数50-100 条太少会漏掉答案,太多则延迟不可接受
精排保留数3-10 条进生成上下文,过多会稀释重点并推高成本
分数阈值不要硬编码绝对值分数分布随模型与语料漂移,宜按分位或相对差距取
批量大小按显存调整一次打分对数越多吞吐越高,显存也越高
重排分数是相对排序信号,不是绝对相关度。跨语料或换模型后旧阈值会失效,需要重新采样分布再定值。
上线前用固定评测集对比加分前后指标(命中率、MRR、答案正确率),确认收益大于延迟与算力开销再保留,否则只是增加成本。

易错点

  • 把重排分数当绝对相关度硬编码阈值:换模型或换语料后分布漂移,过滤规则会突然失效
  • 对上千条候选全量精排:延迟成倍上升,而收益在排序头部就已趋于饱和
  • 把重排当召回用:它无法从全库里找答案,只能对已有候选排序
  • 忽略分块质量:块内混入无关标题或页眉页脚时,重排也会被误导,需要先清洗切分
  • 精排后仍把大段无关片段塞进上下文:浪费输入 token,还容易诱发答非所问

数据来源与参考

  • BAAI bge-reranker 模型卡(Hugging Face);Cohere Rerank 文档

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌