“预训练+大规模多任务学习”像是一个开源工具,拉近了和应用领域的距离:我们可以开箱即用,如果效果不好,也许可以进一步few-shot后提升。重要的是:这种范式(也许)降低了对标注数据的依赖。
过去一年,NLP领域逐渐盛行一种新的“第四范式”——预训练+提示+预测(Pre-train, Prompt, Predict)。来自CMU的刘鹏飞博士,将这一流行范式归纳为:预训练语言模型加持下的Prompt Learning[1]。
(也许)我们正从“Pre-train+Finetune”的Finetune范式逐步迈向“Pre-train+Prompt”的Prompt范式(Prompt时代)。
Prompt时代带给我们最为深刻的一个理念就是:如何更好地使用预训练语言模型。而Prompt的本质就是将不同任务进行重构,更好地适配预训练模型。
笔者注:“更好地适配预训练模型”指不用设计新的网络层,而是完全利用预训练语言模型的网络结构。
因此,基于上述理念,Prompt时代带给NLP最大的增益之一就是:提升了小样本(few-shot)学习能力。
然而,Prompt不是万能的,不同的Prompt会导致模型性能的千差万别,同时绝大数的研究工作更聚焦于具体的几个NLP任务数据集,Prompt learning与特定任务和特定模型有关,没有在更广泛数据集上进行few-shot甚至zero-shot评测,没有构建更统一的建模方式。
基于此,笔者认为:“Pre-train+Prompt”这种范式与预训练模型之间仍然存在一个“gap”,即:冷启的预训练模型没有包含prompt形式的多任务监督目标,这导致了下游进行的Prompt Learning与预训练模型间的不一致。而这种不一致性,会导致:
· Prompt范式无法更好进行(或直接进行)zero-shot测试;
· Prompt范式无法更好统一建模更大规模的NLP任务,并进一步提升few-shot性能;
为解决上述问题,笔者就介绍一种“统一范式”——预训练+大规模多任务学习(Pre-train+Massive Multi-tasking)。
笔者注:所谓“统一范式”是因为「预训练+大规模多任务学习」统一模型框架、统一任务形式、统一应用方式。
与此同时,谷歌研究科学家Sebastian Ruder在最新博客《ML and NLP Research Highlights of 2021》中就将“大规模多任务学习”列为2021排名第二的研究热点。
本文的组织结构为:
一、定义:
什么是“预训练+大规模多任务学习”
「预训练+大规模多任务学习」并不是新的、所谓“第五范式”,而是Fintune范式+Prompt范式的综合体。
如上图所示,「预训练+大规模多任务学习」主要包括3个过程:
1. 利用Prompt统一(重构)不同NLP的任务形式(不同任务转化为统一的text-to-text数据形式),不同prompt可以代表不同的任务,形成“适配预训练模型”的多任务数据集;
2. 基于多任务数据对预训练进行fine-tune(中间任务训练);
3. 在具体下游任务上,对目标任务形成拿来即用的模型,可直接进行zero-shot测试,也可进一步提升few-shot性能。
与上述的finetune范式和Prompt范式相比,大规模多任务学习也有一些不同之处:
· 与传统的多任务finetune相比:
· 大规模多任务学习不需要设置特定任务的损失函数,这得益于text-to-text的建模方式:每个NLP任务只需要以合适的text-to-text形式输入,模型就可以从中学习,无需对底层模型进行任何改动;
· 传统多任务学习设置的一个常见问题是负迁移,即如何确保不同的任务不会相互伤害。但当使用更多任务时,大规模多任务学习总体收益更大:在小样本场景下“负迁移”也许不是大问题~
· 与Prompt范式相关工作的不同在于:
· 大规模多任务学习中的Prompt主要为离散形式,方便可以显示地构建任务指令。相比于连续embedding的Prompt,人工构建的离散形式方便理解、修改、优化,并且与特定模型无关。
· 大规模多任务学习中主要基于生成式预训练模型,方便不同多任务形式的统一建模。MLM的预训练模型不容易对不同任务进行统一建模。
二、划重点:”预训练+大规模多任务学习“是NLP大一统建模范式
看到这里,我们会发现:「预训练+大规模多任务学习」真正做到了NLP的大一统建模:
· 统一模型框架:即采用Text-to-Text的生成式预训练模型进行统一建模。必须感谢:生成式预训练模型的日益强大,让Seq2Seq可以“有效建模”所有NLP任务从理论逐步变为现实。
· 统一任务形式:Prompt统一(重构)了不同的NLP任务间的差异,转化为统一的text-to-text数据形式。
· 统一应用方式:对目标任务形成拿来即用的模型,下游应用时(理论上)都可转化为统一的prompt自适应方式,进行zero-shot/few-shot测试。
三、综合梳理:大规模多任务学习的主要进展
多任务学习(MTL)是神经网络训练的一个基础通用方法,可参考最早的介绍[2]以及近期的相关综述[3][4]。
多任务学习的研究已经表明:多任务模型学习的表示可以更好地推广到新的表示,然而多任务学习中的一个常见问题就是最小化负迁移,即如何确保不同的任务不会相互伤害。而这个问题通常表现在full-shot场景的微调中。
而近期的大量论文表明:多任务学习不仅有助于预训练模型,而且当使用更多任务时,零样本和小样本场景收益更大。多任务数量的上升到一定规模,自然而然就有了“大规模多任务学习”。
这里需要重点指出:不同于full-shot场景,大规模多任务学习在zero/few-shot场景下,那所谓的“负迁移”问题也许不是很重要。
在正式介绍相关工作前,笔者先列出一个表格,方便大家回顾:
四、缘起:Muppet
大规模多任务学习(Massive Multi-task)一词首次出现在Facebook的《Muppet: Massive Multi-task Representations with Pre-Finetuning》[5]工作中。
Muppet共采用了50个数据集、480万标注数据,表明大规模多任务学习可以显著提升性能(基于RoBERTa进行分类任务、BART进行生成任务),同时也发现当数据集少于15个时,多任务学习反而会损害性能。
五、发展:FLAN、T0
来自Google的FLAN模型[6]和HuggingFace的T0模型[7],是两个同时期的工作,均受到了GPT-3的启发,即:给定指令(instruction)和少量示例进行in-context learning。
FLAN模型属于Instruction Tuning(如上图),即:将包含prompt的数据集进行多任务学习,在下游未见任务进行Zero-Shot性能测试。
刘鹏飞博士在综述论文[8]中定义了Prompt的两种主要形式:
· 完形填空(Cloze)prompt;
· 前缀 (Prefix) prompt;
而Instruction Tuning中的Prompt形式更像是一种更明显的指令/指示(可以归为第三种Prompt形式),如下图所示。
同样,HuggingFace的T0模型(如上图)也继承了Instruction Tuning思想,一共收集了171个多任务数据集,总共创建了1939个prompt;与FLAN模型相比,Zero-Shot性能在各数据集上均有提升或可比,而模型参数减少10倍(而FLAN模型为137B)。
此外,FLAN模型随着prompt个数的增加反而会降低性能,而T0模型不会。这说明T0模型的prompt更加多样化,从而使模型更加鲁棒、泛化能力更强。
不难发现,对于FLAN模型和T0模型来说,Instruction Tuning的1个显著特点是:Prompt统一了多任务形式,即基于生成式预训练模型、将不同任务的数据统一为text-to-text形式。
六、突破:ZeroPrompt,首个中文多任务prompt统一模型
继FLAN和T0之后,ZeroPrompt[9]实现了大规模多任务学习在中文领域“零的突破”。
ZeroPrompt来自于XLNet作者杨植麟团队,共收集了1000个中文任务数据,整个测试任务上平均只相差4.7个点,而在部分测试任务上zeroshot性能比有监督finetune还要好。
如上图所示:不同传统的预训练-微调范式,ZeroPrompt的整体流程主要包括:
1. 构建多任务Prompt统一模型,主要包括:
i. 构建多任务数据集;
ii. 设计Prompt;
iii. 基于预训练LM模型多任务预训练(采取T5作为初始化的LM);
2. 评估未见任务的zeroshot性能,主要工作是:基于【Prompt遗传搜索算法】,针对未见的新任务构建自适应的Prompt。
对于Prompt设计,这里给出一个中文NER的例子:
此外,ZeroPrompt一个重要不同在于:进行了“zero-shot adaptation with fewshot validation”设置,也就是为了验证Prompt的效果进而构建开发集(防止不同的Prompt通常会导致zero-shot性能差异较大)
ZeroPrompt虽然数据规模庞大,但也证明一点:任务数据规模的拓展是模型缩放的一种有效替代手段。正如下图所示:随着多任务训练任务的增加,不同大小模型之间的Zero-shot性能趋近一致。
七、改变:MetaICL,舍弃Prompt
与之前工作不同,来自Facebook的MetalCL: Learning to learn in context[10]舍弃了Prompt。
MetaICL认为FLAN和T0严重依赖Prompt的模板设计,Prompt设计需要人工定制,而不同的Prompt会表现出高方差、不够稳定。
基于此,MetaICL构建了一种元学习(Meta-training)方式:只需提供训练示例和目标输入,不需要再提供prompt形式的指令。论文为这种元学习方式构建了142个NLP多任务数据集进行训练,提升模型少样本学习能力。
MetaICL虽然没有通过prompt对不同任务进行统一重构,但通过提供“训练示例”可以重构任务信息,从而省去人工设计模板的繁重工作。
上图给出了MetaICL整体流程,归纳如下:
· 训练过程:进行K-shot Learning。输入是:随机抽取出某一类任务中k个样本x和y,和第k+1个样本的x。输出是:第k+1个样本的y。不难发现:前k个样本提供了对于任务的描述信息。
· 推断过程:选择k个样本x和y进行拼接作为任务提示信息,直接对测试样本x进行预测。
此外,这篇论文也证实:加入prompt人工撰写的任务指令描述后,MetaICL效果有着进一步的提升。
不过对于MetaICL这种方式,笔者认为存在两点疑问:
1.选择哪些(k个)样本作为任务提示的示例,是不是也变成了某种意义上的“prompt选择问题”?最终效果是否方差较大?
2. 某些任务k个样本拼接后,输入文本长度过长,性能和效果如何保证?
八、融合:ExT5,将多任务融合到预训练中
ExT5[11]是Google最近ICLR2022的一篇工作,ExT5将上述的多任务训练过程前置到预训练中,共构建了107个NLP多任务数据集(论文将这个庞大集合称之为EXMIX)。
ExT5就是一个在有监督的EXMIX数据和自监督C4数据上进行预训练的T5模型,如上图所示。ExT5发现:在预训练期间使用多个任务比在微调期间更好,并且多任务预训练与 MLM 相结合比仅使用 MLM 的样本效率要高得多,如下图:
九、聚焦:UnifiedSKG,统一结构化数据任务
上述介绍的工作不区分特定任务,而最近18家机构共同打造的UnifiedSKG[12]则是将大规模对任务学习聚焦于结构化数据任务上,刷新了其中21个任务中的16个SOTA。
如上图所示,UnifiedSKG以text-to-text形式统一所有SKG任务,输入由三部分组成:
1. 用户查询;
2. 结构化知识线性化;
3. context原文。
此外,论文也进行了四种训练方式的对比:
1. ST-F:单任务微调;
2. ST-P:单任务prefix-tuning;
3. MT-F:多任务微调;
4. MT-P:多任务prefix-tuning
full-shot的相关实验表明:多任务prefix-tuning相比单任务微调平均提升1.3个点;而多任务微调不如多任务prefix-tuning(也许不同的任务领域不同,很难共享参数),甚至还差于单任务微调:这一点也表明在full-shot场景下,多任务不一定持续增加。
十、总结与展望
本文主要介绍了一种NLP建模的“统一范式”:预训练+大规模多任务学习(Pre-train+Massive Multi-tasking),做到了NLP的大一统建模:
· 统一模型:Text-to-Text的生成式预训练模型;
· 统一任务:Prompt统一(重构)了不同的NLP任务间的差异,不同prompt可以代表不同的任务。
· 统一应用:拿来即用,prompt自适应后直接进行zero/few-shot测试。
需要再次强调:“预训练+大规模多任务学习”这一范式,在应用层面,更像是一个“开源工具”,可以在更广泛的任务上直接使用。而这些:得益于zero/few-shot性能的大幅提升。
当然,对于这一范式,仍然有不少TODO:
1、如何获取更多的多任务数据集?
当前的多任务数据集规模仍然受限,需要更大规模多任务数据的构建。但由于prompt统一了任务形式,或许我们可以构建一个良性循环系统:
· 在日益多样化的任务集合上训练一些更强大的模型,然后在循环中使用这些模型来创建更具挑战的数据集。如此循环下去。
2、零样本评测是否仍然公平?
随着在许多现有任务上训练的多任务模型越来越普遍,保证模型没有看到类似任务示例将变得越来越困难。在这种情况下,少样本学习或完全监督设置可能成为首选的评估范式。
3、负迁移问题、跨域迁移问题?
UnifiedSKG的full-shot实验表明“多任务微调仍然差于单任务微调。那么:负迁移问题是否无法避免(特别是在full-shot场景下)?如何选择更好的多任务分布?
同时在ZeroPrompt相关实验表明:跨任务迁移的zeroshot性能,并不总是随着任务规模的增加而持续提升。随着多任务数据的增加,跨域迁移问题如何降低?
4、垂直场景的“领域增强”?
受到UnifiedSKG的启发,我们是否可以针对某一类领域任务进行大规模多任务学习呢?不过,首要困难还是(有标注)多任务数据的收集。
5、统一模态、统一语言?
大规模多任务学习在跨模态、跨语言的统一上,是否可更进一步?比如最近的《Few-shot Learning with Multilingual Language Models》已经在统一语言的工作上迈出一步!
结束语: “预训练+大规模多任务学习”会继续促进AI领域的大一统建模。
参考文献
[1] 近代自然语言处理技术发展的“第四范式:
https://www.techbeat.net/article-info?id=3086
[2] Multitask Learning:
https://www.cs.cornell.edu/~caruana/mlj97.pdf
[3] An Overview of Multi-Task Learning in Deep Neural Networks:
https://arxiv.org/pdf/1706.05098.pdf
[4] Multi-Task Learning with Deep Neural Networks: A Survey:
https://arxiv.org/pdf/2009.09796.pdf
[5] Muppet: Massive Multi-task Representations with Pre-Finetuning:
https://arxiv.org/pdf/2101.11038.pdf
[6] Fine- tuned Language Models Are Zero-Shot Learners:
https://arxiv.org/pdf/2109.01652.pdf
[7] Multitask Prompted Training Enables Zero-Shot Task Generalization:
https://arxiv.org/pdf/2110.08207.pdf
[8] Finetuned Language Models Are Zero-Shot Learners:
https://arxiv.org/pdf/2107.13586.pdf
[9] ZeroPrompt: Scaling Prompt-Based Pretraining to 1,000 Tasks Improves Zero-Shot Generalization:
https://arxiv.org/pdf/2201.06910.pdf
[10] MetaICL: Learning to Learn In Context:
https://arxiv.org/pdf/2110.15943.pdf
[11] EXT5: TOWARDS EXTREME MULTI-TASK SCALING FOR TRANSFER LEARNING:
https://arxiv.org/abs/2111.10952
[12] UNIFIEDSKG: Unifying and Multi-Tasking Structured Knowledge Grounding with Text-to-Text Language Models:
https://arxiv.org/pdf/2201.05966.pdf
本文来字:公众号【高能AI】 作者:JayJay
Illustration b y Anna Antipina from i cons8
-The End-
3.19 周六上午10点
忌赖床,忌发呆
宜来B站-旷视直播间
看直播,听分享
快点击图片链接查看报名文章吧!
关于我“门”
将门是一家以专注于发掘、加速及投资技术驱动型创业公司的新型创投机构,旗下涵盖将门创新服务、将门技术社群以及将门创投基金。
将门成立于2015年底,创始团队由微软创投在中国的创始团队原班人马构建而成,曾为微软优选和深度孵化了126家创新的技术型创业公司。
如果您是技术领域的初创企业,不仅想获得投资,还希望获得一系列持续性、有价值的投后服务,欢迎发送或者推荐项目给我“门”:
bp@thejiangmen.com
点击右上角,把文章分享到朋友圈
⤵一键送你进入TechBeat快乐星球
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.