RAG重排序模块的作用与实现方法
重排序(Re-ranking)是RAG系统的精排阶段。请解释为什么需要重排序(检索→排序两阶段),以及基于交叉编码器(Cross-Encoder)的重排序原理和在Cohere/BGE-reranker中的应用。
回答
屠龙少年
RAG系统采用两阶段检索:粗排(Bi-Encoder) → 精排(Cross-Encoder)。
为什么需要重排序:
- Bi-Encoder的局限:将query和doc独立编码为向量,丢失了query-doc交叉信息
- 语义偏差:余弦相似度无法捕捉细粒度匹配
- 信息路由:粗排返回Top-K(如50个),精排从中选出Top-N(如5个)送入LLM
Cross-Encoder重排序原理:
- 将query和doc拼接为[CLS]query[SEP]doc[SEP]输入
- 通过Transformer计算交叉注意力,输出0-1的相关性分数
- 优点:捕捉query与doc的精细交互
- 缺点:计算量大(O(M²)),无法事先向量化
主流重排序模型:
- Cohere Rerank:商业API,支持1000文档的排序
- BGE-Reranker:BAAI/bge-reranker-v2-m3,开源
- BGE-Reranker-v2-gemma:基于Gemma微调,支持多种输入格式
性能影响:
- 无重排序:Top-5命中率约60%
- 加重排序:Top-5命中率提升至80-85%
- 但延迟增加30-100ms(取决于候选数量)
在LlamaIndex中通过SentenceTransformersRerank、LangChain中通过CohereRerank组件使用。