本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.
引言 :“预训练+大规模多任务学习”像是一个开源工具,拉近了和应用领域的距离:我们可以开箱即用,如果效果不好,也许可以进一步few-shot后提升。重要的是:这种范式(也许)降低了对标注数据的依赖。
老铁们好,我是JayJay~
过去一年,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评测,没有构建更统一的建模方式。
基于此,JayJay认为:“Pre-train+Prompt”这种范式与预训练模型之间仍然存在一个“gap”,即: 冷启的预训练模型没有包含prompt形式的多任务监督目标 ,这导致了下游进行的Prompt Learning与预训练模型间的不一致。而这种不一致性,会导致:
Prompt范式无法更好进行(或直接进行)zero-shot测试;
Prompt范式无法更好统一建模更大规模的NLP任务,并进一步提升few-shot性能;
为解决上述问题,JayJay就介绍一种“ 统一范式 ”—— 预训练+大规模多任务学习 (Pre-train+Massive Multi-tasking)。
笔者注:所谓“统一范式”是因为「预训练+大规模多任务学习」统一模型框架、统一任务形式、统一应用方式。
与此同时,谷歌研究科学家Sebastian Ruder在最新博客《ML and NLP Research Highlights of 2021》中就将“大规模多任务学习”列为2021排名第二的研究热点。
本文的组织结构为:
定义:什幺是“预训练+大规模多任务学习”
「预训练+大规模多任务学习」并不是新的、所谓“第五范式”,而是 Fintune范式+Prompt范式的综合体 。
如上图所示,「预训练+大规模多任务学习」主要包括3个过程:
利用Prompt统一(重构)不同NLP的任务形式(不同任务转化为统一的text-to-text数据形式), 不同prompt可以代表不同的任务 ,形成“适配预训练模型”的多任务数据集;
基于多任务数据对预训练进行fine-tune(中间任务训练);
在具体下游任务上, 对目标任务形成拿来即用的模型 ,可直接进行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场景下,那所谓的“负迁移”问题也许不是很重要。
在正式介绍相关工作前,JayJay先列出一个表格,方便大家回顾:
缘起: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的整体流程主要包括:
构建多任务Prompt统一模型,主要包括:1)构建多任务数据集;2)设计Prompt;3)基于预训练LM模型多任务预训练(采取T5作为初始化的LM);
评估未见任务的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这种方式,JayJay认为存在两点疑问:
选择哪些(k个)样本作为任务提示的示例,是不是也变成了某种意义上的“prompt选择问题”?最终效果是否方差较大?
某些任务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原文。
此外,论文也进行了四种训练方式的对比:
ST-F:单任务微调;
ST-P:单任务prefix-tuning;
MT-F:多任务微调;
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://zhuanlan.zhihu.com/p/395115779
[2]
Multitask Learning: https://www.cs.cornell.edu/~caruana/mlj97.pdf?utm_campaign=NLP%20News&utm_medium=email&utm_source=Revue%20newsletter
[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
Be First to Comment