AI

Rerankers:统一 RAG 管道排序方法的轻量级 Python 库

Rerankers 是由 AnswerDotAI 开发的轻量级 Python 库,将交叉编码器、基于 LLM 和 API 排序方法统一为一个可单行切换的接口。

Rerankers:统一 RAG 管道排序方法的轻量级 Python 库

构建一个生产级的检索增强生成 (RAG) 管道涉及许多决策——使用哪个嵌入模型、哪个向量数据库、如何分块文档,以及至关重要的,如何对检索结果进行排序。最终的排序步骤通常决定了平庸答案与优秀答案之间的差异。Rerankers 是来自 AnswerDotAI(FastAI 背后的团队)的开源 Python 库,以一个优雅、极简的接口处理了这个问题。

Rerankers 为数十种重排序模型和方法提供了一个统一的包装器,从经典的交叉编码器到基于 LLM 的列表式排序器和商业 API 服务。其核心哲学很简单:您应该能够通过更改一行代码来切换重排序策略。这使其对于原型设计和生产级 RAG 系统都非常有价值。

该库已在 NLP 和搜索社区中获得显著的关注。通过抽象化每个重排序方法的实现细节并公开一致的 rank(query, docs) 接口,Rerankers 让开发者专注于评估哪种策略最适合他们的领域,而不是与不兼容的 API 纠缠。


为什么重排序在现代 RAG 管道中至关重要?

在典型的 RAG 管道中,第一个检索步骤(初始检索)使用快速但较浅的方法,如 BM25 或密集嵌入相似度,从语料库中提取一组广泛的候选文档。这个初始集合可能包含数百份文档,其中许多只是间接相关。

重排序应用一个更强大——但较慢——的模型来重新排序这些候选,将真正相关的文档提升到顶部位置。由于重排序器只看到一个相对较小的候选集合(通常是 20 到 100 份文档),它可以负担使用计算密集型模型,如交叉编码器甚至基于 LLM 的排序器。

RAG 阶段方法速度准确度文档量
初始检索BM25、密集嵌入中等100k - 1M
重排序交叉编码器、LLM 排序器20 - 100
生成LLM最慢最高3 - 10 (top-k)

对下游生成质量的影响是巨大的。研究表明,与仅使用初始检索器的排序相比,添加交叉编码器重排序器可以在标准 RAG 基准测试中将答案准确度提高 10-25%。


Rerankers 支持哪些重排序方法?

Rerankers 将其支持的方法组织成几个类别,每个类别具有不同的准确度、速度和资源配置。

交叉编码器

交叉编码器是最受欢迎的重排序架构。与双编码器(为查询和文档分别生成嵌入)不同,交叉编码器将查询和文档一起通过 transformer 处理,产生捕捉两个文本之间深层交互的相关性分数。Rerankers 支持 BAAI BGE、mixedbread-ai、ms-marco、jina 和其他流行的交叉编码器模型。

基于 LLM 的排序器

基于 LLM 的排序器使用语言模型直接比较文档。Rerankers 实现了两种方法:

方法方式优势权衡
列表式 (RankGPT)LLM 一次重排序所有候选全局视角、上下文感知昂贵、受上下文窗口限制
成对式 (RankZephyr)LLM 成对比较文档更细粒度、易于判断O(n^2) 比较、较慢
点式 (RankLlama)LLM 独立对每个文档评分简单、可并行化上下文排序较差

基于 API 的排序器

对于偏好托管服务的团队,Rerankers 包装了来自 Cohere、Jina、Voyage 和 Together 的商业重排序 API。这些提供高质量排序,无需本地 GPU 基础设施。


如何开始使用 Rerankers?

开始使用 Rerankers 很简单。该库围绕一个可在几分钟内学会的极简 API 设计。

步骤命令 / 代码备注
安装pip install rerankers纯 Python,无大型依赖项
基本交叉编码器from rerankers import Reranker\nr = Reranker('ms-marco-MiniLM-L6-v2')首次使用时下载模型
排序文档results = r.rank(query='cat', docs=['dog', 'mouse'])返回带分数的排序列表
API 重排序器r = Reranker('cohere', api_key=key, model='rerank-english-v3.0')需要 API 密钥
LLM 重排序器r = Reranker('rankllama')需要本地 GPU

API 的一致性意味着您可以通过更改单个参数,在轻量级交叉编码器和强大的基于 LLM 的排序器之间切换。这使得 Rerankers 成为在投入生产选择之前,针对您的特定数据对不同排序策略进行基准测试的理想工具。

# 更改一行即可切换重排序器
# r = Reranker('ms-marco-MiniLM-L6-v2')      # 轻量级交叉编码器
# r = Reranker('cohere', api_key=COHERE_KEY)  # 基于 API
# r = Reranker('rankllama')                   # 基于 LLM

results = r.rank("法国的首都是哪里?", documents)
for doc in results:
    print(f"{doc.score:.3f} - {doc.text[:50]}")

何时应该在生产中使用每种重排序器类型?

选择合适的重排序器取决于您的延迟预算、准确度要求和基础设施限制。

场景推荐的重排序器理由
高吞吐量、低延迟ms-marco-MiniLM-L6-v2在 GPU 上每个文档 <5ms
最佳准确度、有 GPUBAAI BGE 交叉编码器MTEB 排行榜顶端
无 GPU、中等预算Cohere rerank API托管式、准确度好
研究 / 基准测试全部(通过行切换)易于比较
注重隐私本地 RankLlama 或交叉编码器数据永不离开您的基础设施
最高准确度、不计成本RankGPT 列表式最佳排序、最高延迟

许多生产团队使用的实用策略是级联:使用快速交叉编码器将 100 个候选减少到 20 个,然后对最终子集应用更昂贵的 LLM 列表式排序器,以确定传递给生成 LLM 的前 3-5 份文档。


常见问题

什么是 Rerankers? Rerankers 是由 AnswerDotAI 开发的开源 Python 库,为数十种重排序模型和方法提供统一、极简的接口。它支持交叉编码器、基于 LLM 的列表式和成对排序器、基于 API 的服务(如 Cohere 和 Jina),甚至包括用于消融研究的常数分数排序器。

为什么在 RAG 管道中重排序很重要? 在 RAG 管道中,初始检索步骤(例如 BM25 或基于嵌入的搜索)会返回一组广泛的候选文档。重排序应用一个更昂贵但更准确的模型来重新排序这些候选,将最相关的文档推到顶部。这大大改善了馈送给 LLM 的上下文质量,而无需完全重新索引。

Rerankers 支持哪些重排序模型? Rerankers 支持交叉编码器(BAAI BGE、mixedbread-ai、ms-marco、jina)、基于 API 的重排序器(Cohere、Jina、Voyage、Together)、基于 LLM 的列表式排序器(RankGPT、RankZephyr、RankLlama),以及用于基线比较的无模型排序器,如随机、直通和身份排序器。

如何使用 Rerankers? 使用 pip install rerankers 安装并导入一个重排序器类。用模型名称实例化它,然后调用 reranker.rank(query, docs) 以获取带分数的排序文档列表。在模型之间切换只需要更改导入和模型名称。

Rerankers 与其他重排序库相比如何? Rerankers 通过其极简的 API 表面、单依赖项安装和广泛的模型支持来区分自己。与更复杂的框架不同,Rerankers 设计为只需单行更改即可切换,使其成为快速原型设计和基准测试的理想选择。


延伸阅读

TAG
CATEGORIES