FLAN:微调语言模型是 Zero-Shot 学习者

摘要

本文探讨了一种简单的方法来提升语言模型的零样本学习能力。我们展示了指令微调——即在通过指令描述的数据集集合上对语言模型进行微调——能够显著提升模型在未见任务上的零样本表现。

我们以一个拥有1370亿参数的预训练语言模型为基础,在60多个通过自然语言指令模板表达的NLP数据集上进行了指令微调。我们对该指令微调模型(命名为FLAN)在未见任务类型上的表现进行了评估。

结果显示,FLAN显著提升了原始模型的性能,并在我们评测的25个数据集中,有20个超过了零样本的1750亿参数GPT-3模型。FLAN甚至在ANLI、RTE、BoolQ、AI2-ARC、OpenbookQA和StoryCloze等任务上大幅超越了GPT-3的少样本表现。消融研究表明,微调数据集的数量、模型规模和自然语言指令是指令微调成功的关键因素。

在这里插入图片描述

1 引言

大规模语言模型(如 GPT-3 (Brown et al., 2020))在少样本学习方面表现非常出色。然而,它们在零样本学习上的表现则相对较差。例如,在阅读理解、问答和自然语言推理等任务中,GPT-3 的零样本表现远不如少样本表现。其中一个可能的原因是,缺少少样本示例时,模型更难在与预训练数据格式不相似的提示上取得良好表现。
本文探讨了一种简单的方法以提升大规模语言模型的零样本性能,从而使其适用范围更广。我们的直觉是,NLP 任务可以通过自然语言指令来描述,例如“这条电影评论的情感是正面还是负面?”或“将‘how are you’翻译成中文”。我们以一个拥有1370亿参数的预训练语言模型为基础,进行指令微调——即在60多个通过自然语言指令表达的NLP数据集混合上微调该模型。我们将此微调后的模型称为FLAN(Finetuned Language Net)。

为了评估FLAN在未见任务上的零样本表现,我们根据任务类型将NLP数据集分成若干簇,并在指令微调时保留其中一簇用于评测。例如,如图1所示,为了评估FLAN执行自然语言推理的能力,我们在常识推理、翻译、情感分析等其他NLP任务上对模型进行指令微调。这样,FLAN在指令微调阶段并未接触任何自然语言推理任务,我们随后评估其执行零样本自然语言推理的能力。

评测结果表明,FLAN显著提升了基础1370亿参数模型的零样本性能。FLAN的零样本表现甚至在我们评测的25个数据集中,有20个超过了1750亿参数GPT-3的零样本表现,并且在ANLI、RTE、BoolQ、AI2-ARC、OpenbookQA和StoryCloze等任务上大幅超越了GPT-3的少样本表现。消融实验发现,指令微调中任务簇数量的增加有助于提升未见任务的表现,而指令微调的效益仅在模型规模足够大时才会显现。
指令微调是一种简单的方法,如图2所示,它结合了预训练-微调范式和提示范式的优势,通过微调的监督提升语言模型对推理时文本交互的响应能力。我们的实验证明语言模型在纯指令驱动的任务上表现出良好的潜力。

用于FLAN指令微调数据集加载的源码已公开,地址为:https://github.com/google-research/flan

在这里插入图片描述

2 FLAN:指令微调提升零样本学习能力

指令微调的动机是提升语言模型对NLP指令的响应能力。其核心思想是通过监督训练,让语言模型学习执行通过指令描述的任务,从而使模型能够遵循指令,即使是面对未见过的任务也能有效完成。为了评估模型在未见任务上的表现,我们将数据集按照任务类型分成多个簇,并在指令微调时保留每个任务簇用于评测,同时在其余簇上进行微调。

2.1 任务与模板

