
一款好用的开源工具,高效实现Reranker 原创
Reranker 是任何检索架构(RAG、Agent等)的重要组成部分,但它们通常也比PipeLine中其他部分更模糊。有时,甚至很难知道该使用哪一个。每个问题都是不同的,使用 X 的最佳模型不一定与使用 Y 的模型相同;新的重新排名方法不断涌现,该如何兼容他们呢?今天介绍一款高效扩展工具rerankers:
设计目标
新的重新排名方法不断涌现:例如,RankGPT 使用 LLM 对文档进行重新排序,就在去年出现,取得了非常有希望的零样本基准测试结果。
所有不同的重新排名方法往往都在自己的库中完成,具有不同级别的文档。这导致了更高的进入门槛。新用户需要在多种不熟悉的输入/输出格式之间切换,所有这些格式都有自己的怪癖!
rerankers目标是:
- 🪶轻。它仅提供作为依赖项的基本必需品。
- 📖 易于理解。只需学习少数几个calls,然后您可以使用提供的所有重新排名模型。
- 🔗易于集成。它应该适合几乎任何现有的管道,只需几行代码!
- 💪易于扩展。只需对代码库知之甚少,即可添加任何新的重新排名模型。您所需要的只是一个新类,其中包含一个将 (query, [documents]) 输入映射到output.rank()
- 🐛易于调试。这是一个测试版,可能会有问题,但代码库的构思方式使大多数问题都应该易于跟踪并尽快修复。
支持的模型
目前项目库支持各类rerank模型:
- ✅ 任何标准的 SentenceTransformer 或 Transformers 交叉编码器
- ✅ RankGPT (可通过原始 RankGPT 实现和改进的 RankLLM 实现获得)
- ✅ 基于T5 的pointwise排名器(InRanker、MonoT5...)
- ✅ 基于LLM 的pointwise排名器(BAAI/bge-reranker-v2.5-gemma2-lightweight 等)
- ✅ Cohere、Jina、Voyage 和 MixedBread API 重新排名器
- ✅ FlashRank 重新排序器(ONNX 优化模型,在 CPU 上非常快)
- ✅ 基于 ColBERT 的 reranker - 不是最初为重新排序而设计的模型,但在某些情况下确实表现得相当强大。实现是轻量级的,仅基于 transformers。
- 🟠⭐ RankLLM/RankZephyr:通过包装 rank-llm 库库来支持!对 RankZephyr/RankVicuna 的支持未经测试,但 RankLLM + GPT 模型完全有效!
工具安装
工具安装比较简单,一行即可:
工具调用
模型加载
无论架构如何,都可以在一行中加载任何受支持的 reranker:
Rerankers 将始终尝试根据其名称推断您尝试使用的模型,但如果可以,向其传递 model_type
参数总是更安全的!
模型推理
无论加载了哪个 reranker,都使用加载的模型对 documents 的查询进行排名,也支持异步调用:
result:
所有 reranker 都将返回一个对象,这是一个 pydantic 对象,其中包含对象列表和一些其他有用信息,例如原始查询。您可以通过运行 :RankedResults
Result
k
top_k()
langchain中也能用,只需一行就可转换:
好啦,介绍到这里,更多用法等你去探索吧:
本文转载自公众号哎呀AIYA
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
赞
收藏
回复

回复
相关推荐