论文笔记:Efficient Training of Language Models to Fill in the Middle

导语

Decoder-only的模型只能从左向右看,无法利用双向信息完成填空等操作,本文是OpenAI最早提出使用Fill-in-the-model到Autoregressive形式的模型中的文章,启发了后面一些Text-to-Code的大模型,比如InCoder,SantaCoder、StarCoder等,作者通过实验证明,在预训练中加入一定比例的FIM形式,不仅有助于模型完成InFilling任务,还能保证原始的自左向右生成任务性能不受影响。

  • 链接:https://arxiv.org/abs/2207.14255
  • 机构:OpenAI

摘要

本文展示了一种有效的方法,使自回归语言模型能够学习填充文本中的空白部分。这一方法基于一个简单的数据集转换策略,即将文档中部的文本移至末尾。作者通过大量研究证明,这种转换对于原始的从左至右生成模型能力没有负面影响,这一点通过多种规模的困惑度和抽样评估得到了验证。鉴于训练模型以填补中间部分的有效性、简易性和高效性,作者建议未来的自回归(AR)语言模型应默认采用此种训练方法。文章还对数据转换频率、转换结构和选择填充跨度的方法等关键超参数进行了详细剖析,并提出了一套强有力的默认设置和最佳实践指南。作者在其API中发布了采用这些最佳实践训练的优秀填补模型,并提供了填补基准,以促进未来的相关研究。

image.png

1 引言

背景与动机

大型语言模型(LLMs)在处理多样化的互联网规模数据集方面取得了显著成就。这些模型能够基于自然语言提示生成连贯、合理的补全,并在多个基准测试中达到了最先进的水平,包括阅读理解、问答、逻辑推理和常识推理。Transformer基础上的语言模型主要分为几类:

  • 仅编码器模型(如BERT)、
  • 编码器-解码器模型(如T5)和
  • 基于因果解码器的语言模型(如GPT系列)。

尽管如GPT-3、Codex、LaMDA等因果解码器基模型在开放式文本生成中表现卓越,但所有类别的模型在填补(infilling)任务上均存在局限性,即在给定前缀和后缀的情况下生成特定位置的文本。

本文目标与方法

本文旨在通过增加填补中间(Fill-in-the-middle,FIM)能力来解决这一限制,特别聚焦于目前占LLM主导地位的因果解码器基语言模型。作者提出通过简单修改训练数据,而无需改变模型架构,使这些模型学会填补能力,并保持其原有的从左到右的生成能力。具体而言,对数据集的一部分应用转换,即将文档随机分为三部分:Prefix、Middle、Suffix,并将中间部分移至末尾,然后使用sentinel token连接这三部分。这种方法强调了训练FIM模型的计算效率,尤其是在训练大型语言模型时的重要性。

image.png

本文贡献
  1. FIM-for-free性质:作者通过培训一系列模型,并展示了在预训练中学习FIM不会损害从左到右的能力(如图1)。
  2. FIM预训练中的最佳实践:研究了与训练FIM模型相关的多个超参数的效果。
  3. 微调低效性:相较于从头开始训练FIM模型,通过微调现有语言模型学习FIM在计算上效率较低。
  4. 新的填补基准:为了评估模型的生成能力,作者引入了新的基准。
  5. 抽样评估的必要性:作者发现,在FIM训练中改变各种超参数通常会导致在基于抽样的基准测试中出现显著差异。

2 评估

使用自回归评估和FIM评估来分析模型的能力。

2.1 自回归(AR)评估

通过标准基准测试来评估模型的自回归能力,并证明FIM增强不影响学习曲线和性能。

2.2 填补(FIM)评估

为了评估FIM模型,作者在自动回归测试集的例子上应用了100%的FIM转换,以便比较FIM和AR测试损失(比较FIM模型的 P ( m i d d l e ∣ p r e fi x , s u f fi x ) P(middle∣prefix, suffix) P(middleprex,sufx)和AR模型的 P ( m i d d l e ∣ p r e fi x ) P(middle∣prefix) P(middleprex))。创建了一个只在中间段落标记上测量损失的掩蔽版本的测试集,用于研究FIM模型通过后缀条件来增加信息的能力。在生成填补能力方面,专注于代码生成,因为这涉及到自由形式生成,与自然语言基准测试中常见的单个或少数标记生成不同。使用代码的优势在于,即使是开放式生成中的长样本,也可以通过测试用例来评估样本的正确性。作者创建了包括单行和多行填补的新基准测试,以及一种称为随机跨度填补(如下图中需要预测高亮部分)的新基准,这些基准测试通过从HumanEval数据集的标准解决方案中移除中间段落来创建。

