|
编者按 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集成。Abdelrahman Abdallah, CC-BY LicenseingFang 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工具的痛点:碎片化与复杂性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工具存在明显短板,它们要么只专注于检索,要么只关注重排序,很少有工具能够提供端到端的解决方案。这种碎片化导致研究人员和工程师不得不花费大量时间在工具整合上,而非核心算法优化。现有的工具如Pyserini、Rerankers和RankLLM虽然各有所长,但它们通常缺乏灵活性,实现方式过于刚性,并且需要繁琐的预处理步骤,这使得它们在研究驱动的实验环境中显得不够友好。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);">为什么需要两阶段检索管道?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);">你可能会问:为什么不直接使用一个强大的检索方法,而要采用两阶段管道?答案在于效率与性能的平衡。在第一阶段,系统使用轻量级的检索方法——可以是基于关键词的(如BM25)或基于神经网络嵌入的向量搜索。这一步骤计算成本低:你只需要在推理时对一个(通常很短的)查询进行编码,然后快速进行相似度检查。然而,这一步骤是"冷启动"的,文档的表示是预先计算好的,不会根据新查询进行调整。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);">这就是重排序发挥关键作用的地方。在重排序阶段,模型同时考虑查询和每个候选文档,能够捕捉到初始检索步骤可能遗漏的微妙联系。缺点是这个过程计算成本高:你必须对每个候选文档运行推理,无法像之前那样预计算表示。对于大规模系统,实时处理每个文档的成本过高。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);">解决方案很直接:结合两种方法。首先使用更快的方法检索较小的文档池(比如10、50或100个看起来最相关的文档),然后对这个短列表应用计算更密集的重排序模型。这种混合策略结合了快速初始检索的效率和查询感知重排序的准确性,创建了一个高效的两阶段管道。Rankify:统一的检索与生成框架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的核心组件:统一检索框架检索定义了搜索引擎的工作方式——当你输入查询时,它获取相关文档。然而,并非所有搜索方法都相同。 可以将检索视为一个两步过程: - • 稀疏检索(如BM25)类似于基于关键词的简单搜索,类似于早期搜索引擎的工作方式——匹配查询和文档之间的精确词汇。
- • 密集检索(如DPR、ANCE、ColBERT)更像是Google的AI驱动搜索,查询基于含义而非精确关键词匹配来理解。密集检索不是寻找精确的词汇,而是将文本转换为数值向量以找到语义上相似的内容。
通过结合这两种方法,混合检索通过利用基于关键词和基于含义的搜索的优势来提高准确性。 多样化的检索器与重排序支持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)
RAG集成与评估工具Rankify不仅仅是一个检索和重排序工具,它还提供了与RAG的无缝集成,允许将检索到的文档传递给语言模型进行评估。Rankify的RAG集成支持多种生成模型,包括: - • Fusion-in-Decoder(FiD):使用检索到的文档作为生成响应的额外上下文。
- • 上下文学习:为大型语言模型(如GPT和T5)提供检索到的知识。
- • 零样本检索增强生成:无需任务特定训练即可实现知识检索。
此外,Rankify还提供了全面的评估工具,包括各种检索和问答评估指标,如Top-K准确率、精确匹配(EM)、召回率、精确度和NDCG(归一化折扣累积增益),帮助研究人员客观地比较不同方法的性能。 性能对比:Rankify vs 其他工具Rankify在多个基准测试中展现出卓越的性能。例如,在Natural Questions(NQ)数据集上,Rankify实现的DPR检索器达到了79.5%/86.8%的Top-20/Top-100准确率,与原始DPR论文报告的78.4%/85.4%相比有明显提升。类似地,在TriviaQA和WebQuestions数据集上,Rankify实现的检索器也展现出与原始论文相当或更好的性能。 使用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的数据集支持Rankify支持的40个数据集涵盖了各种任务类型,包括开放域问答、多跳推理、事实验证和时间检索等。这些数据集的检索性能各不相同,例如,在TriviaQA等开放域问答数据集上,BM25检索器可以达到较高的Top-k准确率,而在2WikiMultiHopQA和HotpotQA等多跳数据集上,检索率相对较低,这反映了在多个文档中检索支持证据的挑战。下表展示了BM25在多个数据集上的检索性能:
|