由于从头创建包含众多任务的指令微调数据集需要大量资源,我们将研究界已有的数据集转换为指令格式。我们汇总了TensorFlow Datasets中公开的62个文本数据集,这些数据集涵盖语言理解和语言生成任务,整合成一个混合数据集。图3展示了这些数据集——每个数据集被归类到十二个任务簇中的一个,簇内的数据集均属于相同任务类型。各数据集的描述、规模和示例见附录G。

在这里插入图片描述

对于每个数据集,我们手工设计了十个独特的模板,这些模板使用自然语言指令来描述该数据集对应的任务。虽然大多数模板都是描述原始任务,但为了增加多样性,我们还为每个数据集包含了最多三个“反向任务”的模板(例如,对于情感分类任务,我们会加入要求生成电影评论的模板)。随后,我们对预训练语言模型在所有数据集的混合数据上进行指令微调,每个数据集中的示例通过随机选择的指令模板进行格式化。图4展示了一个自然语言推理数据集的多个指令模板示例。

在这里插入图片描述

2.2 评估划分

我们关注 FLAN 在未见过的任务上的表现,因此定义“未见任务”至关重要。与某些先前工作仅通过禁止训练时出现相同数据集来定义未见任务不同,我们采用更保守的定义,利用图3中的任务簇。在本工作中,仅当某个数据集 D 所属的所有任务簇都未在指令微调中出现时,我们才认为该数据集 D 在评估时是未见的。例如,如果 D 是一个蕴含任务,则在指令微调中不包含任何蕴含数据集,而是在所有其他任务簇上进行了指令微调。

因此,为了对 c 个任务簇进行零-shot FLAN 评估,我们会指令微调 c 个模型,每个模型保留一个不同的任务簇用于评估。

2.3 带选项的分类

某个任务的输出空间可能是多个类别之一(分类任务)或自由文本(生成任务)。由于 FLAN 是一个仅解码器的指令微调语言模型,它自然以自由文本形式响应,因此生成任务不需要额外修改。

对于分类任务,先前工作(Brown 等,2020)采用了排序分类方法,例如只考虑两个输出(“是”和“否”),选择概率较高的作为模型预测。虽然这种方法在逻辑上合理,但存在不足,因为答案的概率质量可能被表达答案的多种方式稀释(例如,“是”有很多不同表达方式,可能导致“是”的概率总和下降)。

因此,我们在分类任务末尾添加一个“OPTIONS”后缀,并附上该任务所有输出类别列表,让模型明确知道分类时的选择范围。图1中的自然语言推理和常识推理示例展示了这种选项的用法。

2.4 训练细节

模型结构与预训练
实验中我们使用 LaMDA-PT,这是一个1370亿参数的密集左到右解码器Transformer语言模型(Thoppilan 等,2022)。该模型在网络文档(含代码)、对话数据和维基百科上预训练,使用 SentencePiece(Kudo & Richardson,2018)进行分词,词汇表大小为32k,总计2.49万亿BPE标记。约10%的预训练数据是非英语。注意,LaMDA-PT 仅进行语言模型预训练(不同于针对对话微调的 LaMDA)。

指令微调过程
FLAN 是 LaMDA-PT 的指令微调版本。微调过程中,我们将所有数据集混合,并随机采样。为了平衡数据集大小差异,我们对每个数据集的训练示例数限制为3万,并采用按样本数比例混合(Raffel 等,2020)且混合率最大为3000。
我们对所有模型进行了3万步梯度更新,批量大小为8192个token,使用 Adafactor 优化器(Shazeer & Stern,2018),学习率为3e-5。微调时输入序列长度为1024,目标序列长度为256。我们使用 packing 技术(Raffel 等,2020),将多个训练样本拼接成一个序列,并用特殊的EOS标记分隔输入和目标。指令微调大约花费60小时,在128核的TPUv3上完成。所有评估均基于训练3万步的最终检查点。

3 结果