image.png

FIM可以通过两种不同的方式准备,分别称为PSM和SPM。为了简洁,本文只报告了SPM填补结果,除非在某些情况下使用PSM会改变结论。

3 FIM训练与推理

FIM的实现依赖于对数据集应用的随机转换。本文探讨了两种实现方式:文档级和上下文级,这两种方式的主要区别在于FIM转换发生在数据加载流程的哪个阶段。

在文档级FIM中,每个文档被分为三部分:前缀(Prefix)、中间(Middle)和后缀(Suffix)。这种分割发生在文档还是字符序列的阶段,并以相等的概率随机分割。然后,每个部分被单独编码,并在每个部分前加上sentinel token,最后以前缀、后缀和中间的顺序连接这些部分,形成FIM文档的标记版本。

image.png

在推理过程中,模型以编码的前缀和后缀作为输入,直到生成结束token(< EOT >),表明模型已经连接了前缀和后缀。如果模型未能在合理的推理预算内生成< EOT > token,通常表示模型在连接前缀和后缀时遇到困难,这通常意味着生成样本的质量较差。

image.png

3.1 SPM模式

作者还介绍了一种称为SPM的变体,其中前缀和后缀的顺序被交换。这种模式的主要动机是在推理过程中改进键值缓存。尽管SPM模式的思路简单,但在SPM和PSM联合训练时,sentinel token的放置稍有不同,可参见附录D。

image.png

3.2 上下文级FIM(Context-level FIM)

在语言模型的训练过程中,文档通常以一个边界标记(如 < EOT >,即文档结束标记)连接,并随后被分割(或“切块”)成模型的上下文长度。这种做法在处理长文档时可能导致一个问题:在切割过程中,整个前缀(prefix)或后缀(suffix)可能会被从上下文中切割掉,从而导致FIM数据变得碎片化。为了解决这个问题,Context-level FIM 的策略是在切割步骤之后应用FIM。但是在进行字符切割时,很有可能将一个完整的token切成两部分,会造成context的长度发生变化,为此作者也设计了一些策略解决,详见附录C。

image.png

4 预训练结果

4.1 FIM对左到右能力的影响

图1证明了FIM-for-free的特性,即FIM训练不会影响模型的左到右(left-to-right)生成能力。作者展示了在自然语言和代码领域用50% FIM增强训练的一系列模型,这些模型的参数从50M到6.9B不等。结果表明,即使FIM模型只有一半时间看到原始数据形式,同时学习新技能,左到右的测试损失也不受影响。

image.png

image.png

4.2 FIM比率的影响

作者还探讨了不同FIM率对模型性能的影响。研究发现,即使FIM率高达90%,也不会降低左到右能力,但100%的FIM率确实会导致普通自动回归(AR)测试损失的下降。同时,FIM比率对填充能力的影响更为显著。尽管FIM困惑度(perplexity)的提高不明显,但提高FIM率可以显著改善填充通过率。

4.3 SPM与PSM模式的比较

作者研究了构建FIM样例的两种方式(SPM和PSM)对性能的影响。结果表明,SPM模式通常比PSM模式更强。同时,作者也发现了PSM和SPM之间的正向转移。联合训练50% FIM的SPM+PSM模型在SPM模式下的表现与纯SPM FIM的90% FIM率相当。

image.png

4.4 上下文级与文档级FIM的比较

作者对上下文级和文档级FIM的实现方式进行了比较。结果显示,上下文级FIM在所有规模范围内都比文档级FIM有显著改善,尽管在困惑度评估中改进几乎可以忽略不计。

image.png

4.5 中间跨度选择的影响

作者还研究了FIM训练中中间跨度选择的重要性。实验表明,基于行的中间跨度训练在单行和多行填充基准测试中略有优势,但在随机跨度填充基准测试中几乎完全失败。相比之下,基于字符的随机跨度训练在处理随机跨度填充任务时表现更佳,同时在单行和多行填充中也保持良好表现。

5 微调结果

