AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


llama3 Post-Training(长上下文&工具使用)
发布日期:2024-09-12 14:41:52 浏览次数: 1864 来源:MLSys2024


长上下文
在最终的预训练阶段,我们将Llama 3的上下文长度从8K个标记扩展至128K个标记。与预训练阶段相似,我们在微调过程中发现,必须精细调整训练方案,以平衡处理短上下文与长上下文的能力。

SFT与合成数据生成:若仅采用包含短上下文数据的现有SFT方案进行简单应用,则会导致预训练阶段所具备的长上下文能力出现显著退化,这凸显了在我们SFT数据组合中融入长上下文数据的必要性。然而,在实际操作中,由于阅读长篇幅上下文既繁琐又耗时,因此让人类去标注此类示例在很大程度上并不切实际。因此,我们主要依赖合成数据来填补这一空白。我们利用Llama 3的早期版本,基于关键的长上下文用例生成合成数据,这些用例包括(可能包含多轮对话的)问答、长文档摘要以及对代码仓库的推理,下文将对这些用例进行更详细的描述。

1.问答系统:我们从预训练数据集中精心挑选了一系列长文档,并将这些文档切割成每段8K个标记的区块。随后,我们利用Llama 3的早期版本模型,针对随机选取的区块生成问答对。在训练过程中,我们采用完整的文档作为上下文。
2.长文摘要:对于长上下文文档,我们采用了分级摘要的方法。首先,使用我们最强大的Llama 3 8K上下文模型对每段8K长度的输入进行摘要,然后再对这些初步摘要进行二次摘要。训练时,我们提供完整的文档,并提示模型在保留所有重要细节的同时对文档进行摘要。此外,我们还基于文档的摘要生成问答对,并向模型提出需要全局理解整个长文档的问题。
3.长上下文代码推理:我们解析Python文件,识别导入语句并确定其依赖关系。在此基础上,我们选择了那些被其他文件引用最多的关键文件(即至少被其他五个文件引用的文件)。然后,我们从代码库中移除这些关键文件之一,并提示模型识别哪些文件依赖于缺失的文件,并生成必要的缺失代码。
我们进一步根据序列长度(16K、32K、64K和128K)对这些合成样本进行分类,以便更精确地针对输入长度进行优化。
通过细致的消融实验,我们观察到,将0.1%的合成长上下文数据与原始短上下文数据混合,能够在短上下文和长上下文基准测试中均实现性能优化
对于DPO部分,我们发现,只要SFT(监督微调)模型擅长处理长上下文任务,那么在DPO中仅使用短上下文训练数据并不会对长上下文性能产生负面影响。我们推测,这可能是因为我们的DPO方案中的优化器步骤少于SFT。基于这一发现,我们在长上下文SFT检查点的基础上,保留了DPO的标准短上下文方案。
工具使用

教授大型语言模型(LLMs)使用搜索引擎或代码解释器等工具,能够极大地扩展它们能够解决的任务范围,使它们从纯粹的聊天模型转变为更通用的助手(Nakano等人,2021;Thoppilan等人,2022;Parisi等人,2022;Gao等人,2023;Mialon等人,2023a;Schick等人,2024)。我们训练Llama 3与以下工具进行交互:

1.搜索引擎:Llama 3经过训练,能够使用Brave Search7来回答关于近期事件的问题,这些问题可能超出了其知识范围,或者需要从网络上检索特定信息。
2.Python解释器:Llama 3能够生成并执行代码,以执行复杂计算、读取用户上传的文件,并基于这些文件完成任务,如问答、摘要、数据分析或可视化。
3.数学计算引擎:Llama 3可以利用Wolfram Alpha API8更准确地解决数学和科学问题,或从Wolfram数据库中检索准确信息。
生成的模型能够在聊天环境中使用这些工具解决用户的查询,包括多轮对话。如果查询需要多次调用工具,模型可以编写一个逐步计划,按顺序调用工具,并在每次工具调用后进行推理。
我们还提升了Llama 3的零样本工具使用能力——在给定上下文中的潜在未见工具定义和用户查询时,我们训练模型生成正确的工具调用。
实现方式我们将核心工具实现为具有不同方法的Python对象零样本工具可以作为带有描述、文档(即使用示例)的Python函数实现,模型仅需要函数的签名和文档字符串作为上下文来生成适当的调用。此外,我们还将函数定义和调用转换为JSON格式,例如用于Web API调用。所有工具调用均由Python解释器执行,该解释器必须在Llama 3的系统提示符中启用。核心工具可以在系统提示符中单独启用或禁用。
数据收集:与Schick等人(2024)的方法不同,我们依赖人工标注和偏好来训练Llama 3使用工具。与Llama 3中常用的后训练流程相比,存在两个主要差异
1)工具使用与对话标注:在工具使用中,对话往往包含多个助手消息(例如,调用工具并对工具输出进行推理)。因此,我们在消息级别进行标注,以收集更细致的反馈:标注者需在相同上下文中比较两个助手消息,选择其中一个作为偏好,或者如果两者都存在重大问题,则编辑其中一个消息。选定的或编辑后的消息随后被添加到上下文中,对话继续。这种方式既为助手调用工具的能力提供了人类反馈,也为对工具输出的推理能力提供了反馈。标注者无法对工具输出进行排序或编辑。
2)无拒绝采样:由于在我们的工具基准测试中未观察到收益,因此我们未采用拒绝采样。
为加快标注过程,我们首先通过在前一个Llama 3检查点上微调合成生成的数据,来引导基本的工具使用能力。这样,标注者需要进行的编辑工作就减少了。同样地,随着Llama 3在开发过程中的逐步改进,我们逐步使我们的人工标注协议复杂化:从单轮工具使用标注开始,逐步过渡到对话中的工具使用标注,最后进行多步骤工具使用和数据分析的标注。
工具数据集:为了创建工具使用应用的数据,我们采用以下流程:

