随着大型语言模型(LLM)的出现,检索增强生成(RAG)技术的潜力引起了广泛的研究关注。许多新颖的算法和模型被引入以增强RAG系统的各个方面。然而,由于缺乏标准化的实施框架,加上RAG过程本身的复杂性,使得研究人员在一个一致的环境中比较和评估这些方法变得具有挑战性和耗时。
现有的RAG工具包如LangChain和LlamaIndex虽然可用,但通常笨重且难以操作,未能满足研究人员的个性化需求。
为了应对这一挑战,我们提出了FlashRAG,这是一个高效且模块化的开源工具包,旨在帮助研究人员在统一的框架内重现现有的RAG方法并开发自己的RAG算法。
https://arxiv.org/pdf/2405.13576
开源地址:https://github.com/RUC-NLPIR/FlashRAG
unset
unset
什么是RAG?
unset
unset
在大型语言模型(LLMs)时代,检索增强生成(RAG)已成为通过利用外部知识库来减轻LLMs中的幻觉问题的强大解决方案。RAG技术的重要应用和潜力吸引了相当多的研究关注。
近年来,许多新算法和模型的引入旨在改善RAG系统的各个方面,但在一致的设置下比较和评估这些方法变得越来越具有挑战性。许多研究作品并非开源,或者在其开源代码中具有固定的设置,这使得难以适应新数据或创新组件。
unset
unset
为什么要新的RAG框架?
unset
unset
FlashRAG是一个开源库,旨在使研究人员能够轻松地复现现有的RAG方法并开发他们自己的RAG算法。与现有的RAG工具包相比,FlashRAG更适合研究人员使用。
-
FlashRAG包含了全面的RAG组件,包括四个主要类别中的13个组件:判断器、检索器、精炼器和生成器。
-
FlashRAG已经实现了12种先进的RAG算法,如自我RAG和FLARE,涵盖了顺序RAG、条件RAG、分支RAG和循环RAG等类别。
-
FlashRAG编制了32个常见的RAG基准数据集,并将它们预处理成统一的格式。
-
FlashRAG提供了一套全面的辅助脚本,包括下载和切片维基百科以创建语料库、构建用于检索的索引,以及预先准备检索结果。
unset
unset
FlashRAG模块介绍
unset
unset
FlashRAG旨在为研究人员提供便利,以便他们进行与RAG相关的研究。如图1所示,FlashRAG工具包的总体结构包括三个层次的模块:环境模块、组件模块和流水线模块。括各种RAG组件,每个组件都具有其特定的角色(例如,检索和生成)。
组件模块将RAG过程中涉及的所有元素整合到一个统一的框架中。每个组件都具有自主功能,可以独立应用。目前,组件模块包括五个主要组件:Judger(评判器)、Retriever(检索器)、Reranker(重新排序器)、Refiner(精炼器)和Generator(生成器)。
Judger(评判器)
Judger作为一个初步组件,评估查询是否需要检索。鉴于该领域的工作和模型有限,我们目前提供基于SKR方法的评判器,该方法使用经过筛选的LLM自知识数据确定检索的必要性。
Retriever(检索器)
检索器的实现在我们的工具包中得到了广泛覆盖。对于稀疏检索,我们集成了Pyserini库以便于使用BM25方法。对于密集检索,我们支持各种基于BERT的嵌入模型,如DPR、E5和BGE。FlashRAG还支持基于T5架构的模型,如ANCE。我们使用FAISS进行向量数据库计算以确保检索效率,并利用HuggingFace的datasets库以提高语料库加载速度。
Reranker(重新排序器)
Reranker旨在优化检索器返回的结果顺序,以提高检索准确性。目前,FlashRAG支持各种广泛使用的Cross-Encoder模型,如bgereranker和jina-reranker。在使用嵌入模型进行重新排序的场景中(例如,使用BM25作为检索器),我们还支持使用Bi-Encoder模型,如E5作为重新排序器。
Refiner(精炼器)
Refiner用于优化生成器的输入文本,减少令牌使用量并减少检索文档中的噪音,从而改善最终的RAG响应。作为RAG过程的重要部分,各种研究致力于开发优越的精炼器。
Generator(生成器)
Generator是RAG过程中的最后一个组件,在我们的工具包中得到了全面覆盖。在生成器模块中,我们集成了两个主要的LLM加速库,vllm和FastChat,因此支持了大量主流的LLM。
此外,我们提供了Transformers库的本机接口以增强稳健性。我们还支持各种编码器-解码器模型,如Flan-T5。对于这些模型,我们促进了在解码器中使用Fusion in Decoder(FiD)技术,进一步优化处理检索文档时的效率。
unset
unset
FlashRAG 流水线
unset
unset
FlashRAG流水线处理用户提供的数据集,在其上执行相应的RAG流程,并提供最终的评估结果和中间结果。
我们将所有的RAG流程归类为四种类型:顺序、分支、条件和循环。到目前为止,我们已经实现了8种不同的流水线,涵盖了一系列先进的RAG作品。
-
顺序流水线实现了一个线性的查询执行路径,形式化表示为查询 -> 检索器 -> 检索后处理(重新排序器、精炼器) -> 生成器。一旦用户配置了他们的设置,库会自动加载必要的组件以及它们对应的处理逻辑。
-
分支流水线为单个查询执行多个路径(通常每个检索文档一个路径),并合并所有路径的结果形成最终输出。
-
条件流水线利用评判器根据判断结果将查询引导到不同的执行路径上。在当前框架中,被认为需要检索的查询被发送到正常的顺序处理流程中,而其他查询则绕过检索直接进入生成阶段。
-
循环流水线涉及检索和生成过程之间的复杂交互,通常包括多个检索和生成循环。与前三种类型的流水线相比,这种类型提供了更大的灵活性和更好的结果。
unset
unset
FlashRAG 评价指标
unset
unset
检索方面指标
为了评估检索的质量,
FlashRAG
支持四种指标,包括召回率@k、精确率@k、F1@k和平均准确率(MAP)。
与评估独立的检索系统不同,RAG过程中检索到的文档通常缺乏黄金标签(例如,相关或不相关的标签)。
生成方面指标
为了评估生成的质量,
FlashRAG
支持五种指标,包括令牌级F1分数、完全匹配、准确率、BLEU和ROUGE-L。
与
40000+
来自竞赛爱好者一起交流~