为了和FIM预训练进行比较,作者进行了FIM微调,目标是使AR模型经过微调后在FIM评估上达到与预训练时相同的性能水平。尽管预训练中可以无额外计算成本地学习FIM能力,但惊讶地发现,为了使微调模型达到与预训练基线模型相同的性能水平,需要相对于预训练消耗大量的计算资源。对一个未经FIM预训练的XL模型进行了100B token的微调,采用了不同的微调超参数设置。共训练了16个微调模型,通过这些多样化的超参数选择,旨在确保结论的稳健性,并更好地理解超参数对最终性能的影响。

结果显示,即使进行了大量额外的微调计算,AR模型在FIM上的性能也没有达到与预训练FIM模型相同的水平。唯一接近预训练基线的设置是在50B token、FIM率0.9以及学习率为预训练的1.0倍的情况下进行的微调。一般来说,更高的学习率、FIM率和更长的微调时间对提高微调中的FIM性能似乎有所帮助。

image.png

6 讨论

预训练与微调 主要发现是在预训练中可以免费学习FIM,而相比之下,微调中学习FIM可能相当昂贵。 预训练中FIM能力的免费获取主要归因于将文档分成三部分并将中间部分移至末尾,有效地创建了三个较小的文档。每个部分都需要从左到右预测下一个token,保持了自动回归处理token的总数不变。另一方面,FIM虽然在局部与自动回归数据相同,但在整个文档上施加了不同的全局注意力模式。这可能是微调中学习FIM需要较长时间和较高学习率的原因之一。

image.png

FIM任务的难度 尽管FIM不影响AR能力,但实际上FIM任务往往比普通的从左到右生成更困难。继续文本的任务通常比在给定特定后缀条件下继续文本更容易。后者需要规划一个合理的叙事来连接两部分,开始生成以匹配前缀,并在正确的时间停止生成以连接到后缀。FIM中的一个常见失败模式是无法在分配的token预算内生成 < EOT >,导致无法很好地连接到后缀的截断样本。

image.png

上下文级与文档级FIM,以及FIM率 第4.4节中提到,上下文级FIM通常优于文档级FIM。文档级FIM相比于上下文级FIM实际上导致了较低的有效FIM率。有效FIM率定义为FIM格式的示例比例,其中前缀、中间和后缀都出现在同一个上下文中。这种有效FIM率的降低可能是上下文级FIM在第4.4节中表现更强的主要原因。

7 相关工作

8 总结

本研究展示了基于因果解码器的语言模型可以通过在传统的从左到右数据和FIM转换数据上联合训练,学会在文档中间填充内容。一个重要发现是FIM-for-free特性,即FIM模型在保持与自动回归(AR)模型相同的测试损失的同时,实现了更低的FIM损失。然而,微调现有的AR模型以学习FIM能力需要相对于预训练大量的计算资源。

8.1 推荐的FIM超参数

  • 针对FIM模型的训练,建议在字符级应用FIM转换,并始终包括一些字符级随机跨度,以便模型在前缀和后缀结束在token中间时生成合理的完成。
  • 在实施方面,上下文级FIM优于文档级FIM,但如果需要更简单的实现,文档级FIM也是一个选项。
  • 观察到即使FIM率高达90%,也不会影响AR能力。实际中,50%至90%之间的任何值都是合理的选择。

8.2 未来研究方向

  • 更智能的跨度选择:考虑语义或句法意义上有意义的跨度可以显著提高填充性能。
  • 可控制的生成:应用如人类反馈的强化学习(RL)和指令遵循等方法,可以通过进一步与用户意图对齐来解决生成偏差内容或在分配的token预算内无法生成合理完成的问题。
  • FIM-for-free属性的进一步考察:尽管提供了大量证据,但不能完全排除在某些未考虑的基准测试中FIM模型表现不如AR模型的可能性。
  • 多插槽填充:许多先前的填充工作探讨了多个填充插槽,但这项研究没有涉及,因为单插槽模型的训练和推理就已经有许多考虑因素。
  • 提高自然语言FIM性能:FIM模型在代码领域的表现往往优于自然语言,提高自然语言中的填充性能是一个有趣的未来方向。
  • 双向性和注意力的作用:在自由形式填充性能中,注意力和训练目标的作用有待进一步研究。

最后,作者希望探索与原有语言模型能力无或很小成本地联合学习的其他有用技能。建议研究者在学习新能力时考虑原有能力的预算与新能力之间的权衡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/525871.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux下下载安装JDK配置Java环境变量