1)单步工具使用:我们首先从少量示例生成合成用户提示,这些提示本质上需要调用我们的核心工具之一(例如,超出我们知识截止日期的问题)。接着,仍然依赖少量示例生成,我们为这些提示生成适当的工具调用,执行它们,并将输出添加到模型的上下文中。最后,我们再次提示模型,基于工具输出生成对用户查询的最终答案。我们得到的轨迹形式如下:系统提示、用户提示、工具调用、工具输出、最终答案。我们还筛选了大约30%的数据集,以移除无法执行的工具调用或其他格式问题。

2)多步工具使用:我们遵循类似的协议,并首先生成合成数据,以教授模型基本的多步工具使用能力。为此,我们首先提示Llama 3生成用户提示,这些提示需要至少两次工具调用,这些调用可以是来自我们核心集的相同或不同工具。然后,基于这些提示,我们使用少量示例提示Llama 3生成一个由交替的推理步骤和工具调用组成的解决方案,类似于ReAct(Yao等人,2022)。请参见图10,了解Llama 3执行涉及多步工具使用任务的示例。

3)文件上传:我们为以下文件类型进行标注:.txt、.docx、.pdf、.pptx、.xlsx、.csv、.tsv、.py、.json、.jsonl、.html、.xml。我们的提示基于提供的文件,要求总结文件内容、查找并修复错误、优化代码片段、进行数据分析或可视化。请参见图11,了解Llama 3执行涉及文件上传任务的示例。

在针对这些合成数据进行微调后,我们收集了在不同且具挑战性的场景下的人工标注,这些场景包括多轮交互、超过三步的工具使用,以及工具调用未能给出满意答案的实例。我们通过向合成数据中增加不同的系统提示来增强数据集,以教导模型仅在激活时才使用工具。为了训练模型避免对简单查询调用工具,我们还添加了来自简单数学或问答数据集(Berant等人,2013;Koncel-Kedziorski等人,2016;Joshi等人,2017;Amini等人,2019)的查询及其无需工具即可获得的响应,但在系统提示中仍激活工具。

零样本工具使用数据:我们通过在一个庞大且多样化的部分合成数据集(包含函数定义、用户查询及相应调用)上进行微调,提升了Llama 3的零样本工具使用能力(也称为函数调用)。我们在一组未见过的工具上评估了我们的模型。

1)单一、嵌套及并行函数调用:调用可以是简单的,也可以是嵌套的,即我们将一个函数调用作为另一个函数的参数传递;或者并行的,即模型返回一个独立函数调用的列表。生成一系列多样化的函数、查询和基准真值可能具有挑战性(Mekala等人,2024),因此我们借助挖掘Stack(Kocetkov等人,2022)的方法,将我们的合成用户查询与真实函数相关联。更具体地说,我们提取函数调用及其定义,进行清理和过滤(例如,针对缺少文档字符串或不可执行的函数),并使用Llama 3为函数调用生成对应的自然语言查询。

2)多轮函数调用:我们还为多轮对话中的函数调用生成了合成数据,遵循了与Li等人(2023b)提出的协议类似的方法。我们使用多个代理来生成领域、API、用户查询、API调用和响应,同时确保生成的数据覆盖多样化的领域和现实的API。所有代理都是Llama 3的不同变体,根据它们的角色以不同的方式被提示,并以逐步协作的方式工作。


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询