4

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

 2 years ago
source link: https://mp.weixin.qq.com/s?__biz=MjM5ODkzMzMwMQ%3D%3D&%3Bmid=2650428994&%3Bidx=1&%3Bsn=b48849da3f8de9f296360cf819bbb5b8
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

AINLP 2022-02-09 10:32

The following article is from 高能AI Author JayJay

640?wx_fmt=jpeg

引言:“预训练+大规模多任务学习”像是一个开源工具,拉近了和应用领域的距离:我们可以开箱即用,如果效果不好,也许可以进一步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排名第二的研究热点。本文的组织结构为:
640?wx_fmt=png

定义:什么是“预训练+大规模多任务学习”

「预训练+大规模多任务学习」并不是新的、所谓“第五范式”,而是Fintune范式+Prompt范式的综合体
640?wx_fmt=png
如上图所示,「预训练+大规模多任务学习」主要包括3个过程:
  1. 利用Prompt统一(重构)不同NLP的任务形式(不同任务转化为统一的text-to-text数据形式),不同prompt可以代表不同的任务,形成“适配预训练模型”的多任务数据集;
  2. 基于多任务数据对预训练进行fine-tune(中间任务训练);
  3. 在具体下游任务上,对目标任务形成拿来即用的模型,可直接进行zero-shot测试,也可进一步提升few-shot性能。
与上述的finetune范式和Prompt范式相比,大规模多任务学习也有一些不同之处:
640?wx_fmt=png
  • 与传统的多任务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先列出一个表格,方便大家回顾:
640?wx_fmt=png

缘起: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。
640?wx_fmt=png
FLAN模型属于Instruction Tuning(如上图),即:将包含prompt的数据集进行多任务学习,在下游未见任务进行Zero-Shot性能测试。刘鹏飞博士在综述论文[8]中定义了Prompt的两种主要形式:
  • 完形填空(Cloze)prompt;
  • 前缀 (Prefix) prompt;
而Instruction Tuning中的Prompt形式更像是一种更明显的指令/指示(可以归为第三种Prompt形式),如下图所示。
640?wx_fmt=png
640?wx_fmt=png
同样,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还要好。
640?wx_fmt=png
如上图所示:不同传统的预训练-微调范式,ZeroPrompt的整体流程主要包括:
  1. 构建多任务Prompt统一模型,主要包括:1)构建多任务数据集;2)设计Prompt;3)基于预训练LM模型多任务预训练(采取T5作为初始化的LM);
  2. 评估未见任务的zeroshot性能,主要工作是:基于【Prompt遗传搜索算法】,针对未见的新任务构建自适应的Prompt。
对于Prompt设计,这里给出一个中文NER的例子:
640?wx_fmt=png
此外,ZeroPrompt一个重要不同在于:进行了“zero-shot adaptation with fewshot validation”设置,也就是为了验证Prompt的效果进而构建开发集(防止不同的Prompt通常会导致zero-shot性能差异较大)ZeroPrompt虽然数据规模庞大,但也证明一点:任务数据规模的拓展是模型缩放的一种有效替代手段。正如下图所示:随着多任务训练任务的增加,不同大小模型之间的Zero-shot性能趋近一致
640?wx_fmt=png

改变: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对不同任务进行统一重构,但通过提供“训练示例”可以重构任务信息,从而省去人工设计模板的繁重工作。
640?wx_fmt=png
上图给出了MetaICL整体流程,归纳如下:
  • 训练过程:进行K-shot Learning。输入是:随机抽取出某一类任务中k个样本x和y,和第k+1个样本的x。输出是:第k+1个样本的y。不难发现:前k个样本提供了对于任务的描述信息。
  • 推断过程:选择k个样本x和y进行拼接作为任务提示信息,直接对测试样本x进行预测。
此外,这篇论文也证实:加入prompt人工撰写的任务指令描述后,MetaICL效果有着进一步的提升。不过对于MetaICL这种方式,JayJay认为存在两点疑问:
  1. 选择哪些(k个)样本作为任务提示的示例,是不是也变成了某种意义上的“prompt选择问题”?最终效果是否方差较大?
  2. 某些任务k个样本拼接后,输入文本长度过长,性能和效果如何保证?

融合:ExT5,将多任务融合到预训练中

ExT5[11]是Google最近ICLR2022的一篇工作,ExT5将上述的多任务训练过程前置到预训练中,共构建了107个NLP多任务数据集(论文将这个庞大集合称之为EXMIX)。
640?wx_fmt=png
ExT5就是一个在有监督的EXMIX数据和自监督C4数据上进行预训练的T5模型,如上图所示。ExT5发现:在预训练期间使用多个任务比在微调期间更好,并且多任务预训练与 MLM 相结合比仅使用 MLM 的样本效率要高得多,如下图:
640?wx_fmt=png

聚焦:UnifiedSKG,统一结构化数据任务

640?wx_fmt=png
上述介绍的工作不区分特定任务,而最近18家机构共同打造的UnifiedSKG[12]则是将大规模对任务学习聚焦于结构化数据任务上,刷新了其中21个任务中的16个SOTA。
640?wx_fmt=png
如上图所示,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》已经在统一语言的工作上迈出一步!
640?wx_fmt=png

结束语:“预训练+大规模多任务学习”会继续促进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

0?wx_fmt=png
AINLP
一个有趣有AI的自然语言处理公众号:关注AI、NLP、机器学习、推荐系统、计算广告等相关技术。公众号可直接对话双语聊天机器人,尝试自动对联、作诗机、藏头诗生成器,调戏夸夸机器人、彩虹屁生成器,使用中英翻译,查询相似词,测试NLP相关工具包。
342篇原创内容
Official Account
进技术交流群请添加AINLP小助手微信(id: ainlper)
请备注具体方向+所用到的相关技术点
640?wx_fmt=jpeg

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。

640?wx_fmt=jpeg

阅读至此了,分享、点赞、在看三选一吧🙏


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK