首页/AI/RAG 与向量库速查/BGE Reranker 使用要点

BGE Reranker 使用要点

BGE 重排系列提供多语言与中文表现较好的交叉编码模型:加载后对候选对打分,输出相关性分数;使用前确认模型的语言覆盖与长度上限,超长片段会被截断影响判断。

RAG 与向量库速查AI更新于 2026-10-13

BGE 重排模型

BGE 重排系列(bge-reranker-*)是交叉编码器:把查询与候选片段拼成一对输入模型,输出一个相关性分数。与向量检索的双塔结构不同,交叉编码器能看到查询与片段的词级交互,因此精度明显更高,代价是无法预计算、只能对候选池逐条打分,通常放在粗排之后处理几十条候选。中文与多语言场景下 bge-reranker-v2-m3 是常用选择,但加载成本与推理耗时都要按候选条数估算。

基本信息

模型类型CrossEncoder 交叉编码器
典型模型BAAI/bge-reranker-v2-m3(多语言)、bge-reranker-base/large
输入单位(查询, 片段)二元组,逐对打分
长度上限由 max_length 控制,超长部分被截断
运行依赖sentence-transformers,GPU 可选

典型使用场景

  • 向量检索后精排:把 top 50 候选压到 top 5 进上下文
  • 混合检索融合:稠密与稀疏两路分数不可比时,用重排统一给一个相关性序
  • 回答质量回退排查:先看重排分与命中位置,判断是召回问题还是排序问题
  • 小语料本地部署:不想调用外部托管 API 时,自建模型可离线运行
  • 对比评测:与托管重排服务在同一评测集上比 Recall@n 与人工通过率

加载与批量打分

加载与批量打分
from sentence_transformers import CrossEncoder

model = CrossEncoder('BAAI/bge-reranker-v2-m3', max_length=512)
pairs = [('如何评估召回', '召回率指标定义……'),
         ('如何评估召回', '向量维度选择……')]
scores = model.predict(pairs, batch_size=16)   # 数值越大越相关
ranked = sorted(zip(scores, pairs), key=lambda x: -x[0])
print(ranked[0])

参数与观察点

参数作用调整建议
max_length截断长度上限片段超长时优先改切分,不要一味加大
batch_size单批打分条数按显存实测,长文本调小
候选池大小打分条数由粗排召回率定,池外答案救不回来
重排分数只在同一次查询内可比较:不同查询之间的绝对值受候选内容影响,不要拿它做全局阈值判断。跨语言片段混排时,语言覆盖不足的模型会把非目标语言片段的分数整体压低。

选型与评估要点

  • 先量延迟:候选池条数乘平均长度决定单次重排耗时,秒级预算内要看能否满足
  • 再看收益:与不重排的基线在同一评测集上对比 Recall@n 与人工通过率
  • 长文档场景优先调切分:让进入重排的片段本身就短而完整
  • 上线后持续抽检:查询类型分布变化会让重排收益缓慢下滑

易错点

  • max_length 截断过长片段,尾部关键信息未参与打分,正确答案被排到后面
  • batch_size 设得过大,长文本场景显存或内存溢出,任务中途崩掉
  • 把重排分数当相似度阈值全局复用,换查询或换模型后判定全部失效
  • 候选池只有十几条就上重排,收益被粗排上限锁死,白白付出推理成本
  • 重排顺序与上下文编号顺序不一致,回答里的引用编号指到了别的片段

数据来源与参考

  • BAAI 官方模型文档(bge-reranker-v2-m3,Hugging Face)
  • Sentence Transformers 官方文档(CrossEncoder)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