Instruction Tuning:无/少样本学习新范式

news2024/11/17 6:45:39

format,png

作者 | 太子长琴 

整理 | NewBeeNLP

大家好,这里是NewBeeNLP。

今天分享一种简单的方法来提升语言模型的 Zero-Shot 能力——指示(或指令)微调(instruction tuning) ,在一组通过指示描述的数据集上对语言模型微调,大大提高了在未见过任务上的 Zero-Shot 能力。

模型 137B,在超过 60 个使用描述模板描述的数据集上微调。FLAN 在 20/25 个任务上超过了 175B 的 GPT3,Few-Shot 能力也大部分超过了 GPT3。消融实结果发现,微调的数据集数量、模型规模、指示,这三个因素是指示微调的关键。

eb5801228d71d71d42034dcb33400835.png
  • Paper:Finetuned Language Models Are Zero-Shot Learners

  • Code:https://github.com/google-research/flan

背景

PLM 在 Few-Shot 上表现一般都很好,但是在 Zero-Shot 上就很一般了,一个潜在的原因是模型很难执行和预训练不一样格式的 prompt。FLAN(Fine-tuned Language Net)却通过「指示微调」实现了不错的效果,如下图所示:

fa4be2e46c380cb7d940429968479bd4.jpeg

它具体是怎么做的呢,如下图所示:

5cba2ed44ad2ba4d863aedc92404c962.jpeg

FLAN 在一组短语为指示的混合任务上微调预训练模型,比如上面的:Translate this sentence to Spanish。在推理时,对没见过的任务(上面的 NLI)使用 FLAN 进行实验。

那么「指示微调」和 T5/BERT 的微调,以及 Prompt 微调有啥区别呢,如下图所示:

86d13ae2386712174fe04487736ce25a.jpeg

A 我们很熟悉,预训练模型最开始就是这么用的,当然现在很多时候也是这么用的。B 是需要语言模型给个 prompt 提示的。C 是 FLAN 的做法,主要是通过对多种任务的糅合学习 Zero-Shot 能力。

这里的「指示」和 GPT3 或 T5 的 Prompt 又有啥区别呢,我们看看下面这个例子:

T5 prompt: 
cb hypothesis: At my age you will probably have learnt one lesson. 
premise: It’s not certain how many lessons you’ll learn by your thirties. 

GPT-3 prompt: 
At my age you will probably have learnt one lesson. 
question: It’s not certain how many lessons you’ll learn by your thirties. true, false, or neither? 
answer: 

FLAN prompt: 
Premise: At my age you will probably have learnt one lesson. 
Hypothesis: It’s not certain how many lessons you’ll learn by your thirties. 
Does the premise entail the hypothesis?

T5 的 prompt 更像是数据集的一个 Tag(上面的 cb hypothesis 和 premise),在 Zero-Shot 下由于是没见过的任务,所以模型并没有学到这种模式。

GPT3 的 prompt 看起来好像数据好像被训练过,模型来完成剩下的部分,这其实是 In-Context Learning。

FLAN 的 prompt 看起来好像是让模型去执行某个任务,它被形式化为对「指示」做出回应,所以如果不微调没法工作。这也算是对 MTL 无法 Zero-Shot 的一种增强补充。

FLAN

指示微调的初衷是提升语言模型对自然语言指示的响应能力。这个 idea 是使用监督信号来教语言模型执行通过指示描述的任务,语言模型学会通遵循指示后,即使对看不见的任务也可以响应。

任务和模板

FLAN 使用的任务和数据集如下:

56440aa680ddf7c2113329a66cc059ee.jpeg

一共 62 个数据集,分成 12 个任务集。人工搞了 10 个模板,使用自然语言指示来描述数据集的任务。10 个模板大部分都描述了原始任务,但为了增加多样性,对每个数据集还包括最多三个「扭转任务」的模板(比如情感分类,包括要求生成电影评论的模板)。

下面是用于 NLI 数据集的多指示模板的例子:

496010205dd24c8122cac7601157f239.jpeg

评估划分

这里采用了保守的做法,在 Figure3 中,数据集不属于同一个任务集的才算未见过。

分类任务

因为是生成结果,所以对分类任务要额外处理一下。有用 rank classification 方法(就是看哪个选项生成的概率高)的,但问题是有时候对某个选项的表达可能不止一种,导致实际选项的那个值概率很低。比如选项是「是/否」,但表达「是」的方式可能是「好/可以/没问题」等等。

FLAN 使用了 OPTION 后缀,将 OPTION 和输出的标签依次排在后面,让模型在响应分类任务时知道需要哪些选项。具体可以看本文第二张图中右边部分的例子。

训练细节

模型架构:

  • 采用 LaMDA-PT,只有 decoder 的 transformer 模型,137B 参数。

