Reranker 工作原理:搜索结果精排的核心技术

RAG/检索Reranker工作原理openstarry.com

Reranker 工作原理:搜索结果精排的核心技术

在 RAG 系统中,向量检索返回的初步结果往往不够精确。Reranker 通过更深度的语义理解对候选文档重新排序,是提升检索质量的关键环节。

为什么需要 Reranker?

典型的 RAG 检索流程分为两个阶段:召回(Recall)和精排(Reranking)。向量数据库通过近似最近邻搜索快速从百万级文档中找到几十个候选,但这些候选的排序未必最优。

RAG 检索流程:
用户查询: "什么是梯度下降?"

阶段 1 - 召回(Bi-Encoder):
  从 100 万文档中快速检索 top-50 候选
  速度:毫秒级
  精度:粗粒度语义匹配

阶段 2 - 精排(Reranker):
  对 50 个候选逐一精细打分
  速度:较慢(但候选数量少,可接受)
  精度:细粒度语义理解

最终返回 top-5 给 LLM 作为上下文

为什么不能直接用召回结果?因为 Bi-Encoder 为了速度牺牲了精度——它独立编码查询和文档,无法捕捉两者之间的细粒度交互。


Bi-Encoder vs Cross-Encoder

理解 Reranker 的核心在于理解两种编码器的区别:

Bi-Encoder(双塔模型)

Bi-Encoder 架构:
查询: "什么是梯度下降?" → Encoder_Q → 向量 q (768维)
文档: "梯度下降是一种优化算法..." → Encoder_D → 向量 d (768维)

相似度 = cosine(q, d)

特点:
- 查询和文档独立编码,互不干扰
- 文档向量可以离线预计算并索引
- 检索时只需计算查询向量 + 向量相似度
- 速度快,适合大规模召回

Cross-Encoder(交叉编码器)

Cross-Encoder 架构:
输入: [CLS] 什么是梯度下降? [SEP] 梼度下降是一种优化算法... [SEP]
                    ↓
              Transformer 编码
                    ↓
              [CLS] 向量 → 线性层 → 相关性分数 (0~1)

特点:
- 查询和文档拼接后一起输入模型
- 模型可以学习查询-文档之间的细粒度交互
- 无法预计算(每次都要重新编码)
- 精度高但速度慢
特性 Bi-Encoder Cross-Encoder
编码方式独立编码联合编码
速度快(向量索引)慢(逐对计算)
精度中等
适用场景大规模召回精排重排序
可离线索引✅ 是❌ 否

Reranker 的评分过程

Cross-Encoder 作为 Reranker 的工作流程:

精排流程:
查询: "如何学习机器学习?"

候选文档(Bi-Encoder 召回的 top-50):
  Doc_1: "机器学习入门指南..."
  Doc_2: "深度学习框架对比..."
  Doc_3: "机器学习学习路线..."
  ...
  Doc_50: "自然语言处理基础..."

Cross-Encoder 逐一打分:
  Score(Doc_1) = 0.92  ← 高度相关
  Score(Doc_2) = 0.45  ← 部分相关
  Score(Doc_3) = 0.89  ← 高度相关
  ...
  Score(Doc_50) = 0.12 ← 不相关

重新排序后返回 top-5:
  Doc_1 (0.92) > Doc_3 (0.89) > ... > 返回前 5 个

常用的 Reranker 模型

模型 开发者 特点
Cross-Encoder/ms-marco-MiniLM-L-6-v2Sentence Transformers轻量级,适合通用场景
BGE-Reranker-v2-m3BAAI多语言支持,中文效果好
Cohere RerankCohereAPI 服务,开箱即用
Jina RerankerJina AI支持 100+ 语言
FlashRank开源社区超轻量,推理极快

Reranker 在 RAG 中的最佳实践


总结

Reranker 通过 Cross-Encoder 对查询和文档进行联合编码,捕捉细粒度的语义交互,弥补了 Bi-Encoder 在精度上的不足。在 RAG 系统中,它是连接"粗召回"和"精准回答"之间的桥梁,合理使用 Reranker 能显著提升最终的生成质量。

以 AI 之力,筑未来之境

现在注册,立即免费获赠 200 次大模型调用权益

免费注册 →