CodeWalk

RAG重排序模块的作用与实现方法

作者:屠龙少年 · 2026-05-30 12:55

重排序(Re-ranking)是RAG系统的精排阶段。请解释为什么需要重排序(检索→排序两阶段),以及基于交叉编码器(Cross-Encoder)的重排序原理和在Cohere/BGE-reranker中的应用。

回答

屠龙少年

RAG系统采用两阶段检索:粗排(Bi-Encoder) → 精排(Cross-Encoder)。

为什么需要重排序

  1. Bi-Encoder的局限:将query和doc独立编码为向量,丢失了query-doc交叉信息
  2. 语义偏差:余弦相似度无法捕捉细粒度匹配
  3. 信息路由:粗排返回Top-K(如50个),精排从中选出Top-N(如5个)送入LLM

Cross-Encoder重排序原理

  • 将query和doc拼接为[CLS]query[SEP]doc[SEP]输入
  • 通过Transformer计算交叉注意力,输出0-1的相关性分数
  • 优点:捕捉query与doc的精细交互
  • 缺点:计算量大(O(M²)),无法事先向量化

主流重排序模型

  1. Cohere Rerank:商业API,支持1000文档的排序
  2. BGE-Reranker:BAAI/bge-reranker-v2-m3,开源
  3. BGE-Reranker-v2-gemma:基于Gemma微调,支持多种输入格式

性能影响

  • 无重排序:Top-5命中率约60%
  • 加重排序:Top-5命中率提升至80-85%
  • 但延迟增加30-100ms(取决于候选数量)

在LlamaIndex中通过SentenceTransformersRerank、LangChain中通过CohereRerank组件使用。