我们在自然语言推理、阅读理解、闭卷问答、翻译、常识推理、指代消解和结构化文本生成等任务上评估 FLAN。按照§2.2所述,我们通过任务簇划分未见任务,且对每个簇单独保留用于评估,指令微调时使用剩余簇(即每个评估簇对应一个不同的检查点)。
对于每个数据集,我们评估所有模板的性能均值,以反映基于典型自然语言指令的期望表现。有些数据集有开发集,可用于手动设计提示(Brown 等,2020),我们也报告使用开发集表现最佳模板在测试集上的结果。

作为对比,我们报告了未经指令微调的 LaMDA-PT 在同样提示下的零-shot 和 few-shot 结果(LaMDA-PT未经指令微调不适合自然语言指令任务)。该基线直接展示了指令微调的提升效果,结果显示指令微调显著提升了 LaMDA-PT 的表现。

我们还展示了 GPT-3 175B(Brown 等,2020)和 GLaM 64B/64E(Du 等,2021)在相关论文中报告的 zero-shot表现。使用最佳开发集模板,FLAN 的 zero-shot 性能在25个数据集中有20个优于 GPT-3 的 zero-shot,且在10个数据集上大幅超过 GPT-3 的 few-shot 性能。在可用的19个数据集上, zero-shot FLAN 在13个数据集上优于零-shot GLaM,在11个数据集上优于 one-shot GLaM。

总体上,指令微调在自然语言表达清晰的任务(如自然语言推理、问答、翻译、结构化文本生成)上效果显著,而在直接以语言建模形式呈现的任务(如常识推理和指代消解,即完成不完整句子或段落)上效果较弱,因为指令在这些任务中冗余。自然语言推理、阅读理解、闭卷问答和翻译任务的结果总结见图5,并在下文描述。

在这里插入图片描述

自然语言推理(NLI)。在五个NLI数据集上,模型需要判断在给定前提的情况下假设是否成立,FLAN以较大优势优于所有基线模型。正如Brown等人(2020)所指出的,GPT-3在NLI上表现不佳的一个可能原因是NLI示例不太可能自然出现在无监督训练集中,因此这些示例被尴尬地表述为句子的续写。对于FLAN,我们将NLI表述为更自然的问题“ 是否意味着 ?”,从而实现了更高的性能。

阅读理解。在阅读理解任务中,模型需要根据提供的段落回答问题,FLAN在MultiRC(Khashabi等,2018)和OBQA(Mihaylov等,2018)上优于基线。在BoolQ(Clark等,2019a)上,FLAN大幅超过了GPT-3,尽管LaMDA-PT在BoolQ上已经取得了较高的性能。

闭卷问答。闭卷问答要求模型在不访问包含答案的具体信息的情况下回答关于世界的问题,FLAN在所有四个数据集上均优于GPT-3。与GLaM相比,FLAN在ARC-e和ARC-c(Clark等,2018)上的表现更好,而在NQ(Lee等,2019;Kwiatkowski等,2019)和TQA(Joshi等,2017)上表现略低。

翻译。与GPT-3类似,LaMDA-PT的训练数据约90%为英文,包含一些未专门用于训练机器翻译的其他语言文本。我们还评估了FLAN在GPT-3论文中涉及的三个数据集上的机器翻译表现:WMT’14的法语-英语(Bojar等,2014),以及WMT’16的德语-英语和罗马尼亚语-英语(Bojar等,2016)。与GPT-3相比,FLAN在所有六项评测中均优于零样本GPT-3,但在大多数情况下低于少样本GPT-3。与GPT-3类似,FLAN在翻译成英语方面表现强劲,并且相较于监督翻译基线表现良好。然而,从英语翻译成其他语言的表现相对较弱,这也符合预期,因为FLAN使用的是英文sentencepiece tokenizer,并且大部分预训练数据为英文。