指示微调:

  • 为了平衡不同数据集大小,每个数据集样本数量限制在 30k,并使用 examples-proportional 混合方案,混合比例最高 3000,这里的 3000 意思是对超过 3000 个的样本,数据集不会收到额外的采样权重。

  • 微调 30k 步

  • BatchSize=8192 Tokens

  • Adafactor Optimizer

  • LR=3e-5

  • 输入和输出长度为 1024 和 256。

  • 使用 packing 将多个样本拼接成一个 sequence,输入和目标之间使用 EOS 分开。

实验

实验结果如下:

cb67535b358d5ab342a484f0038c773d.jpeg

越往右分数越高。虽然在上面的任务集上效果还可以,但有个局限是对很多语言模型任务没有提升,如常识推理、以句子完成形式表示的共指解决任务。这说明,当下游任务与原始语言建模预训练目标相同时(即指示大部分时候是冗余的),指示微调是没用的。

消融

数据集和任务的数量

385836f7102678277e30f4b2de108796.jpeg

这里需要注意的是,这种消融无法得出哪个集群贡献最大。

模型规模

0e041ecaa1653322b80e9cb5752e07ea.jpeg

这个结果有意思了,在小模型(其实也不算小了)上居然还不如不微调。一个可能的解释是,对于小规模模型,微调期间使用的大约 40 个任务会填充整个模型的容量,导致这些模型在新任务上表现更差。相反,在大模型上,也会填充模型,但也教会模型如何遵循指示。

指示

58d8d00f4ccc6f66825e86e0f7d6186f.jpeg

使用指示训练是 Zero-Shot 能力的关键。另一方面也看到,简单地使用数据集名也具有一定指示作用,其实这也算是一种 prompt 了。

Few-Shot 作为指示

就是从训练集中选择 16 个样本和 Zero-Shot 的样本拼在一起,结果如下:

d8c4f88a82764e1f75cd6fe21aab3476.jpeg

结果都提升了效果,尤其是在大/复杂输出空间的任务上,如 struct to text,翻译,closed-book QA 等,可能是这些样本帮助模型更好地理解输出格式。另外,Few-Shot 不同模板间标准差比较低(柱图上那个短短的竖线),表明对 prompt 的敏感性较低。

小结

本文探索了一个简单的方法来提升语言模型基于指示的 Zero-Shot 能力,FLAN 与 GPT3 相比具有优势,并表明大规模语言模型可以遵循指令的潜在能力。

一起交流

想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定o要备注信息才能通过)

format,png

9c8de3359314ac6d67724683f221b2eb.gif

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

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

相关文章

Nodejs和JavaScript的区别

ECMAScript 定义了语法,写javascript和nodejs都必须要遵守变量定义,循环、判断、函数原型和原型链、作用域和闭包、异步 可以看阮一峰老师写的ECMAScript 6 入门 即: 不能操作DOM,不能监听click事件,不能发送ajax请求不能处理…

Java LockSupport学习

面试题: 1、LockSupport为什么可以先唤醒线程后阻塞线程? 因为unpark()获得了一个凭证,之后再调用park()方法,就可以名正言顺的消费凭证,故不会阻塞。 2、LockSupport为什么唤醒两次后阻塞两次,但最终结果还会阻塞线程? 因为凭证…

Android 实现沉浸式全屏

前言 本文总结 Android 实现沉浸式全屏的实现方式。 实现沉浸式全屏 在一些需要全屏显示的场景下,比如玩游戏、看横屏视频的时候,内容全屏,占满窗口的体验会让用户更加沉浸到对内容的消费中,带来好的用户体验。 沉浸式显示具体来说就是如状态栏和导航栏部分的显示效果调…

C#:Krypton控件使用方法详解(第五讲) ——kryptonPanel

今天介绍的Krypton控件中的kryptonPanel,下面开始介绍这个控件的属性:首先要介绍的是这个控件的外观属性:Cursor属性:表示鼠标移动过这个控件的时候,鼠标的显示状态。具体属性值有哪些,如下图所示&#xff…

第一批因ChatGPT坐牢的人,已经上路了

大家好,我是 Jack。 ChatGPT 的火爆有目共睹,有人靠着它赚了第一桶金,也有人靠着它即将吃上第一顿牢饭。 任何一件东西的火爆,总会给一些聪明人带来机会。 艾尔登法环火的时候,一堆淘宝卖魂的;羊了个羊火…

动漫人物眼睛画法

本期的动漫绘画课程教大家来学习动漫人物眼睛画法,结合板绘软件从草稿开始一步步教你画出动漫人物眼睛,不用报动漫培训班也能学会,快来跟着本期的动漫人物眼睛画法教程试试吧! 动漫人物眼睛画法步骤教程: 注意&#x…

Linux内核实现完全公平调度算法

