这是用户在 2024-7-15 19:49 为 https://huggingface.co/blog/mlabonne/agentic-datagen 保存的双语快照页面,由 沉浸式翻译 提供双语支持。了解如何保存?


生成有意识的数据的兴起

 社区文章  发布于 2024 年 7 月 15 日

image/webp


随着大语言模型架构的整合,训练数据的质量成为了创造顶级模型的最关键因素。这不仅适用于预训练,也适用于后训练,其中 instruction 数据集对最终模型产生了重大影响。近年来,两种创新方法应对此挑战 emerged:AgentInstruct 和 Arena Learning。 两个框架来自微软研究,利用多个大语言模型来创建和优化样本。


在本文中,我想要探讨这两种方法,并分析它们的相似点和不同点,并看看我们能否将它们整合在一个端到端的框架中。


🤖 AgentInstruct: 一个多智能体方法


AgentInstruct 是 Mitra 等人(2024)设计的代理框架,旨在生成大规模、多样且高质量的合成数据。该框架使用了一个复杂的流程,通过多阶段处理将原始文本转化为精炼的指令。在论文中,代理似乎基于 GPT-4,同时也被用于评估数据质量以及某些情况下产生的幻觉。

image/png


来自 AgentInstruct 纸发表的插图。


AgentInstruct 操作流程由四个主要步骤组成:


  • 种子收集:收集一个多样化的原始种子库,如教科书章节、网络文章和代码片段。这些种子作为生成新指令的基础。

  • 内容转换:一个或多个专门化的代理将每个种子转换成一个简化了指令创建的中间表示。这些代理被设计成执行诸如生成论据段落、辩论、对话、会议记录、诗歌、讽刺内容等任务。

  • 种子指令生成:多个代理基于预定义的指令类型分类,将处理后的种子生成多种多样、涵盖广泛的不同指令。例如,在阅读理解领域,分类包括 43 种问题类型,从 Literal Comprehension(直觉理解)到 Critical Analysis 和 Inference(批判分析和推理)。

  • 指令完善:最终阶段涉及迭代提升生成指令的复杂度和质量。这通过建议-编辑代理对实现。建议代理提出增加指令复杂度的方法,而编辑代理则根据需要修改指令。


为了更好地了解每个阶段产生的内容,我建议阅读论文中提供的示例。


AgentInstruct 流程中的每个流由多个由大语言模型驱动的智能体组成。这些智能体可以配备搜索 API 或代码解释器等工具以增强其能力。在它们的系统消息中,这些智能体的角色被精心定义,以确保它们能够有效地执行特定的任务。


代理人指令的作者实现了关于 17 种技能的流程,每种技能包含多个子类别。这些技能涵盖了广泛的主题,包括阅读理解、问题回答、编码、检索增强生成、创意写作、工具使用和网络控制。


利用这个全面的管道,研究者生成了约 2200 万条指令。他们将这些合成数据与来自其他来源的 3800 万条指令相结合,形成了 2.58 亿条对齐指令的数据库。然后,这个数据库被用于微调 Mistral-7b 模型,最终创造了 Orca-3 模型。


⚔️ 赛场学习:一种竞争性的完善方法


由罗,苏等人(2024 年)提出的 Arena 学习,采用了与 Luo, Suo, et al. (2024) 相同的方法来生成高质量的指令数据。与其相反,它专注于通过模拟竞争环境来改进现有的指令数据集。它不是一种自主框架,因为模型没有被提供工具,但很容易转变成一种自主框架。

image/png


来自 Arena Learning 的图表。


阿卡德学派学习管道的关键组件是:


  • 离线两两大语言模型竞技场:Arena 学习创建了一个模拟的竞技场,在一个大量指令数据集上,多个大语言模型之间竞争。一个裁判大语言模型(meta-llama/Meta-Llama-3-70B-Instruct)评估每个指令下竞争模型的回应,提供排名、评分和解释。这一过程有效地模拟了人类评估,但规模更大、成本更低。


  • 数据收集与预处理:框架从多个开放来源收集的大量对话数据开始。这些数据经过过滤、清理和去重处理。对长度过短、违法/有毒或与基准测试集太相似的指令进行删除。然后,精炼的数据集被分为多个部分进行迭代训练。


  • 迭代战斗与模型演进:这个过程涉及多轮战斗和训练:


    1. 一个初始模型(WizardLM-β-SFT-I0)在一小部分数据上进行训练。

    2. 这个模型与其他最先进的大语言模型在另一个数据集上进行竞争。

    3. 收集了 WizardLM-β 失败的实例,将获胜模型的响应作为微调的目标。

    4. 这一过程会重复多次,每次迭代可能使用不同的训练策略(SFT, DPO, PPO)。

  • 训练策略:Arena Learning 利用多种训练策略来改进模型:


    • 监督微调(SFT):利用比赛结果来微调模型,以在它表现不佳的地方进行训练。

    • 直接偏好优化(DPO):将赢/输响应视为训练中的选择/拒绝对偶。

    • 近端策略优化(PPO):利用比赛结果训练一个奖励模型和一个语言模型。

  • 巫师竞技场评测:作者创建了一个离线测试集(WizardArena),包含多样性和困难度不同的子集。通过一对一的战斗来评估模型,结果被用于计算埃洛排名。评测与基于人类的竞技场非常接近,但速度更快、成本更低。


  • 数据选择:该管道使用各种策略来选择高质量的训练数据,包括基于阈值的过滤以控制数据大小和质量,重点是模型表现不佳的实例,在后续迭代中逐渐转向更复杂的数据。

