编者按
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 13px;font-style: normal;padding: 1em;border-radius: 6px;color: rgba(0, 0, 0, 0.5);background: rgb(247, 247, 247);">ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 1em;display: block;letter-spacing: 0.1em;color: rgb(63, 63, 63);">编者按:现有RAG工具的碎片化和复杂性常常让开发者头疼不已。昨天我的Agent群里朋友们就Rerank问题展开激烈讨论,我想起之前看到的一篇论文,这项研究介绍了一个完美的开源python工具包Rankify,它将检索、重排序和RAG三大功能整合在一个统一框架中,大幅简化了开发流程。无论您是AI研究人员还是工程师,这篇文章都将为您揭示如何通过Rankify构建更高效、更准确的信息检索和生成系统。作者Abdelrahman Abdallah博士是因斯布鲁克大学数据科学组的专家,在自然语言处理和信息检索领域拥有丰富经验。ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;display: table;padding: 0px 0.2em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);">当RAG变得不再折磨:Rankify解决方案ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 13px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">信息检索、重排序和检索增强生成(RAG)是现代AI应用的核心组件,但现有解决方案往往支离破碎,缺乏统一框架。你是否曾经为了实现一个完整的RAG系统而疲于奔命,在不同工具间切换,忍受各种兼容性问题?这种痛苦体验不仅浪费时间,还会影响最终产品质量。现在,一个名为Rankify的开源工具包横空出世,它将检索、重排序和RAG融合在一个统一的框架中,让开发者能够轻松构建高效的信息检索和生成系统,而不必再为工具链的复杂性而头痛。这项研究提供了1.48TB,40个基准数据集以及包括 BM25、DPR、ANCE、BPR、ColBERT、BGE 、 Contriever7种检索技术,24个主流重排序模型,无缝RAG集成。Rankify作为一个全面的Python工具包,旨在解决现有RAG系统的碎片化问题。它提供了一个模块化、可扩展的生态系统,将检索、重排序和RAG统一在一个框架内。与其他工具相比,Rankify支持40个数据集、7种检索器、24种重排序模型和3种RAG方法,总共可以创建超过20,160种不同的配置组合,这一数字远超其他工具包如FlashRAG(2,304种组合)和FastRAG(仅21种组合)。下表展示了Rankify与其他工具的详细对比:
历史上,重排序主要由交叉编码器模型主导——本质上是使用类BERT架构的二元分类器。这些模型将查询和候选文档作为输入,并产生"相关性"分数(通常被解释为概率)。这种方法被称为逐点重排序(Pointwise re-ranking),为每个查询-文档对生成独立的分数。
随着时间推移,重排序方法已经超越了传统模型。一个例子是MonoT5,这是一个训练用来将文档分类为"相关"或"不相关"的模型。模型预测这些标签之一,分配给"相关"的概率作为排名的相关性分数。
更先进的方法现在将大型语言模型(LLMs)应用于重排序任务。例如,BGE-Gemma2微调了一个90亿参数的LLM,通过估计"相关"标签的可能性来计算相关性分数。
除了这些模型外,一些方法采取了不同的重排序方式。例如:
• 后期交互模型(如ColBERT)——不是直接产生相关性分数,而是在后期阶段比较查询和文档的表示,完善排名结果。
• 列表式重排序——不是单独对每个文档评分,而是一次性分析整个文档集并集体重新排序。传统上,基于T5的模型用于此目的,但较新的方法在零样本模式下探索LLMs(RankGPT)或微调较小的模型,使用更先进模型的输出(RankZephyr)。
简而言之,重排序有许多方法,每种方法都有其优缺点——没有一种方法在所有情况下都是最佳的。找出哪种模型最适合你的用例(有时需要微调自己的模型)可能具有挑战性。使这更加困难的是,不同技术通常需要特定的输入格式并以不同方式产生输出,使得在模型之间切换变得困难。
Rankify的一大亮点是它提供了40个经过精心策划的数据集1.48TB,超过1,000万个预检索的文档,涵盖问答、对话、实体链接等多个领域。它还包含了针对多种检索器预计算的Wikipedia和MS MARCO语料库,这极大地减少了预处理开销。想象一下,你不再需要花费数小时甚至数天来准备数据和训练检索模型,所有这些都已经为你准备好了,你只需专注于你的核心任务。
数据集链接:https://huggingface.co/datasets/abdoelsayed/reranking-datasets
检索定义了搜索引擎的工作方式——当你输入查询时,它获取相关文档。然而,并非所有搜索方法都相同。
可以将检索视为一个两步过程:
通过结合这两种方法,混合检索通过利用基于关键词和基于含义的搜索的优势来提高准确性。
Rankify集成了密集检索器(如DPR、ANCE、BPR、ColBERT、BGE、Contriever)和稀疏检索器(如BM25),同时支持24种最先进的重排序模型。这种多样性使得研究人员和工程师可以轻松尝试不同的检索和排序策略,找到最适合特定任务的组合。下面是一个简单的代码示例,展示了如何使用Rankify进行检索和重排序:
fromrankify.retrieversimportBM25Retriever
fromrankify.rerankersimportMonoT5Reranker
# 初始化检索器和重排序器
retriever = BM25Retriever(index_name="wiki-small")
reranker = MonoT5Reranker()
# 执行检索
query ="谁发明了电灯泡?"
retrieved_docs = retriever.search(query, k=10)
# 重排序结果
reranked_docs = reranker.rerank(query, retrieved_docs)Rankify不仅仅是一个检索和重排序工具,它还提供了与RAG的无缝集成,允许将检索到的文档传递给语言模型进行评估。Rankify的RAG集成支持多种生成模型,包括:
此外,Rankify还提供了全面的评估工具,包括各种检索和问答评估指标,如Top-K准确率、精确匹配(EM)、召回率、精确度和NDCG(归一化折扣累积增益),帮助研究人员客观地比较不同方法的性能。
Rankify在多个基准测试中展现出卓越的性能。例如,在Natural Questions(NQ)数据集上,Rankify实现的DPR检索器达到了79.5%/86.8%的Top-20/Top-100准确率,与原始DPR论文报告的78.4%/85.4%相比有明显提升。类似地,在TriviaQA和WebQuestions数据集上,Rankify实现的检索器也展现出与原始论文相当或更好的性能。
使用Rankify构建RAG系统非常简单,只需几行代码即可完成。首先,通过pip安装Rankify:
pipinstallrankify
然后,你可以使用以下代码构建一个完整的RAG系统:
fromrankify.retrieversimportBM25Retriever
fromrankify.rerankersimportMonoT5Reranker
fromrankify.ragimportLLMGenerator
# 初始化组件
retriever = BM25Retriever(index_name="wiki-small")
reranker = MonoT5Reranker()
generator = LLMGenerator(model_name="llama-7b")
# 执行RAG流程
query ="解释量子计算的基本原理"
retrieved_docs = retriever.search(query, k=10)
reranked_docs = reranker.rerank(query, retrieved_docs)
answer = generator.generate(query, reranked_docs[:3])
print(answer)你正在开发一个问答系统,需要从大型知识库中检索信息并生成准确的回答。使用传统方法,你需要分别构建检索系统和生成系统,然后想办法将它们整合起来。而使用Rankify,这一切变得异常简单。你只需几行代码就可以实现从检索到生成的完整流程,而且可以轻松切换不同的检索器和重排序模型,找到最适合你特定任务的组合。
Rankify支持的40个数据集涵盖了各种任务类型,包括开放域问答、多跳推理、事实验证和时间检索等。这些数据集的检索性能各不相同,例如,在TriviaQA等开放域问答数据集上,BM25检索器可以达到较高的Top-k准确率,而在2WikiMultiHopQA和HotpotQA等多跳数据集上,检索率相对较低,这反映了在多个文档中检索支持证据的挑战。下表展示了BM25在多个数据集上的检索性能:
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |