Press "Enter" to skip to content

后Prompt时代|NLP统一范式:预训练+大规模多任务学习

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

引言 :“预训练+大规模多任务学习”像是一个开源工具,拉近了和应用领域的距离:我们可以开箱即用,如果效果不好,也许可以进一步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

发表评论

您的电子邮箱地址不会被公开。