Linux下下载安装JDK配置Java环境变量 1. 下载JDK 下载链接&#xff1a;(https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) 2. 上传至服务器并解压 可通过shell工具进行上传&#xff0c;我这里是上传安装在/opt目录 解压jdk-17.0.10_linux-x64_b…

Nacos注册中心的部署及使用(超详细)

目录 1 前言 2 注册中心的原理 3 Linux上Nacos的部署 3.1 Mysql的部署 3.2 存储Nacos数据的数据库的建立 3.3 准备Nacos的环境文件 3.4 部署Nacos 3.5 检查是否成功 3.5.1 查看日志 3.5.2 访问Nacos 4 Java中的配置及食用方法 4.1 引入依赖坐标 4.2 配置Nacos 4…

苍穹外卖学习-----2024/03/09

1.菜品分页查询 代码在这里 分页查询菜品 2.删除菜品 [链接]param 1、概览 本文将带你了解 Spring 中 RequestParam 注解的用法。 简单地说&#xff0c;可以使用 RequestParam 从请求中提取查询参数、表单参数甚至是多个参数。 2、示例端点 假设我们有一个端点 /api/foos&a…

11. 搭建较通用的GoWeb开发脚手架

文章目录 导言一、加载配置二、初始化日志三、初始化MySQL连接四、初始化Redis连接五、初始化gin框架内置的校验器使用的翻译器六、注册路由七、 启动服务八、测试运行九&#xff1a;注意事项 代码地址&#xff1a;https://gitee.com/lymgoforIT/bluebell 导言 有了前述知识的…

Linux 之五:权限管理(文件权限和用户管理)

1. 文件权限 在Linux系统中&#xff0c;文件权限是一个非常基础且重要的安全机制。它决定了用户和用户组对文件或目录的访问控制级别。 每个文件或目录都有一个包含9个字符的权限模式&#xff0c;这些字符分为三组&#xff0c;每组三个字符&#xff0c;分别对应文件所有者的权限…

基于springboot+vue的食品安全管理系统(源码+论文)

目录 前言 一、功能设计 二、功能实现 1 首页 2 后台登录 3 食品信息添加页面 4 食品查询 三、库表设计 四、论文 前言 从事食品行业的商家可能会对于食品的储存以及食品的销售&#xff0c;都有着不同门道的想法&#xff0c;那么如何能将这些想法一一实现&#xff0c;…

【Linux】CentOS网络故障排查大揭秘: 实战攻略解读

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 检查网络连接状态&#xff1a; 检查网络配置&#xff1a; 重启网络服务&#xff1a; 检查防火墙设置&#xff1a; 查看日志文…

大模型笔记:幻觉 hallucination

1 介绍 “幻觉” (Hallucination)&#xff0c;指模型生成自然流畅&#xff0c;语法正确但实际上毫无意义且包含虚假信息即事实错误的文本&#xff0c;以假乱真&#xff0c;就像人产生的幻觉一样。 举个例子就是&#xff0c;即使现在的chatgpt-4&#xff0c;你问他一些有确切…

【Nestjs实操】环境变量和全局配置

一、环境变量 1、使用dotenv 安装pnpm add dotenv。 根目录下创建.env文件&#xff0c;内容如下&#xff1a; NODE_ENVdevelopment使用 import {config} from "dotenv"; const path require(path); config({path:path.join(__dirname,../.env)}); console.log(…

腾讯云轻量应用服务器流量用完了怎么办?

腾讯云轻量服务器流量用完了怎么办&#xff1f;超额流量另外支付流量费&#xff0c;流量价格为0.8元/GB&#xff0c;会自动扣你的腾讯云余额&#xff0c;如果你的腾讯云账号余额不足&#xff0c;那么你的轻量应用服务器会面临停机&#xff0c;停机后外网无法访问&#xff0c;继…

Elasticsearch从入门到精通-03基本语法学习

Elasticsearch从入门到精通-03基本语法学习 &#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是程序员行走的鱼 &#x1f4d6; 本篇主要介绍和大家一块学习一下ES基本语法,主要包括索引管理、文档管理、映射管理等内容 1.1 了解Restful ES对数据进行增、删、改、查是以…

SSD的原理

简介 SSD&#xff08;Solid State Drive&#xff09;是一种使用闪存存储芯片&#xff08;NAND Flash&#xff09;的存储设备。与传统的机械硬盘不同&#xff0c;SSD没有移动部件&#xff0c;因此具有更快的读写速度和更低的能耗。 架构 NAND Flash是一种非易失性存储器&…