复旦邱锡鹏:语言模型即服务,走向大模型的未来
人类一直期待AI能在处理自然语言方面大放异彩,语言大模型在近些年已逐渐成为NLP领域的标配。随着模型的扩张,当前大模型的调用已变成上游厂商开放API供下游使用的模式。这一模式被复旦大学邱锡鹏教授称之为「语言模型即服务」。在上周六 EMNLP 2022 论文预讲会的特邀报告中,邱锡鹏教授详细讲解了语言模型越来越大的背景下对于新应用模式的探索,并分享了自己团队在构建统一模型和寻找参数微调算法方面的成果。这些工作,有助于后人持续向上探索,继而触摸到大模型的天花板。
邱锡鹏
复旦大学电子计算机科学技术学院教授,博士生导师。发布CCF A/B类毕业论文70余篇,获得ACL(CCF A类)2017优秀毕业论文奖、CCL 2019最佳毕业论文奖。出版发行开源系统著作《神经网络与深度学习》,组织研发了开源系统自然语言理解专用工具 FudanNLP 和 FastNLP,在学界和工业界获得了广泛的应用。
1
『何为语言模型』
语言模型,即建造模型使其符合自然语言的语法及语义的规律。在学界,早期的形式文法等难以在当前海量语言数据持续增长的背景下,满足对其建模的需要。
针对这一问题,学界开始尝试通过概率表示对应的单词和文法。即以一个符合语言规律的序列为输入,模型利用序列间关系等特征,输出一个所有词汇上的概率分布。这种方法的核心在于通过概率的大小反映自然语句中文法或者语义的约束。然而,由于单条语句在诸多情景下可能包含巨大的词汇量,导致「传统概率派」所需的计算资源爆炸式增长。
近年来,学界转而开始尝试通过条件概率和神经网络的表示方法,在自然语言处理领域预先训练得到大规模的语言模型,并针对具体场景制作特定数据集,供这些大模型在下游任务中通过参数微调以适配具体任务。这样的模式在自然语言处理领域取得了优秀的表现效果。
近些年,大模型一直在展现其超凡的魅力。在BERT之后,人们开始尝试不同的预训练任务、模型架构、训练策略等等。在这些探索之外,一个更加直接也更加有效的方向就是继续增大数据量和模型容量来向上摸索这一模式的上界。从 GPT-3 开始,国内外诸多大厂就开始了大规模预训练的军备竞赛,Google的Switch-Transformer,国内智源的CPM,百度的ERNIE 3.0,华为的盘古,阿里的PLUG,浪潮的源1.0等等。
目前非常具有代表性的预训练语言大模型有:BERT、GPT和BART/T5。这些模型都是基于Transformer架构构造的,由于其强大的序列表征能力,目前已变为语言大模型的主流网络架构。
当前的主流大模型的使用模式是Pre-train(预训练)+Fine-tuning(精调)的方式。诸如Google、Open AI这样的大厂商将自身开发的大模型开源,供下游应用者在这些模型上进行参数的微调,以取得优异的表现。与之对应的,自然语言处理方面的学界研究者也被划分为两部分,一部分致力于在上游训练出性能更为优异的大规模语言模型,另一部分则致力于将预训练的大模型转化为面向下游任务场景的合理应用。目前的情况是,在上游,模型的规模仍在不断扩张;而随着模型的扩大,工业界也发现大模型在Few-shot小样本学习的任务上同样取得了显著的性能提升。
然而,当语言模型变得更大的时候,带来一个双向的问题:一方面厂商出于商业原因逐渐舍弃开源,而用户也缺乏足够的计算资源使用大模型。这两者的共同作用使得Pre-train + Fine-tuning模式逐渐消失。针对于此,一个解决方案是通过人工设计一些模板来匹配大模型,另一种是诸如GPT-3的In-context learning (在上下文中学习),即在应用中只使用大模型的前向过程,而不进行计算成本较高的反向过程。
基于GPT的方式,下游应用方只需要人工编造少量的样例,便可以激活GPT大模型在特定任务上的表现,从而服务于下游的应用。比如使用GPT生成一个网页或者将自然语言转化为数学公式。目前的大模型运用方式普遍为上游产商开放大模型应用的API,下游应用方使用一些标注的数据来打造其在特定场景下的的特定功能。但相对于传统的Fine-tuning模式,这种方法在诸多情况下的性能仍然有待提高。
如果模型是部署在服务端的,相当于将语言模型包装成为一个服务品牌,这种新的运用场景就被称之为语言模型即服务。其具备两个基本的内涵,一是如何构造一个统一的基础模型,二是如何高效地调节参数以适应具体的业务场景。
2
『统一的基础模型』
构造统一的语言大模型,核心在于尽可能多地囊括语言任务。
依据目标的不同,自然语言处理的任务可以分为七个主要范式:分类、匹配、序列标注、机器阅读理解、Seq2Seq、Seq2ASeq和语言模型范式。而随着下游应用需求的变化,目前主流的三个范式是:机器阅读理解、Seq2Seq和语言模型。一个基础的语言模型应当围绕着上述几个主要的范式进行针对性构建,以解决大部分自然语言处理问题。
当前,以MLM(掩码语言模型)、In-context learning(在上下文中学习)和Seq2Seq(序列到序列)为代表的处理形式解决了大部分自然语言处理任务。MLM旨在预训练过程中,将一定比例的文本词例屏蔽掉,而模型在训练过程中需要预测被屏蔽掉的词例。In-context learning是指学习从上下文中推理任务的能力。例如,类似GPT-3或者Gopher等大规模语言模型,通过指定对于任务的语言提示,能够直接被用于解决类似文本补全,代码生成以及文本摘要的任务。这种从提示中推理任务的能力通常被称为上下文学习。Seq2Seq是序列到序列的意思,具体指从一个序列生成另外一个序列。该范式涉及两个过程:一是理解前一个序列的内容,二是将理解的内容用于生成新的序列。
在自然语言处理中,很多任务并不能转化为序列到序列的方式,比如方面级的情感分析(ABSA)。举一个例子,分析「Drink are always well made」,这句话中有一个评价对象,还有一个评价词以及整体的情感倾向,这些都需要从这个句子中独立抽取出来。事实上,ABSA任务在学界被细分为7个子任务,每个任务由于输入输出的组合不同导致其相对独立。比如有的任务只抽取方面词,有的任务只抽取评价词,不同人物的形式都不一样,所以目前为止没有一个模型能够同时支持在ABSA任务里面所有的子任务。
邱锡鹏团队致力于将ABSA任务按照Seq2Seq的范式进行统一的实现。团队提出的模型基于一个简单的BART的Encoder-Decoder来构建映射词典,使得算法可以在词典内部进行预测。实验结果证明,得益于BART预训练模型的强大表征能力,该模型在各个ABSA子任务的数据集上实现了SOTA的效果,同时也是世界上第一个囊括了所有ABSA子任务的模型。
NER(命名实体识别)也是在自然语言处理中非常重要的一类任务,涵盖了诸多方面的子任务:
连续的 NER:NER 中的词是连续出现的;
嵌入的 NER:在一个实体里面嵌套另外一个实体;
非连续的 NER:一个实体不连续地在正文出现。
传统解决方式是依照各个子任务的特点量身定制,采用不同的算法来逐个击破。比如连续的 NER就会采用序列标注的方式,非连续的NER基本上使用转移方法。然而,序列标注很难处理非连续的NER,所以这些方法之间并不通用。
从直觉上分析,上述解决ABSA的框架可以极为妥帖地迁移到信息抽取任务中。因此,邱锡鹏团队将一个同样基础的BART 的Encoder-Decoder运用到NER的3个子任务的主流数据集上,在目前主流的NER数据集上取得了SOTA的效果。这种框架的产生使得诸多复杂的结构化预测的任务得以在一个统一的框架内实现,极大地提升了预测的效率。
传统的预训练模型有几类代表作,以BERT为例的理解模型,以GPT为代表的生成模型和BART。既然构造大模型的初衷是为了合众归一,那么能不能将它们汇总到一起?为此,团队于2021年提出了一个新的模型——CPT,其核心思想就是将理解任务和生成任务合并到一起,由此提出了一个非对称的Transformer模型结构:CPT。该结构由一个Encoder(任务间共用)和两个Decoder(一个面向理解,一个面向生成)组成,既具备理解的能力又具备生成的能力。此外,由于Decoder网络层次设计得比较浅,使得模型的生成效率提高了2倍以上,在中文数据集上取得了相较于BERT更好的效果。
3
『更高效地调节算法』
构建起基础的统一预训练模型之后,怎样更加有效地将其迁移到下游的各种具体任务上呢?传统的做法有四种方式:Text prompt、In-context learning、数据生成,特征学习。而邱锡鹏团队贡献出两种方法:即标签调试和黑箱优化。
传统的fine-tuning方法是将Feature Space(特征空间)的参数通过微调映射到Label Space(标签空间),但当模型在大空间向小空间调整的过程中,非常容易发生过拟合的现象。邱锡鹏团队反其道而行之,将Feature Space固定住,调节Label Space使其向Feature Space靠拢。标签常用字母“y”来表示,所以这个方法叫做“y-Tuning”。
团队之前的一个工作是将文本分类任务转化为文本匹配任务,从而可以引入更多针对于标签的语义信息,来提升面向下游具体任务的效果。同样,团队将这一思想应用到Fine-tuning中,将标签作为网络的输入,与预训练模型获得的特征相结合,可以实现更为显式地建模标签的语义,不需要大模型的梯度,极大地减小了计算开销。实验结果验证,在SuperGLUE数据集上,标签迁移比参数迁移的效果更为突出。
另一个方法是黑箱优化。整体思想是,把一个预训练模型部署在服务器端,将其当成一个黑盒子,只提供前项的计算,并通过增加一些Adapt、Prompt来进行参数调节,最终适配到不同的任务上。在大模型时代,手工设计一些代理任务往往依赖于人工的经验,团队希望能够给大模型以自动调节的能力,而不依赖于手工。
然而在现实中,由于prompt的高维度特性,导致无梯度优化的效果很差。而邱锡鹏团队将prompt投射到一个更低维度的空间,在这个空间上进行无梯度的参数优化,再将优化得到的参数逆映射到原始空间。随后,受Prefix Tuning和P-Tuning v2的启发,团队在原始的黑箱优化模型上进行网络层面的加深,希望进一步提升模型的表现,但却引来了参数量大的问题。为此,团队将模型分解为从底层向上逐层的黑箱优化,降低了模型需要训练的参数量,构成了BBTv2模型。在实际的小样本数据集中,这种方法实现的效果可以达到与有梯度的训练模型相媲美。
黑箱调节的意义在于,对于预训练大模型,使用无梯度方法能够打败基于梯度的方法,赋予了一些大模型更为广阔的应用场景,即只需要前向计算就可以实现特定的下游任务。
最后,邱锡鹏教授分享了团队开发的一套面向自然语言理解的工具——FastNLP。这套工具可以十分方便地在线调解程序,并支持多卡分布式训练,同时适用于多套国产深度学习框架(如Paddlepaddle)。该工具目前已开源,欢迎广大学界和工业界的朋友使用。
4
『总结』
随着预训练语言模型的规模急剧增长,出于商业角度考虑和高昂的端侧微调成本,许多大规模预训练语言模型(如GPT-3等)不再被开源,转而以提供API的方式供下游用户在特定场景下进行推理使用,这一场景被称之为“语言模型即服务”。语言模型即服务的应用手段,大致可以划分成五类:
Text prompt:
通过人工设计一些基于文本的Prompt,激活大模型面向特定下游任务的能力。但是手工设计偏向于特征工程问题,需要工程师依据既往经验不断调试,十分耗费精力。
In-context learning:
In-context learning 在GPT模型上展现了良好的表现,但在其他范式的模型上还需要进一步的验证。但是这种手段开辟了一个极具前景的方向,值得学界和工业界继续共同研究。
Data generation:
不同于直接使用大模型,这种手段是使用大模型生成一定量的数据,再利用生成的数据训练一个小体量的模型,以追求在小样本场景下的应用效果。
Black-box optimization:
即上文所述的Black-box tuning,让用户根据推理API的返回结果,使用基于搜索的无梯度优化方法自己优化prompt。
Feature-based-learning:
把预训练模型的输出作为一种 Feature,并结合标签,输入给一些特定的模型,使参数由标签空间向特征空间靠拢,极大地减轻了端侧优化的负担。
5
『Q&A环节』
分享结束后,与会师生同邱锡鹏教授进行了互动交流。部分问题节选如下:
Q:GPT-3具备In-context learning的能力是因为其独特的训练方式吗?
A:因为GPT-3模型的优化细节没有被详细阐明。我个人认为其背后的设计团队专门针对In-context learning这种方式进行过优化。事实上,GPT-3的效果还在不断地提升中,因为使用者可以在使用过程中不断为其输入大量的prompt或者In-context learning 的事例,供模型在后台进行挑选,用于进一步训练。此外,这个模型的构建过程中有可能使用了类似于最近邻的方法,从输入的例子中寻找与之最相近的模式,以求得最为近似的输出,从而赋予了其上下文学习的能力。
Q:您所提到的Y-tuning不需要计算梯度?
A:实际上准确地讲,Y-tuning的模式分为两路进行,一路是预训练模型,另一路才是做标签迁移。这种训练方式是不需要计算预训练语言模型的梯度,但标签迁移部分的梯度仍然是需要调节的。由于模型的参数主要集中于预训练模型中,所以采用这种方式进行Fine-tuning会在很大程度上降低计算量。
Q:黑箱调节在各种任务上与模型全参数微调的性能差距有多大?
A:在很多任务的数据集上,这种调节方式所取得的效果,已经与全参数微调旗鼓相当,甚至在一部分任务上超越了全参数微调。另外值得注意的是,黑箱调节的计算量相较于后者小得多。因此,黑箱调节也为大模型的服务创造了新的场景。
Q:CPT共用一个Encoder的理念是基于什么想法?
A:CPT最开始是基于BART的思想。BART仅仅是一个生成模型,但我们认为如此大的一个语言模型不将其运用于理解任务着实可惜。另外从直觉上来说,无论是语言理解还是语言生成,在Encoder的输入端的知识应该是共享的,于是我们借用BART的Encoder-Decoder就催生出来了CPT的理念。
Q:为什么GPT比Seq2Seq更适合做MLM任务?
A:因为GPT的模型更大,知识容量更高,所以其记住的不仅是语言知识,还有能力记住更多非语言方面的知识。同时这也是我们探索大模型的目的:希望其能够囊括更多的自然语言处理任务。而Seq2Seq范式学习到的更多的是偏向于重构语言的方式,在语义方面的知识学习能力偏弱。
扫描二维码添加小助手微信
关于我们
微信扫码关注该文公众号作者