截止23年3月底,语言模型发展走过了三个阶段:第一阶段:设计一系列的自监督训练目标,设计新颖的模型架构(Transformer),遵循Pre-training和Fine-tuning范式。典型代表是BERT、GPT、XLNet等;第二阶段:逐步扩大模型参数和训练语料规模,探索不同类型的架构。典型代表是BART、T5、GPT-3等;第三阶段:走向AIGC(Artificial Intelligent Generated Content)时代,模型参数规模步入千万亿,模型架构为自回归架构,大模型走向对话式、生成式、多模态时代,更加注重与人类交互进行对齐,实现可靠、安全、无毒的模型。典型代表是InstructionGPT、ChatGPT、Bard、GPT-4等。面向预训练语言模型的Prompt-Tuning技术发展历程Prompt-Tuning自从GPT-3被提出以来,从传统的离散、连续的Prompt的构建、走向面向超大规模模型的In-Context Learning、Instruction-tuning和Chain-of-Thought。自从GPT、EMLO、BERT的相继提出,以Pre-training + Fine-tuning 的模式在诸多自然语言处理(NLP)任务中被广泛使用,其先在Pre-training阶段通过一个模型在大规模无监督语料上预先训练一个 预训练语言模型(Pre-trained Language Model,PLM) , 然后在Fine-tuning阶段基于训练好的语言模型在具体的下游任务上再次进行 微调(Fine-tuning) ,本文将深入解读Prompt-Tuning的微调范式,以综述+讨论的形式展开。这种模式在诸多任务的表现上超越了传统的监督学习方法,不论在工业生产、科研创新还是竞赛中均作为新的主流方式。然而,这套模式也存在着一些问题。例如,在大多数的下游任务微调时, 下游任务的目标与预训练的目标差距过大 导致提升效果不明显, 微调过程中依赖大量的监督语料 等。 至此,以GPT-3、PET为首提出一种基于预训练语言模型的新的微调范式——Prompt-Tuning ,其旨在通过添加模板的方法来避免引入额外的参数,从而让语言模型可以在小样本(Few-shot)或零样本(Zero-shot)场景下达到理想的效果。Prompt-Tuning又可以称为Prompt、Prompting、Prompt-based Fine-tuning等。因此简单的来说,Prompt-Tuning的动机旨在解决目前传统Fine-tuning的两个痛点问题:降低语义差异 (Bridge the gap between Pre-training and Fine-tuning):预训练任务主要以Masked Language Modeling(MLM)为主,而下游任务则重新引入新的训练参数,因此两个阶段的目标通常有较大差异。因此需要解决如何缩小Pre-training和Fine-tuning两个阶段目标差距过大的问题。避免过拟合 (Overfitting of the head):由于在Fine-tuning阶段需要新引入额外的参数以适配相应的任务需要,因此在样本数量有限的情况容易发生过拟合,降低了模型的泛化能力。因此需要面对预训练语言模型的过拟合问题。
02
预训练语言模型
涉及知识点:
单向语言模型、双向语言模型;Transformer;预训练任务,包括MLM、NSP等;NLP的任务类型以及fine-tuning。预训练语言模型想必大家已经不再陌生,以GPT、ELMO和BERT为首的预训练语言模型在近两年内大放异彩。预训练语言模型主要分为单向和双向两种类型:单向:以GPT为首,强调 从左向右 的编码顺序,适用于Encoder-Decoder模式的自回归(Auto-regressive)模型;双向:以ELMO为首,强调从左向右和从右向左 双向编码 ,但ELMO的主体是LSTM,由于其是串形地进行编码,导致其运行速度较慢,因此最近BERT则以Transformer为主体结构作为双向语言模型的基准。现如今常用的语言模型大多数是BERT及其变体,它的主体结构Transformer模型是由谷歌机器翻译团队在17年末提出的,是一种完全利用attention机制构建的端到端模型,具体算法详解可详情【预训练语言模型】Attention Is All You Need(Transformer)[1]。之所以选择Transformer,是因为 其完全以Attention作为计算推理技术 ,任意的两个token均可以两两交互,使得推理完全可以由矩阵乘机来替代,实现了 可并行化计算 ,因此Transformer也可以认为是一个全连接图, 缓解了序列数据普遍存在的长距离依赖和梯度消失等缺陷 。在NLP领域中,Attention机制的目标是对具有强相关的token之间提高模型的关注度。例如在文本分类中,部分词对分类产生的贡献更大,则会分配较大的权重。对句子的编码主要目标是为了让模型记住token的语义。传统的LSTM则只能通过长短期记忆的方法来捕捉token之间的关系,容易导致梯度消失或记忆模糊问题,而Transformer中,任意的token之间都有显式的连接,避免了长距离依赖性问题。当然Transformer也增加了position embedding以区分不同token的位置关系。2.1 经典的Pre-trained任务本文的目标是介绍Prompt-Tuning的方法,而Prompt-Tuning的动机则是进一步拉近微调与预训练阶段的任务目标,因此本部分则以常用的BERT为主,简单介绍Pre-training的经典方法,更加详细的解读,可参考:【预训练语言模型】BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(BERT)[2]。
1、Masked Language Modeling(MLM)
传统的语言模型是以word2vec、GloVe为代表的词向量模型,他们主要是以词袋(N-Gram)为基础。例如在word2vec的CBOW方法中,随机选取一个固定长度的词袋区间,然后挖掉中心部分的词后,让模型(一个简单的深度神经网络)预测该位置的词,如下图所示:Masked Language Modeling(MLM)则采用了N-Gram的方法,不同的是,N-Gram喂入的是被截断的短文本,而MLM则是完整的文本,因此MLM更能够保留原始的语义:
MLM是一种自监督的训练方法,其先从大规模的无监督语料上通过固定的替换策略获得自监督语料,设计预训练的目标来训练模型,具体的可以描述为:替换策略:在所有语料中,随机抽取15%的文本。被选中的文本中,则有80%的文本中,随机挑选一个token并替换为[mask],10%的文本中则随机挑选一个token替换为其他token,10%的文本中保持不变。训练目标:当模型遇见[mask]token时,则根据学习得到的上下文语义去预测该位置可能的词,因此,训练的目标是对整个词表上的分类任务,可以使用交叉信息熵作为目标函数。因此以BERT为例,首先喂入一个文本It is very cold today, we need to wear more clothes. ,然后随机mask掉一个token,并结合一些特殊标记得到:[cls] It is very cold today, we need to [mask] more clothes. [sep],喂入到多层的Transformer结构中,则可以得到最后一层每个token的隐状态向量。MLM则通过在[mask]头部添加一个MLP映射到词表上,得到所有词预测的概率分布。现如今有诸多针对MLM的改进版本,我们挑选两个经典的改进进行介绍:Whole Word Masking(WWM) :来源于RoBERTa等,其认为BERT经过分词后得到的是word piece,而BERT的MLM则是基于word piece进行随机替换操作的,即Single-token Masking,因此被mask的token语义并不完整。而WWM则表示被mask的必须是一个完整的单词。Entity Mention Replacement(EMR):来源于ERNIE-BAIDU等,其通常是在知识增强的预训练场景中,即给定已知的知识库(实体),对文本中的整个实体进行mask,而不是单一的token或字符。下面给出对比样例。以文本“Michael Jackson is one of the best-selling music artists of all time, with estimated sales of over 400 million records worldwide”为例:
2、Next Sentence Prediction(NSP)
在BERT原文中,还添加了NSP任务,其主要目标是给定两个句子,来判断他们之间的关系,属于一种自然语言推理(NLI)任务。在NSP中则存在三种关系,分别是:1、entailment(isNext):存在蕴含关系,NSP中则认为紧相邻的两个句子属于entailment,即isNext关系;2、contradiction(isNotNext):矛盾关系,NSP中则认为这两个句子不存在前后关系,例如两个句子来自于不同的文章;3、Neutral:中性关系,NSP中认为当前的两个句子可能来自于同一篇文章,但是不属于isNext关系的而显然,构建NSP语料也可以通过自监督的方法获得,首先给定一个大规模无监督语料,按照文章进行分类。在同一篇文章里,随机挑选一个句子作为premise,因此entailment类对应的则是其下一个句子,另外再随机挑选同一篇文章中的其他句子作为Neutral类,其他文章中的句子作为contradiction类。在BERT中,NSP任务则视为sentence-pair任务,例如输入两个句子S1:It is very cold today. 和 S2:We need to wear more clothes.,通过拼接特殊字符后,得到:[cls] It is very cold today. [sep] We need to wear more clothes. [sep],然后喂入到多层Transformer中,可以得到[cls]token的隐状态向量,同样通过MLP映射到一个3分类上获得各个类的概率分布:
那么什么是Prompt呢?在了解预训练语言模型的基础,以及预训练语言模型在Pre-training和Fine-tuning之后,我们已经可以预想到 Prompt的目的是将Fine-tuning的下游任务目标转换为Pre-training的任务。那么具体如何工作呢?我们依然以二分类的情感分析作为例子,描述Prompt-tuning的工作原理。给定一个句子[CLS] I like the Disney films very much. [SEP]传统的Fine-tuning方法是将其通过BERT的Transformer获得[CLS]表征之后再喂入新增加的MLP分类器进行二分类,预测该句子是积极的(positive)还是消极的(negative),因此需要一定量的训练数据来训练。而Prompt-Tuning则执行如下步骤:1、构建模板(Template Construction) :通过人工定义、自动搜索、文本生成等方法,生成与给定句子相关的一个含有[MASK]标记的模板。例如It was [MASK].,并拼接到原始的文本中,获得Prompt-Tuning的输入:[CLS] I like the Disney films very much. [SEP] It was [MASK]. [SEP]。将其喂入BERT模型中,并复用预训练好的MLM分类器(在huggingface中为BertForMaskedLM),即可直接得到[MASK]预测的各个token的概率分布;2、标签词映射(Label Word Verbalizer):因为[MASK]部分我们只对部分词感兴趣,因此需要建立一个映射关系。例如如果[MASK]预测的词是“great”,则认为是positive类,如果是“terrible”,则认为是negative类。此时会有读者思考,不同的句子应该有不同的template和label word,没错,因为每个句子可能期望预测出来的label word都不同,因此如何最大化的寻找当前任务更加合适的template和label word是Prompt-tuning非常重要的挑战。3、训练 :根据Verbalizer,则可以获得指定label word的预测概率分布,并采用交叉信息熵进行训练。此时因为只对预训练好的MLM head进行微调,所以避免了过拟合问题。在hugging face上也可以直接进行测试:I like the Disney films very much.I dislike the Disney films very much.其实我们可以理解,引入的模板和标签词本质上也属于一种数据增强,通过添加提示的方式引入先验知识。
Prompt-Tuning起源于GPT-3的提出《Language Models are Few-Shot Learners》(NIPS2020)[3],其认为超大规模的模型只要配合好合适的模板就可以极大化地发挥其推理和理解能力。其开创性提出in-context learning 概念,即无须修改模型即可实现few-shot/zero-shot learning。同时引入了demonstrate learning,即让模型知道与标签相似的语义描述,提升推理能力。1、In-context Learning :是Prompt的前身。其通过从训练集中挑选一些样本作为任务的提示提示(Natural Language Prompt),来实现免参数更新的模型预测;2、Demonstration Learning:添加一些新的文本作为提示。例如在对“I like the Disney film. It was [MASK]”进行情感分析时,可以拼接一些相似场景的ground-truth文本“I like the book, it was great.”、“The music is boring. It is terrible for me.”等。此时模型在根据新添加的两个样例句子就可以“照葫芦画瓢”式地预测结果了。不过以GPT-3为首的这类方法有一个明显的缺陷是——其建立在超大规模的预训练语言模型上 ,此时的模型参数数量通常超过100亿, 在真实场景中很难应用,因此众多研究者开始探索GPT-3的这套思路在小规模的语言模型(BERT)上还是否适用?事实上,这套方法在小规模的语言模型上是可行的,但是需要注意几点:1、模型参数规模小了,Prompt直接用在Zero-shot上效果会下降,因此需要考虑将in-context learning和demonstrate learning应用在Fine-tuning阶段;2、GPT-3中提供的提示(Natural Language Prompt)过于简单,并不难使用在一些具体的任务场景,因此需要单独设计一套组件实现。因此,大名鼎鼎的PET模型问世,PET(Pattern-Exploiting Training)出自《Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference》(EACL2021)[4],根据论文题目则可以猜出,Prompt-Tuning启发于文本分类任务,并且试图将所有的分类任务转换为与MLM一致的完形填空。PET详细地设计了Prompt-Tuning的重要组件——Pattern-Verbalizer-Pair(PVP),并描述了Prompt-tuning如何实现Few-shot/Zero-shot Learning,如何应用在全监督和半监督场景(iPET)。PET的详细讲解可参考PET的论文解读[5]PET设计了两个很重要的组件:Pattern(Template):记作 ,即上文提到的Template,其为额外添加的带有[mask]标记的短文本,通常一个样本只有一个Pattern(因为我们希望只有1个让模型预测的[mask]标记)。上文也提到,不同的任务、不同的样本可能会有其更加合适的pattern,因此如何构建合适的pattern是Prompt-Tuning的研究点之一 ;Verbalizer :记作 ,即标签词的映射,对于具体的分类任务,需要选择指定的标签词(label word)。例如情感分析中,我们期望Verbalizer可能是 , (positive和negative是类标签)。同样,不同的任务有其相应的label word,但需要注意的是,Verbalizer的构建需要取决于对应的Pattern。因此如何构建Verbalizer是另一个研究挑战 。上述两个组件被称为Pattern-Verbalizer-Pair(PVP),一般记作 ,在后续的大多数研究中均采用这种PVP组件。因此基于PVP的训练目标可以形式化描述:给定一个句子 ,以及对应的标签 ,给定定义的PVP组件 ,则有:那么会有读者一直会思考,一般情况下,一个句子只能有一个PVP(因为我们只需要一个[mask]用来预测),这可能并不是最优的,是否可以为一个句子设计多个不同的PVP呢?这是可以的,这属于Prompt-Tuning的集成。PET提供了简单的集成思路:Patterns Ensembling :同一个句子设计多个不同的pattern,例如It was [mask].,I think it is [mask].,This comment denotes as [mask]. 等,此时,原先只有一个句子,却可以生成多个不同的样本,也变相起到数据增强的作用。在训练时,可以当作单独的样本进行训练,推理时,则可以对所有Pattern的结果进行投票或加权。如下图所示:
启发式法一般是采用规则、正则化模板的方法自动构建出相应的Pattern,或者直接通过启发式搜索的方法获得Pattern。这一类方法在程序设计时只需要编写规则和少量的模板即可快速的获得Pattern。给定一个具体的任务(例如分类任务),可以实现定义若干个模板(例如正则化工具),然后根据具体的句子内容,向模板中填充相关实体,以贴合句子实际的描述。例如清华大学刘知远团队提出的PTR(PTR: Prompt Tuning with Rules for Text Classification[6])利用启发式的规则定义若干子模板(sub-prompt),并通过若干子模板的组合来形成最终的Pattern。例如在关系抽取任务中,通常给定一个短文本,两个实体(记作subject和object),假如给定句子“Mark Twain was the father of Langdon. ”以及两个实体“Mark Twain”和“Landon”。那么可以定义3个子模板:1、头实体(subject entity): the [mask] ,对应于:“the [mask] Mark Twain”,可用于预测头实体的类型;2、尾实体(object entity): the [mask] ,对应于:“the [mask] Landon”,可用于尾实体的类型;3、实体关系(relation): ,对应于:“Mark Twain [mask] Landon”,可用于头尾实体关系;基于上述定义的3个规则,则可以结合起来形成最终模板,即 ,即“the [mask] Mark Twain [mask] the [mask] Landon”。如图所示:
PTR的详细解读请参考博主的论文解读:论文解读:PTR: Prompt Tuning with Rules fo Text Classification[7]因此不论给定哪个句子,模板不会完全固定不变,而是根据不同的实体而相应改变模板的字符序列。相比之下, AutoPrompt则是另一种典型的方法,其由加州大学提出《AutoPrompt: Eliciting Knowledge from Language Models with Automatically Generated Prompts(EMNLP2021)[8],如下图所示,给定原始的输入,额外定义若干离散的字符作为trigger,并组成Template,喂入MLM中预测对应label word的概率。而这些trigger最终通过梯度搜索的方法进行挑选。
领域知识指导搜索离散的label word:《Knowledgeable Prompt-tuning:
Incorporating Knowledge into Prompt Verbalizer for Text Classification》[16],代表方法为KPT;
原型网络动态生成label representations:《Prototypical Verbalizer for Prompt-based Few-shot Tuning》[17],代表方法为ProtoVerb。
KPT(Knowledgeable Prompt Tuning)
KPT的详细内容请参考博主的论文解读:论文解读:Knowledgeable Prompt-tuning: Incorporation Knowledge into Prompt Verbalizer for Text Classification[18]。针对不同的任务,都有其相应的领域知识,为了避免人工选择label word,该方法提出基于知识图谱增强的方法,如下图所示:具体思路如下:1、首先通过一些已有的字典工具,从词表中获得与给定label相关的词。如何建模这种相关性呢,该方法引入知识库,依赖于知识库中的三元组来衡量。例如SCIENCE在知识库中是一个实体,与该实体存在多挑关系的词可能有science、mathematics等等;2、第一步可以获得大量的词,但是也容易引入噪声,因此需要进行提炼(Refine),可以设计一系列的启发式方法来度量每个词与label的相关度,最后获得指定数量的若干个合适的label word;3、对于选定的label word,采用Verbalizaer集成的方法获得最终的预测结果。
Prompt本质上是对下游任务的指令,可以作为一种信息增强 。简单的来说,就是告诉模型需要做什么任务,输出什么内容。上文我们提及到的离散或连续的模板,本质上就是一种对任务的提示。当数据集不同(乃至样本不同)的时候,我们期望模型能够自适应的选择不同的模板,这也相当于说不同的任务会有其对应的提示信息。例如在对电影评论进行二分类的时候,最简单的提示模板是“. It was [mask].”,但是其并没有突出该任务的具体特性,我们可以为其设计一个能够突出该任务特性的模板,例如“The movie review is . It was [mask].”,然后根据mask位置的输出结果通过Verbalizer映射到具体的标签上。这一类具备任务特性的模板可以称之为指令(Instruction) 。下面展示几个任务设计的指令模板:看似设计指令是一件容易的事情,但是在真实使用过程中,预训练模型很难“理解”这些指令,根据最近研究工作发现,主要总结如下几个原因:1、预训练模型不够大 :我们常使用的BERT-base、BERT-large、RoBERTa-base和RoBERTa-large只有不到10亿参数,相比于现如今GPT-3、OPT等只能算作小模型,有工作发现,小模型在进行Prompt Tuning的时候会比Fine-tuning效果差,是因为小模型很容易受到模板的影响。对比一下传统的Fine-tuning,每个样本的输入几乎都是不同的,然而基于Prompt的方法中,所有的样本输入都会包含相同的指令,这就导致小模型很容易受到这些指令带来的干扰。2、缺乏指令相关的训练:这些小模型在预训练阶段没有专门学习过如何理解一些特殊的指令。我们回顾一下上面章节,不论是生成离散的模板还是连续的模板,都是在向现有的预训练语言模型进行“妥协”,即找到能够让当前预训练语言模型在小样本上效果最好的模板,或者说是站在已有预训练模型的基础上寻找模板。然而这种寻找到的模板不可读也不可解释,或者过于通用,不具备任务特性,无法很好地在真实场景下使用。因此,我们需要的是先设计好任务相关的指令,使得这些指令是可读的,可在真实场景下使用的。不过由于预训练模型没见过这些指令,所以很难在小样本上快速理解它们。也许读者想到了前面所讲到的Pre-trained Prompt Tuning(PPT),即再次对预训练语言模型进行一次Continual Pre-training。然而我们忽略了一点,即我们期望预训练模型不止是在我们已经设计好的指令上进行学习,还应该在未知的指令上具备一定的泛化性能,也就是说在一个完全新的任务上,只需要少量样本(甚至是零样本),也能过很好地理解这个指令。为了达到这个目的,最常用的方法是元学习(Meta Learning),我们介绍几个代表性的工作:
《TransPrompt: Towards an Automatic Transferable Prompting Framework for Few-shot Text Classification》[20]:代表方法TransPrompt,利用迁移学习提升预训练语言模型在不同类型任务上的泛化性能;
《Adapting Language Models for Zero-shot Learning by Meta-tuning on Dataset and Prompt Collections》[21]:代表方法:MPT,统一分类任务范式,并采用元学习进行训练;
该方法是面向离散的提示,其主要关注于文本分类任务,但是不同的是,其对分类的范式进行了一些转换,将所有分类任务定义为“Yes/No”问题,下面对比一下两种不同的范式:传统的多类分类范式 :假设一个分类任务有N个类别,一般情况下,一个句子 X将会对应一个样本 (x,y),其中 y 是 N类中的一个;Yes/No分类范式 :假设一个分类任务有 N个类别,将每一个句子和类别作为一个整体,来判断它们之间是否匹配,即,得到一个新的样本 (x,y,Yes/No)。这样的话,一个句子 x 将会对应 N个样本。基于Yes/No范式,不论类别有多少,都可以转换为统一的Yes/No分类,从而不同类别的分类任务也可以混合起来进行训练。在转换范式的时候,会发现输入的句子需要融合标签,因此需要涉及到为不同标签设计对应的指令。如下图所示,对于情感分析任务,输入的句子是“=A total waste of time”,给定一个标签“Positive”,对应的指令则是“Is the review positive?”。整体的输入是 “. Is the review positive? Answer: [mask].”。此时我们只需要约束mask位置的输出是Yes和No即可,例如概例子中No的概率最大由于进行了范式转换,不论是情感分析,还是问题分类、主题分类,所有分类任务都可以“一视同仁”。因此可以采用元学习的方法,如上图,让模型在四个任务上进行Multi-task Training,然后利用元学习技术(例如MAML)将知识迁移到新的任务上,最后在这个新的任务上进行验证。MPT的优点是可以实现范式统一,这对后续基于Prompt的超大规模多任务训练奠定基础,但是其缺点也很突出,即需要为不同任务不同类别设计对应的指令。
5.2 复用预训练目标——实现基于Prompt的统一范式
我们需要思考,上述所讲的内容为什么要设计Template(和Verbalizer)?为什么都要包含mask token?回顾第一节我们介绍的几个预训练语言模型,我们发现目前绝大多数的双向预训练语言模型都包含Masked Language Modeling(MLM),单向预训练语言模型都包含Autoregressive Language Modeling(ALM),这些任务是预训练目标,本质上是预测被mask的位置的词,在训练时让模型理解语言的上下文信息。之所以设计Template和指令,就是希望在下游任务时能够复用这些预训练的目标,避免引入新的参数而导致过拟合。因此,我们可以将Prompt升华到一个新的高度,即Prompt Tuning的本质是复用预训练语言模型在预训练阶段所使用的目标和参数 。基于Huggingface的预训练模型仓库中,我们一般称之为LMhead,本质上就是一个MLP,输入为一个大小为[batch_size, sequence_length, hidden_size]的张量,输出为[batch_size, sequence_length, vocab_size]的概率分布。由于绝大多数的语言模型都采用MLM或ALM进行训练,所以我们现如今所看到的大多数基于Prompt的分类都要设计Template和Verbalizer。那么我们是否可以极大化地利用MLM和ALM的先验知识在不同的下游任务上获得更好的表现?是否可以设计一个全新的预训练任务来满足一些下游任务的需求呢?我们介绍两个充分利用这个思想的方法:1、万物皆可生成:将所有任务统一为文本生成,极大化利用单向语言模型目标;2、万物皆可抽取:将所有任务统一为抽取式阅读理解,并设计抽取式预训练目标;3、万物皆可推理:将所有任务建模为自然语言推断(Natural Language Inference)或相似度匹配任务。
(1)万物皆可生成——基于生成的Prompt范式统一
在含有单向Transformer的语言模型中(例如GPT、BART),都包含自回归训练目标,即基于上一个token来预测当前的token,而双向语言模型中的MLM可以视为只生成一个token的自回归模型。为此,我们则可以将分类任务视为一种特殊的文本生成,并配上Verbalizer,这样,所有的NLP任务都可以统一为生成任务。针对不同的任务,只需要提供对应的指令和模板即可(由于是使用单向语言模型,因此没有mask token,需要生成的部分置于文本末尾)。下面给出几个示例:利用此思想,有很多工作致力于通过Prompt与生成的思想将各类任务进行统一。以问答领域为例,问答包括生成式问答、抽取式问答、多项选择等,我们可以将各种类型的问答建模为生成任务。典型的方法例如:《UNIFIEDQA: Crossing format boundaries with a single QA system[22]》、《ProQA- Structural Prompt-based Pre-training for Unified Question Answering[23]》,其采用端到端的预训练语言模型(例如BART、T5),并复用预训练阶段的训练目标。最近大火的ChatGPT则是基于“万物皆可生成”的思想,将单向语言模型的ALM发挥到极致,实现对所有任务的大一统,与之为代表的还有In-Context Learning、Instruction-Tuning和Chain-of-Thought,将在第5章节介绍。
(2)万物皆可抽取——基于抽取式阅读理解的Prompt范式统一
基于生成的方法存在缺点:1、必须让待生成的部分置于文本末尾,此时会约束指令和模板的设计,不利于灵活运用;2、由于是开放式生成,生成的内容无法控制,且依赖于文本的长度等;3、对于一些具有条件限制的任务,例如多项选择、信息抽取等,生成的内容或许不符合这些条件。例如在做实体抽取的时候,需要确保生成的实体是在文本中出现的。为此,“万物皆可抽取”的思想可以解决此类问题,其思想指将所有自然语言理解任务转换为抽取式阅读理解的形式,下面给出形式化的定义:抽取式阅读理解(Extractive MRC):给定一个问题(Question) ,一篇文章或文本(Passage) ,其中 分别表示Question和Passage的token, 分别表示Question和Passage的长度。任务的目标是根据Question,在Passage中寻找一个区间 作为答案 ,除了抽取式阅读理解任务外,其他NLP任务如何转换为这个形式呢?本质上还是在如何设计模板和指令。下面给出几个事例:可以发现,如果是分类型的任务,只需要通过指令和模板的形式将所有类别罗列起来即可。在训练时,可以采用两种方法:1、设计抽取式预训练目标,在无标注语料上进行自监督训练;2、按照阅读理解的形式统一所有任务范式,并混合所有任务进行Cross-task Learning,再在新的任务上进行测试。经典的方法比如《Unifying Question Answering, Text Classification, and Regression via Span Extraction》[24],苏剑林提出的Global Pointer[25]。博主也运用该思想在2022年AIWIN春季赛“中文保险小样本”中获得第二名成绩。基于MRC的范式统一方法则是提出新的预训练目标——区间抽取,并巧妙的集成了一些比较复杂的任务,例如实体识别,同时抽取式方法也可以很好地运用在多标签分类问题上,同理,实体识别和多区间抽取QA也属于类似多标签问题,即需要抽取出数量不等的区间。但是缺点是无法运用到生成问题上,且依赖于候选项。
Prefix-Tuning也是很经典的参数有效性学习,其是受到Prompt-Tuning的启发。我们说Prompt-Tuning的本质是参数有效性学习,是因为整个预训练模型参数可以全部固定,只需要对Template对应的少量参数(例如连续模板的Prompt Encoder、伪标记对应的Embedding等)进行训练。在Prefix-Tuning中,则是除了对输入层添加模板外,还对Transformer的每一层添加“模板”。Prefix-Tuning与传统Fine-tuning的对比图如下所示:可以看到,Transformer的参数完全固定,而我们只需要对Prefix部分进行训练即可,对于不同的任务训练不同的Prefix,在实际使用时,挑选任务相关的Prefix和Transformer进行组装,实现可插拔式的应用。与Prefix-Tuning类似的方法还有P-tuning V2[32],不同之处在于Prefix-Tuning是面向文本生成领域的,P-tuning V2面向自然语言理解。但本质上完全相同。下图针对Prefix-tuning(P-tuning V2)与Prompt-Tuning对比(黄色部分表示可训练的参数,蓝色表示被冻结的参数):左图表示的是基于连续提示的Prompt-Tuning(例如P-tuning),我们可以发现只有输入层对应模板部分的Embedding和MLP参数是可训练的,右图部分表示Prefix-Tuning(P-tuning V2),Transformer的每一层的前缀部分也是可训练的,可以抽象的认为是在每一层添加了连续的模板。但是实际上,Prefix-Tuning(P-tuning V2)并不是真正的在每一层添加模板,而是通过HuggingFace框架内置的past_key_value参数控制。其本质上与Adapter类似,是在Transformer内部对Key和Value插入可训练的两个MLP。有相关工作对Adapter、Prefix-Tuning、LoRA等参数有效性学习进行了集成,因为这些参数有效性学习方法本质上都是插入少量的新的参数,这些新的参数可以对预训练模型起到提示作用,只不过并不是以人类可读的离散的模板形式体现而已 。下图是《UniPELT: A Unified Framework for Parameter-Efficient Language Model Tuning》[33]提出将这些参数有效性方法进行统一,提出UniPELT框架:
(3) BitFit
BitFit的思想更简单,其不需要对预训练模型做任何改动,只需要指定神经网络中的偏向(Bias)为可训练参数即可,BitFit的参数量只有不到2%,但是实验效果可以接近全量参数。介绍了上述的一些参数有效性方法,我们发现,Prompt-Tuning也符合其主旨。基于参数有效性的思想,也有许多工作致力于Prompt与参数有效性的结合,例如《Delta Tuning: A Comprehensive Study of Parameter Efficient Methods for Pre-trained Language Models》[34]、《LiST: Lite Prompted Self-training Makes Parameter-efficient Few-shot Learners》[35]、《Making Parameter-efficient Tuning More Efficient: A Unified Framework for Classification Tasks》[36]、《P-Adapters- Robustly Extracting Factual Information from Language Models with Diverse Prompts》[37]、《Context-Tuning: Learning Contextualized Prompts for Natural Language Generation》[38],由于相关工作非常多而且更新频繁,这里不一一介绍。
In-Context Example主要是由训练样本组成的,通常包含Input和Output两个部分。其中Input(Input Text)表示输入的文本,Output表示输出的文本或者标签(Label)。那么Input-Output的形式是否会对ICL产生影响呢,下面介绍两个来自EMNLP2022针对样本挑选的分析型工作:《Rethinking the Role of Demonstrations: What Makes In-Context Learning Work?》[39](简称 Rethinking )《Ground-Truth Labels Matter: A Deeper Look into Input-Label Demonstrations》[40](简称Ground-Truth ) Rethinking该工作使用GPT-3和GPT-J等大模型,根据API的多次调用进行实验。首先探索了这些挑选样本的输入句子与标签(Input-Output Mapping)是否正确对预测存在影响,其定义三个Baseline,所有样本均为随机采样:No Demonstration:没有任何训练样本,相当于零样本场景;Demonstration w/ glod labels:标准的in-context learning,每个标注样本和标签是正确对应的Demonstration w/ random labels :In-context Example的标签被随机替换为错误的标签;通过实验发现:1、使用Demonstration比不使用的效果好 ,说明demonstration example确实可以提升性能;2、random label对模型性能的破坏并不是很大,说明in-context learning更多的是去学习Task-specific的Format,而不是Input-Output Mapping3、MetaICL是包含对ICL进行meta-training的方法,但实验结果也表明random label对效果影响很小。说明在meta-training时,模型也不会过多关注Demonstration example的Input-Output Mapping,而是关注其他方面。MetaICL是一种通过任务统一范式并使用元学习进行训练的方法,其重要增加了多任务的训练来改进ICL在下游任务零样本推理时的泛化性能,该算法将在下文讲解。另外进一步探索被挑选的 个训练样本中, 正确的Input-Output Mapping的比例是否也有影响。实验结果发现影响较小,如下图:下面探索修改Demonstration的模式是否会有影响,包括:1、只有Input Text()没有label():此时所有input text进行拼接;2、只有Label()没有Input Text():此时所有label进行拼接;实验结果如下所示:1、当去掉Input Text或Label后,发现与No Demonstrate的结果相比没有明显的提升,说明Demonstration的指令形式是很重要的(即Label和Input Text 缺一不可);2、对比之前的结论,可以推论出,宁愿Label是错误的,也不能没有。紧接着探索输入句子(Input Text)与任务的分布差异是否有影响,即如果将输入句子换成其他任务的句子,是否会影响模型做出决策。给定 个句子,这 个句子是从其他任务的训练集(不同于当前任务) 随机采样得到的。Label依然来自于当前任务空间,Demonstration的指令模式保持不变。因此,输入句子的分布是与当前task不同的。从实验结果来看,部分情况下影响还是有的,说明输入样本在语义空间内的分布是会影响ICL的结果。更多分析可阅读博主的博文:[In-Context Learning] Rethinking the Role of Demonstrations: What Makes In-Context Learning Work?[41]
训练阶段使用MOE进行预训练。预训练语料:BOOK-CORPUS plus Wikipedia, CC-NEWS, OPENWEB- TEXT, and STORIES。分别对每个语料抽取100k句子(STORIES只抽取10k)。最终大约有100w个句子,每个类型的self-supervised task平均25w个样本。作者在很多任务上进行了实验,这里只展示SuperGLUE上的效果,可以发现引入ICL自监督训练是可以大大提升效果的。
Scaling up model size alone has not proved sufficient for achieving high performance on challenging tasks such as arithmetic, commonsense, and symbolic reasoning.
期望探索如何对大模型进行推理的简单方法:
对于算术类推理任务,期望生成自然语言逻辑依据来指导并生成最终答案;但是获得逻辑依据是比较复杂昂贵的。It is costly to create a large set of high quality rationales, which is much more complicated than simple input–output pairs used in normal machine learning
对某个task,为大模型提供一些上下文in-context example作为prompt;简单的示例可能并非能够提升推理能力。It works poorly on tasks that require reasoning abilities, and often does not improve substantially with increasing language model scale
因此,提出 思维链(Chain-of-Thought) 。思维链的定义如下: A chain of thought is a series of intermediate natural language reasoning steps that lead to the final output, and we refer to this approach as chain-of-thought prompting.直观理解很简单,思维链是一种特殊的In-Context Learning,对于每个挑选的In-Context Example,除了给出Input-Output Mapping外,还需要给出一个推理过程,称为Relationale或Reasoning Path,其是一个具有逻辑推理过程的短文本,如下图蓝色部分。通过引入推理路径作为提示,可以激发大模型按照这种推理的模式生成出合理的结果,引导大模型如何思考、如何推理。下面介绍几个经典的CoT方法:
1、Self-consistency Improves Chain Of Thought Reasoning in Language Models[48]
4、Least-to-Most Prompting Enables Complex Reasoning in Large Language Models[51]
最近CoT的提出进一步拉近了人类与机器智能的距离,通过natural language rationales和self-consistency来提升大模型在推理任务上的性能。然而CoT依然存在一些不足:即其很难对超出demonstration example难度程度的问题进行解答。为此,该工作尝试将一个复杂的任务分解为若干简单的子任务。在对每个子问题进行预测时,是一个渐近的过程。
参考文献:[1]【预训练语言模型】Attention Is All You Need(Transformer): https://blog.csdn.net/qq_36426650/article/details/112222115[2]【预训练语言模型】BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(BERT): https://blog.csdn.net/qq_36426650/article/details/112223838[3]《Language Models are Few-Shot Learners》(NIPS2020): https://proceedings./paper/2020/hash/1457c0d6bfcb4967418bfb8ac142f64a-Abstract.html[4]《Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference》(EACL2021): https:///10.18653/v1/2021.eacl-main.20[5]PET的论文解读: https://wjn1996.blog.csdn.net/article/details/120788059[6]PTR: Prompt Tuning with Rules for Text Classification: https:///abs/2105.11259[7]论文解读:PTR: Prompt Tuning with Rules fo Text Classification: https://wjn1996.blog.csdn.net/article/details/120256178[8]《AutoPrompt: Eliciting Knowledge from Language Models with Automatically Generated Prompts(EMNLP2021): https:///2020.emnlp-main.346.pdf[9]《Making Pre-trained Language Models Better Few-shot Learners》(ACL2021): https:///10.18653/v1/2021.acl-long.295[10]论文解读:Making Pre-trained Language Models Better Few-shot Learners(LM-BFF): https://wjn1996.blog.csdn.net/article/details/115640052[11]《The Power of Scale for Parameter-Efficient Prompt Tuning》: https:///2021.emnlp-main.243.pdf[12]《GPT Understands, Too》: https:///pdf/2103.10385[13]《PPT: Pre-trained Prompt Tuning for Few-shot Learning》: https:///2022.acl-long.576.pdf[14]论文解读:GPT Understands, Too: https://wjn1996.blog.csdn.net/article/details/120802305[15]《RLPROMPT: Optimizing Discrete Text Prompts with Reinforcement Learning》: https:///pdf/2205.12548.pdf[16]《Knowledgeable Prompt-tuning: Incorporating Knowledge into Prompt Verbalizer for Text Classification》: https:///2022.acl-long.158.pdf[17]《Prototypical Verbalizer for Prompt-based Few-shot Tuning》: https:///2022.acl-long.483.pdf[18]论文解读:Knowledgeable Prompt-tuning: Incorporation Knowledge into Prompt Verbalizer for Text Classification: https://wjn1996.blog.csdn.net/article/details/120790512[19]《PromptBERT: Improving BERT Sentence Embeddings with Prompts》: https:///pdf/2201.04337[20]《TransPrompt: Towards an Automatic Transferable Prompting Framework for Few-shot Text Classification》: https:///2021.emnlp-main.221.pdf[21]《Adapting Language Models for Zero-shot Learning by Meta-tuning on Dataset and Prompt Collections》: https:///2021.findings-emnlp.244.pdf[22]UNIFIEDQA: Crossing format boundaries with a single QA system: https:///2020.findings-emnlp.171.pdf[23]ProQA- Structural Prompt-based Pre-training for Unified Question Answering: https:///2022.naacl-main.313.pdf[24]《Unifying Question Answering, Text Classification, and Regression via Span Extraction》: https:///pdf/1904.09286[25]Global Pointer: https:///archives/8373[26]《Entailment as Few-Shot Learner》(EFL): https:///pdf/2104.14690.pdf[27]NSP-BERT: https://blog.csdn.net/qq_36426650/article/details/122255324[28]CLIP: https://zhuanlan.zhihu.com/p/512546830[29]Adapter-Tuning: http://proceedings./v97/houlsby19a.html[30]Prefix-Tuning: https:///2021.acl-long.353.pdf[31]BitFit: https:///2022.acl-short.1.pdf[32]P-tuning V2: https://blog.csdn.net/qq_36426650/article/details/120806554[33]《UniPELT: A Unified Framework for Parameter-Efficient Language Model Tuning》: https:///2022.acl-long.433.pdf[34]《Delta Tuning: A Comprehensive Study of Parameter Efficient Methods for Pre-trained Language Models》: https:///2022.acl-long.433.pdf[35]《LiST: Lite Prompted Self-training Makes Parameter-efficient Few-shot Learners》: https:///2022.findings-naacl.174.pdf[36]《Making Parameter-efficient Tuning More Efficient: A Unified Framework for Classification Tasks》: https:///2022.findings-naacl.174.pdf[37]《P-Adapters- Robustly Extracting Factual Information from Language Models with Diverse Prompts》: https:///forum?id=DhzIU48OcZh[38]《Context-Tuning: Learning Contextualized Prompts for Natural Language Generation》: https:///2022.coling-1.552.pdf[39]《Rethinking the Role of Demonstrations: What Makes In-Context Learning Work?》: https:///2022.emnlp-main.759.pdf[40]《Ground-Truth Labels Matter: A Deeper Look into Input-Label Demonstrations》: https:///2022.emnlp-main.155.pdf[41]【In-Context Learning】Rethinking the Role of Demonstrations: What Makes In-Context Learning Work?: https://blog.csdn.net/qq_36426650/article/details/129818361?spm=1001.2014.3001.5501[42]《What Makes Good In-Context Examples for GPT-3?》: https:///2022.deelio-1.10.pdf[43]《Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity》: https:///2022.acl-long.556.pdf[44]【In-Context Learning】What Makes Good In-Context Examples for GPT-3?: https://wjn1996.blog.csdn.net/article/details/129816707?spm=1001.2014.3001.5502[45]《Improving In-Context Few-Shot Learning via Self-Supervised Training》: https:///2022.naacl-main.260.pdf[46]《Meta-learning via Language Model In-context Tuning》: https:///10.18653/v1/2022.acl-long.53[47]《MetaICL: Learning to Learn In Context》: https://github.com/facebookresearch/MetaICL[48]Self-consistency Improves Chain Of Thought Reasoning in Language Models: https:///abs/2203.11171[49]Large Language Models are Zero-Shot Reasoners: https:///abs/2205.11916[50]Automatic Chain of Thought Prompting in Large Language Models: http:///abs/2210.03493[51]Least-to-Most Prompting Enables Complex Reasoning in Large Language Models: https:///abs/2205.10625
END
研讨会预告
研讨会上新!「LLM 及生成式 AI 行业应用在线研讨会零售数智化专场」将于4月17日正式开讲。NVIDIA 零售 IBD 任建斌、解决方案架构师张然及跃迁引擎联合创始人&COO 王盛三位主讲人将分别带来主题演讲,扫码报名!