RAG Foundry:开源RAG框架,数据、推理、测评一条龙_数据集

1. 现有RAG的问题和局限性

1.1 大语言模型的问题和局限性

大型语言模型(LLMs)在人工智能舞台上掀起了一场革命,展现出了执行多样化任务的非凡才能。尽管如此,LLMs却受限于自身的固有缺陷。

模型有时会产生听起来合理但实则错误或荒谬的答复,在确保事实的准确性、获取模型训练后的最新信息以及处理大规模情境中的相关信息方面存在挑战。

1.2 RAG的问题和局限性

增强检索生成(RAG)通过检索机制整合外部信息,从而提升LLMs的性能:利用了模型知识库之外的庞大知识库,有效克服了知识限制,减少了错误信息的产生,增强了生成内容的相关性,提供了可解释性,并且在成本效益上可能更具优势。

对LLMs进行RAG微调能够达到行业领先的表现,甚至超越了更大、更专有的模型。

然而,RAG系统的实现本质上是复杂的,需要一系列精细的决策,这些决策可能显著影响系统的性能。要求对数据和用例有透彻的理解,而且解决方案往往难以跨领域通用。

  • • RAG设计的关键决策包括文本嵌入、索引参数、检索算法、查询构建和提示设计等,这些都是超出LLM配置的重要考虑因素。
  • • 可复制性:在不同的运行、数据集和任务中实现一致且可比较的结果。训练数据、预处理步骤、模型配置和硬件的差异可能导致性能上的不一致,这给研究人员和实践者在复制发现和在前人工作基础上进一步研究带来了挑战。

此- 评估RAG系统也面临挑战,因为它们同时依赖于检索的准确性和生成的质量。这些系统需要一个复杂的评估体系,这个体系要考虑到检索信息、数据的形式化以及生成输出之间的相互影响。

2. 什么是RAG Foundry

RAG FOUNDRY是一个开源的Python框架,专为开发高级的检索增强型大型语言模型(LLMs)而设计,以应对RAG领域的各种应用场景。

支持用户在RAG的各个方面进行快速原型开发和实验,涵盖了从数据筛选、聚合与过滤,到检索、文本处理、文档排序、少量样本生成、模板化的提示设计、微调、推理以及评估等各个环节。

RAG Foundry:开源RAG框架,数据、推理、测评一条龙_加载_02

该库由四个核心模块构成:数据生成、训练、推理和评估。每个模块都通过配置文件进行封装和控制,确保了模块间的输出输入兼容性。

2.1 数据创建与处理

处理模块通过记录RAG互动,辅助创建富含上下文的数据集,对于RAG导向的训练和推理非常重要。

互动包括数据集的加载、列的规范化、数据的聚合、信息检索、基于模板的提示生成以及其他多种预处理形式。处理后的数据以统一的、与模型无关的格式保存,并附带所有相关的元数据,确保了不同模型和实验之间的兼容性与可复现性。

处理模块由一个抽象的多步骤管道组成,每个步骤由Python类实现,这些类定义了特定的数据处理功能。这些步骤分为两大类:

  • • 全局步骤:能够对整个数据集进行操作,适用于执行聚合、分组、过滤示例、联合操作等。
  • • 本地步骤:针对单个样本进行操作,适合执行检索、文本处理和字段操作等任务。

模块化设计使得构建灵活高效的RAG数据处理流程成为可能。步骤可以分为以下几类,但不限于:

  • • 加载器:从Hugging Face中心或本地资源加载数据集。
  • • 选择器:筛选样本,打乱数据集顺序,选择数据子集。
  • • 检索器:整合来自外部数据库、工具、库和管道的信息。
  • • 采样器:从任何数据集中随机收集样本或特征,以构建少量样本或负样本。
  • • 提示器:利用自定义模板和关键词映射格式化提示。

处理模块支持同时处理多个数据集,通过全局数据集共享实现。这一特性让管道的每个步骤都能够访问所有加载的数据集,增强了灵活性并允许执行复杂的处理过程。此外,模块还包括了步骤缓存功能,它在本地缓存每个管道步骤,从而提高了计算效率,并便于结果的轻松复现。

2.1.1 示例:提升问答数据集的质量

RAG Foundry:开源RAG框架,数据、推理、测评一条龙_计算机视觉_03

通过一个实例来展现处理模块的强大功能,即如何通过检索管道引入的外部信息来丰富问答数据集,制备少量样本,并利用提示模板将它们整合起来。上图展示了利用YAML配置文件定义这样一个处理流程的方法。该文件的基本结构是一个步骤列表,每个步骤都通过一个_target_指向其实现。每个步骤都有输入项,即它所作用的一个或多个数据集的名称。步骤内的其他键则关联到特定的逻辑。

  • • 前两个步骤分别从Hugging Face库和本地路径加载数据集。
  • • 第三步从主数据集中随机抽取并选取了10,000个样本。
  • • 第四步启动了一个基于Haystack的检索流程,用已加载数据集中的问题作为查询,检索相关文段,并将结果存储在docs_key中。检索步骤可以使用不同的检索流程或框架)。
  • • 第五步从辅助数据集中选取了3个少量样本,这紧随在一个提示生成步骤之后,该步骤加载了一个提示模板,并根据预定义的映射字典替换了所有信息。
  • • 最后,保存数据集到本地路径。
2.2 训练

提供了一个训练模块,基于前述处理模块生成的数据集来微调模型。该模块建立在广泛认可的TRL2训练框架之上,并支持诸如LoRA这样的高级而高效的训练技术。下图展示了一个训练配置的示例。

RAG Foundry:开源RAG框架,数据、推理、测评一条龙_计算机视觉_04

2.3 推理

推理模块负责基于处理模块生成的数据集来制作预测。推理在概念上与评估步骤相分离,因为它在计算上更为密集。此外,可以在单一准备好的推理结果文件上执行多次评估。下图展示了一个基于数据集生成预测的配置示例。

RAG Foundry:开源RAG框架,数据、推理、测评一条龙_数据集_05

2.4 评估

局部度量标准可以应用于单个样本,例如精确匹配(Exact Match, EM)

全局度量标准则基于整个数据集运行,如分类度量中的召回率(Recall)。

下图展示了一个配置示例;它包含了一个从输出中抽取答案的答案处理器,以及一系列待执行的度量标准。

RAG Foundry:开源RAG框架,数据、推理、测评一条龙_搜索引擎_06