image/png


来自 Arena Learning 的图表。


这个框架允许进行多次战役和训练的迭代,如以 WizardLM-β 为例。模型的能力逐步增强,特别是在复杂任务中尤为明显。这一过程带来了 Elo 排名、MT-bench 得分等评估指标的显著提升。


Arena 学习专注于改善训练模型目前存在的不足之处。一个很好的功能是,它不需要特别强大的模型,比如 Claude 3.5 Sonnet 或 GPT-4o。具有类似水平的模型在某些任务和领域可能表现更好,也可以更好地应对某些提示的语法结构。这意味着整个管道可以使用开放权重的模型部署,这对于你已经拥有一流基础设施的情况来说是一个很大的优势。


🪄 ArenaInstruct:将 AgentInstruct 和 Arena 学习结合起来


虽然 AgentInstruct 和 Arena Learning 都旨在为训练后的时间模型生成高质量的数据,但它们在实现这一目标的方法上采取了根本不同的方法。了解它们之间的差异,以及它们的优势和劣势,是将它们相结合的初步认识。我选择了四个我想要着重关注的方面:


  • 数据生成:AgentInstruct 从原始文本开始,通过一个多阶段的管道从零开始生成指令。这使得能够创建全新的内容,可能带来更大的多样性和新颖性在生成的指令中。另一方面,Arena Learning 通过模拟模型之间的战斗来优化现有的指令数据集。这种方法利用了现有数据集的质量,并通过竞争性评估来改进它们。


  • 数据质量:AgentInstruct 依赖于建议编辑代理对指令进行迭代精炼。这种方法允许对生成指令的复杂度和质量进行细致的控制。相比之下,Arena Learning 使用大语言模型作为评判者,在模拟战斗中评估回答。这意味着整个数据质量过程由单一模型来处理。


  • 多样性与复杂性:AgentInstruct 通过分类指令类型和多个转换代理,明确(即,人工地)设计以实现多样性。这种结构化的方法确保了覆盖广泛技能和指令类型的覆盖率。Arena Learning 的多样性源于竞争模型和初始指令数据的多样性。虽然这可能导致更不结构化的多样性,但它可能能够捕获更自然的指令风格变化。


  • 灵活性:AgentInstruct 的管道使得添加新种子类型和指令类别变得十分容易,使其高度适应于新的领域和任务。Arena Learning 的迭代战斗流程使得目标模型能够持续改进,这可能允许它更快地适应新的挑战和竞争模型。


基于这种比较,我们一眼就能看出如何利用每个框架的优势。例如,基于分类的 数据生成更具有可操纵性,可以通过领域学习来改进。但我们也可以通过反馈信号来在多个迭代中改进这一第一步。

image/png


这样的一种混合方法可能会如何运作:


  1. AgentInstruct 生成指令:利用 AgentInstruct 从原始文本中产生广泛且多样化的指令(无答案!)。这将确保涵盖我们用例中适用于的广泛任务和领域。

  2. Arena 学习问答生成:将 Arena 学习的竞争性战斗方法应用于从模型池中精炼和选择最高质量答案。这将结合 AgentInstruct 生成新颖内容的能力与 Arena 学习坚固的质量控制机制。

  3. 数据质量评估:我们不需要依赖单一的大语言模型作为评判者,可以通过奖励模型或大语言模型作为陪审团来改进数据选择过程。

  4. 多样性的反馈:利用 Arena Learning 战斗中的洞察力,动态更新 AgentInstruct 的指令分类。这将使生成过程更加专注于产生在现实场景中表现最具有挑战性或有用类型的指令。

  5. 复杂度反馈:利用 Arena Learning 的性能指标来识别指令设置过于简单或过于复杂的地方。利用这一信息来指导 AgentInstruct 的复杂度改进过程,确保经过多轮迭代后,数据集能够恰当地挑战模型。


通过结合这些方法,我们可以创建一个强大的生成教学指令和评估的反馈循环。这种混合框架将受益于 AgentInstruct 生成新颖、多样内容的能力以及 Arena Learning 竞争性质量控制和模型改进流程。结果将是一个更 robust、更有效、持续改进的后训练数据集,供大语言模型使用。

 结论


综上所述,本文探讨了两种最近在合成数据生成中兴起的方法:AgentInstruct 和 Arena Learning。我们提出了一种结合 AgentInstruct 的结构化、基于分类的 方法与 Arena Learning 的基于多个大语言模型的迭代改进的解决方案。这种组合利用了两个框架的长处,能够有条不紊地生成多样化的数据,并通过从大语言模型池获得的反馈,持续改进底层分类。 我觉得去掉建议者-编辑者代理对可能会失去一些质量。如果你有其他想法,请告诉我。


尽管如此,数据质量评估是将其应用推向完美的一大挑战。目前,依赖像 GPT-4 这样的模型或 Llama 3 70B Instruct 作为评判标准的做法并不完美,并且存在已知的局限性(参见我快速的评测在这里)。改进评估阶段的质量,可能会导致更高效的数据集,以更少的样本达到更好的性能。要想了解更多关于如何创建高质量数据集的方法,请查看我的 GitHub 仓库 🤖 LLM 数据集。