重排序 (Re-ranking) 算法详解

重排序 (Re-ranking) 算法详解

1. 核心痛点

在传统的 RAG 流程中,向量检索(Retriever)通常返回 Top K(例如 5 个)文档给 LLM。然而:

  • 向量检索的局限:基于双塔模型(Bi-Encoder),将 Query 和 Document 分别编码。为了速度,牺牲了部分精度,只能捕捉粗粒度的语义相似性。
  • "迷失中间" (Lost in the Middle):如果 Top 5 中包含 2-3 个无关文档(噪音),LLM 很容易被误导,或者忽略掉真正正确的那个文档(特别是当正确文档排在中间时)。

2. 算法原理

重排序(Re-ranking)引入了一个精排阶段

  1. 扩大召回:Retriever 先召回更多的文档(例如 Top 50)。
  2. 精细打分:使用一个更精准但计算量更大的模型(Cross-Encoder 或 LLM),对这 50 个文档与 Query 的相关性进行逐一打分。
  3. 截断:取分数最高的 Top 5 给 LLM。

Cross-Encoder vs Bi-Encoder

  • Bi-Encoder (检索用):快速。Query 和 Doc 独立编码,计算余弦相似度。
  • Cross-Encoder (重排序用) :精准但慢。将 Query 和 Doc 拼在一起输入模型(如 BERT),让 Attention 机制充分交互,直接输出相关性得分。

流程图

Query
向量检索
Top 50 候选
重排序模型
Top 5 精选
大模型生成

3. 常见实现方案

3.1 使用专门的 Rerank 模型 (推荐)

目前业界效果最好的开源 Rerank 模型包括:

  • BGE-Reranker (BAAI/bge-reranker-v2-m3)
  • Cohere Rerank (商业 API,效果极佳)
  • Jina Reranker

这些模型经过大量相关性数据的微调,能精准识别"问题"和"答案"的匹配度。

3.2 使用 LLM 进行重排序 (Listwise / Pointwise)

如果没有专门的模型资源,可以直接 Prompt LLM 来做。

  • Pointwise:让 LLM 给每个文档打分(0-1分)。
  • Listwise:把 10 个文档标题一次性给 LLM,让它排序并输出索引。

Prompt 示例

text 复制代码
你是一个相关性评估专家。
请评估以下文档与用户问题的相关性,并按相关性从高到低排序。
只输出文档的 ID。

问题:{question}

文档列表:
[1] ...
[2] ...

4. 代码实现示例 (Java 伪代码)

java 复制代码
public List<Document> retrieveAndRerank(String query) {
    // 1. 粗排:召回 Top 50
    List<Document> candidates = vectorStore.similaritySearch(query, 50);
    
    // 2. 精排:调用 Rerank API (例如 Cohere 或 本地模型服务)
    List<ScoredDocument> ranked = rerankService.rank(query, candidates);
    
    // 3. 过滤:只取分数 > 0.8 的 Top 5
    return ranked.stream()
        .filter(doc -> doc.getScore() > 0.8)
        .limit(5)
        .map(ScoredDocument::getDocument)
        .collect(Collectors.toList());
}

5. 优缺点分析

  • 优点
    • 大幅提升准确率:是目前提升 RAG 效果最明显的手段。
    • 抗噪能力强:能有效剔除向量检索带来的不相关文档。
  • 缺点
    • 延迟增加:Cross-Encoder 计算慢,通常会增加几百毫秒的延迟。
    • 成本增加:需要额外的 GPU 资源部署模型或调用商业 API。
相关推荐
小雨下雨的雨3 小时前
井字棋AI机器人实现详解 - Minimax算法实战-鸿蒙PC Electron框架完成
前端·人工智能·算法·华为·electron·鸿蒙
xieliyu.5 小时前
Java算法精讲:双指针(三)
java·开发语言·算法
小鹰-上海鹰谷-电子实验记录本5 小时前
第六届党建引领科创生态座谈会 | 邓光辉博士出席分享AI赋能创新药科研新范式
人工智能·ai·电子实验记录本·药企合规
极客老王说Agent5 小时前
2026电信IDC机房巡检深度报告:人工巡检频次和深度够吗?实在Agent重塑智慧运维新范式
人工智能·ai·chatgpt
一条小锦吕*5 小时前
基于Spring Boot + 数据可视化 + 协同过滤算法的推荐系统设计与实现(源码+论文+部署全讲解)
spring boot·算法·信息可视化
Bruce_Liuxiaowei6 小时前
Prompt注入_我的AI编码助手被策反了
人工智能·ai·prompt·提示词·智能体
如竟没有火炬7 小时前
最大矩阵——单调栈
数据结构·python·线性代数·算法·leetcode·矩阵
8Qi88 小时前
LeetCode 1143 & 718:最长公共子序列 / 最长重复子数组
算法·leetcode·职场和发展·动态规划
绿算技术8 小时前
万卡推理集群存储选型分析:从核心架构到应用视角
大数据·科技·算法·架构