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