castorini/rank_llm
RankLLM is a Python toolkit for reproducible information retrieval research using rerankers, with a focus on listwise reranking.
解决的问题
搜索引擎通常返回的初始结果集并非完全按相关性排序——例如,使用 BM25 或类似检索器时。RankLLM 使用大型语言模型对这些候选列表进行重新排序(重排序),使最相关的文档出现在更前面。它支持三种重排序策略:逐点(独立评分每个文档,如 MonoT5)、成对(比较文档对,如 DuoT5)和列表式(整体考虑整个列表,如 RankZephyr、RankGPT、LiT5)。这在不重建检索系统的情况下提高了搜索质量。
工作原理
典型工作流程是:首先,检索初始候选集(例如,使用 BM25 或 SPLADE 获取前 100 个文档)。然后,将这些候选输入重排序模型,模型根据与查询的相关性对它们重新排序。RankLLM 提供了统一的命令行界面(rank-llm)和 Python API。它支持多种推理后端:通过 vLLM 的本地模型(如 RankZephyr、RankVicuna)、通过 OpenAI/OpenRouter 的托管模型(如 GPT-4o)以及 Gemini(如 Gemini 3 Flash)。该库还包括评估工具(如 nDCG@10、MAP、召回率)、用于检查模型调用的分析模块,以及用于将结果保存为 JSONL、TREC 或 JSON 格式的数据写入器。为了便于部署,它可以通过 HTTP 或模型上下文协议(MCP)提供重排序服务。自定义提示模板可以作为 YAML 文件提供。
适用人群
从事信息检索、搜索质量和排序的研究人员和开发者。它适用于运行实验、复现已发表的结果(通过 MS MARCO 数据集 DL19–23 的两键复现命令)以及构建需要基于 LLM 的重排序的生产系统。该库设计灵活,既有用于快速运行的 CLI,也有用于深度集成的 Python API。
亮点
- 支持逐点(MonoT5)、成对(DuoT5)和列表式(RankZephyr、RankVicuna、RankGPT、LiT5)重排序模型
- 包含预训练重排序器模型库(RankZephyr 7B、RankVicuna、LiT5 套件、MonoT5、DuoT5、MonoELECTRA)
- 同时支持开源模型(通过 vLLM)和专有 API(OpenAI、OpenRouter、Gemini)
- 可以使用仅第一个 token 的 logits(如 FirstMistral)进行重排序,以提高推理效率
- 通过 YAML 文件自定义提示模板
- 端到端流水线:检索、重排序、评估和分析
- MS MARCO 段落数据集(DL19–DL23)的两键复现命令
- 服务选项:HTTP API 和 MCP(模型上下文协议)服务器
- 用于微调列表式重排序器的训练脚本
- 与流行工具包(如 LlamaIndex)紧密集成(注意:README 表明在许多工具包中已实现)
相关
- 项目
- 项目
- 项目
- 项目
- 项目