Linux 进程调度算法经历了以下几个版本的发展: 基于时间片轮询调度算法。(2.6之前的版本)O(1) 调度算法。(2.6.23之前的版本)完全公平调度算法。(2.6.23以及之后的版本) 完全公平调度算法基本原理 完全公平调度算法 体现在对待每个进程都是公平的,那么…

ChatGPT AI 人工智能 开发路径

ChatGPT(全名:Chat Generative Pre-trained Transformer),美国OpenAI研发的聊天机器人程序,于2022年11月30日发布。 推荐以下几个AI 开发学习资源 一、GPTZero AI: GPTZero GPTZero 是普林斯顿大学学生 Edward Tian …

Java爬虫—WebMagic

一,WebMagic介绍WebMagic企业开发,比HttpClient和JSoup更方便一),WebMagic架构介绍WebMagic有DownLoad,PageProcessor,Schedule,Pipeline四大组件,并有Spider将他们组织起来&#xf…

MySQL中JSON数据类型详解

目录 概要及优点 JSON定义 JSON字段的增删改查操作 插入操作 查询操作 修改操作 删除操作 如何对JSON字段创建索引? 加索引查询结果分析: 不加索引查询结果分析: 使用JSON时的注意事项 概要及优点 JSON数据类型是MySQL5.7.8开始支持的…

FlowChartX/Diagramming for ActiveX 4.9.8 Crack

构建完美的图表 如果您的应用程序以 ActiveX 平台为目标,并且您需要实现图表功能,那么您所需要的只是 FlowChartX。它提供了创建、自定义和呈现流程图的所有功能。 ActiveX 图表库:分类图表 图 Diagramming for ActiveX该组件为您提供了一组…

浅谈C++函数重载

C相较于C语言来说,重载是一重大特性,让我们一起简单的回顾一下重载那些事 传送门函数重载是什么为什么有函数重载函数重载是如何实现的总结函数重载是什么 函数重载:是函数的一种特殊情况,C允许在同一作用域中声明几个功能相似的同名函数 这些同名函数的形参列表(参数个数or类…

day19_抽象类丶接口

由来 当我们声明一个几何图形类:圆、矩形、三角形类等,发现这些类都有共同特征:求面积、求周长、获取图形详细信息。那么这些共同特征应该抽取到一个公共父类中。但是这些方法在父类中又无法给出具体的实现,而是应该交给子类各自…

当遇到国外客户的问题,你解决不了的时候怎么办

对我来说,今年的这个春节假期有点长,差不多休了一个月。复工之后,截止目前做到了60万RMB的业绩,但是相较于往年,整体状态还是差了些。往年的春节,我都是随时待命的状态,整个春节天天坐于电脑前&…

JSP 和 JSTL

文章目录🍓摘要🍓一、JSP🍉1.1 JSP的基础语法🍫1.1.1 简介🍫1.1.2 依赖🍫1.1.3 注释🍫1.1.4 Scriptlet 脚本🍉1.2 JSP的指令标签🍫1.2.1 include 静态包含🍫1…

2023年数学建模美赛A题(A drought stricken plant communities)分析与编程

2023年数学建模美赛A题(A drought stricken plant communities)分析与编程 2023年数学建模美赛D题(Prioritizing the UN Sustainability Goals)分析与编程 特别提示: 1 本文介绍2023年美赛题目,进行深入分析…

台式计算机加固态硬盘,台式机添加固态硬盘教程_台式主机固态硬盘怎么安装-win7之家...

固态硬盘是用固态电子存储芯片阵列制成的硬盘,也是电脑中比较常见的内存硬件,有些用户在使用电脑时候,由于内存不足导致系统运行较卡的情况,往往会选择添加固态硬盘来解决,那么台式主机固态硬盘怎么安装呢?…

Ansible中的角色使用(ansible roles)

文章目录一、ansible 角色简介二、roles目录结构三、role存放的路径:配置文件ansible.cfg中定义四、创建目录结构五、playbook中使用rolesplaybook变量会覆盖roles中的定义变量六、控制任务执行顺序七、ansible—galaxy命令工具八、安装选择的角色1.从网上下载&…

2023.2.17-博客记录

1.斐波那契数列的复杂度 参考于:斐波那契数列时间复杂度 运用到了递归思想 那么,推导:时间复杂度 f(n) f(n-1) f(n-2) 每一层都包含一个加法操作 例如n 8时,T(n) 2^0 2^1 2^2 2^3 2^4 2^5 2^6 2^7-1 O(n) 2^7-1 2…

四六级真题长难句分析与应用

一、基本结构的长难句 基本结构的长难句主要考点:断开和简化 什么是长难句? 其实就是多件事连在了一块,这时候句子就变长、变难了 分析步骤: 第一件事就是要把长难句给断开,把多件事断开成一件一件的事情&#xff0…