附加任务。尽管在上述任务类别中表现强劲,但指令调优的一大局限是它无法提升许多语言建模任务的性能(例如以句子补全形式构造的常识推理或指代消解任务)。在七个常识推理和指代消解任务(见附录表2)中,FLAN仅在其中三个任务上优于LaMDA-PT。该负面结果表明,当下游任务与原始语言建模预训练目标相同时(即指令大多冗余时),指令调优并无用处。最后,我们报告了情感分析、复述检测和结构到文本任务的结果,以及GPT-3结果不可用的其他数据集,详见附录表2和表1。总体而言,零样本FLAN优于零样本LaMDA-PT,并且可与少样本LaMDA-PT相媲美或更好。

温馨提示:
阅读全文请访问"AI深语解构" FLAN:微调语言模型是 Zero-Shot 学习者

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

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

相关文章

springboot中的事件发布和监听

事件定义 创建一个自定义事件类 UserLoginEvent,继承 ApplicationEvent,用于携带用户登录信息: import org.springframework.context.ApplicationEvent;public class UserLoginEvent extends ApplicationEvent { //关键点1:ext…

“开源双轨架构+40亿参数扩散Transformer——ComfyUI-OmniGen2本地部署教程:重塑多模态生成的效率边界!

一、简介 OmniGen2 是由北京智源研究院最新推出的一个强大、高效的开源多模态生成模型。与 OmniGen v1 不同,OmniGen2 具有两种不同的文本和图像模态解码路径,利用非共享参数和解耦的图像分词器。OmniGen2 在四个主要功能方面具有竞争力的性能&#xff…

Java的SpringAI+Deepseek大模型实战之会话记忆

文章目录 背景项目环境实现步骤第一步、定义会话存储方式方式一、定义记忆存储ChatMemory方式二、注入记忆存储ChatMemory 第二步、配置会话记忆方式一、老版本实现方式二、新版本实现 第三步、存储会话信息 异常处理1、InMemoryChatMemory 无法解析 背景 前两期【环境搭建】和…

RDS MySQL vs. Aurora MySQL:高需求工作负载的终极迁移指南

在 AWS 上,开发团队最常见且关键的决策之一就是选择合适的关系型数据库。通常,讨论会从 RDS for MySQL 这个可靠且熟悉的“老黄牛”开始。但很快,就会有人提到一个更强大、更云原生的选项:Aurora MySQL。 也许,就像最…

使用仓颉编程语言是一种怎样的体验?

2024年6月21日下午,华为终端BG软件部总裁龚体先生在华为开发者大会主题演讲《鸿蒙原生应用,全新出发!》中向全球开发者介绍了华为自研仓颉编程语言,并发布了HarmonyOS NEXT仓颉语言开发者预览版。这是华为首次公开仓颉编程语言。 …

Qt Creator自定义控件开发流程

Qt Creator自定义控件开发流程 在 Qt 5.9 Creator 中开发自定义控件的完整流程如下,分为设计、实现、集成和测试四个阶段: 1. 创建自定义控件类 (1) 新建类文件 右键项目 → 添加新文件 → C Class基类选择 QWidget 或现有控件(如 QPushBu…

翻译《The Old New Thing》- 如何创建一个与屏幕大小相同的窗口,而不会被当作全屏窗口处理?

How can I create a window the size of the screen without it being treated as a fullscreen window? - The Old New Thinghttps://devblogs.microsoft.com/oldnewthing/20250522-00/?p111211 问题描述 任务栏允许全屏窗口覆盖它。这样,当你在放映幻灯片或进行…

深分页末日救星:MySQL延迟关联原理与实战手册

MySQL 深分页(如 LIMIT 100000, 10)本质是 高代价的偏移量扫描,可通过以下方案优化,附核心原理和实操示例: 一、深分页为什么慢? SELECT * FROM orders ORDER BY id DESC LIMIT 100000, 10; 执行过程&…

前端技术栈 —— HTML、CSS和JavaScirpt执行环境

以下内容由GLM回答生成,不保证正确性。 前端技术栈 —— HTML、CSS和JavaScirpt执行环境 JavaScript 的执行环境HTML 和 CSS 的执行环境HTML 和 CSS 是否可以在其他环境中执行?总结 JavaScript 是一种 解释型语言,但它也可以被编译。JavaScr…

多项式带余除法——线性代数题目为例

一、多项式带余除法的定义 二、例题 使用方法将在例题中展示:

学习日记-spring-day40-7.3

知识点: 1.自动装配Resource(3) 知识点 核心内容 重点 Autowired与Resource注入规则 默认注入逻辑:未指定参数时,Resource优先按属性名匹配(by name),失败后按类型匹配&#xf…

重新认识JNIEnv

引言 抛开一堆概念,我们从本质出发。 java 调用c 我们开发移动端或者后端服务 ,都是用的java 或者kotlin 语言。有时候我们需要用c的一些库(ocr识别/导航的算法/ 等) 因为一些跟硬件相关的接口或者系统的api 都是c写的。 C调用J…

人工智能训练师——智能语音识别ASR

人机对话——ASR 概念 ASR(Automatic Speech Recognition,自动语音识别)是一种将人类语音转换为文本的技术。它使得计算机能够“听”懂人类的语音指令或对话,并将其转换成可读、可编辑的文本形式。ASR技术是人机交互领域中的一个…

Compose 常用命令详解——AI教你学Docker

3.3 Compose 常用命令详解 Docker Compose 通过一系列命令高效管理多容器应用。理解这些命令,可以让你灵活地启动、停止、查看、调试、扩缩容和配置 Compose 项目。 一、核心命令详解 1. docker compose up 功能:启动并构建所有服务,生成网…

Mausezahn - 网络流量生成与测试工具(支持从链路层到应用层的协议模拟)

Mausezahn 是一个 网络流量生成与测试工具,主要用于模拟各种网络协议行为、测试网络设备性能、验证安全策略或进行故障排查。它支持从底层链路层(如 Ethernet、VLAN)到高层应用层(如 HTTP、DNS)的协议模拟,…

08-three.js Textures

Three.js Journey — Learn WebGL with Three.jsThe ultimate Three.js course whether you are a beginner or a more advanced developerhttps://threejs-journey.com/?c=p3 使用原生 JavaScript 首先是静态页面的放置位置,如果使用Vite模版配置,可以直接放在 /static/ …

git 仓库取消合并的分支

要取消 Git 仓库中某次特定的分支合并(例如第一次合并),同时保留其他分支的合并,需要通过 Git 的版本控制功能来操作。以下是具体的步骤和方法,假设你想撤销某次合并(例如某个提交),并确保其他合并不受影响: 背景假设 你有一个 Git 仓库,主分支(例如 main)上已经合…

【从历史数据分析英特尔该如何摆脱困境】

与大多数其他分析师不同,自2013年以来,笔者就一直在积极强调英特尔未来将遭遇冰山,最终我们预测英特尔将在试图执行其之前的战略时破产。尽管我们更愿意采用与英特尔不同的代工厂方法(即与台积电成立合资企业)&#xf…

【PyTorch】PyTorch中张量(Tensor)微分操作

PyTorch深度学习总结 第六章 PyTorch中张量(Tensor)微分操作 文章目录 PyTorch深度学习总结前言一、torch.autograd模块二、主要功能和使用方法1. 张量的 requires_grad 属性2. backward() 方法3. torch.no_grad() 上下文管理器三、函数总结前言 上文介绍了PyTorch中张量(Ten…

Rust 项目实战:Flappy Bird 游戏

Rust 项目实战:Flappy Bird 游戏 Rust 项目实战:Flappy Bird 游戏理解 Game loop开发库:bracket-libbracket-terminalCodepage 437导入 bracket-lib 创建游戏游戏的模式添加玩家添加障碍最终效果项目源码 Rust 项目实战:Flappy Bi…