大模型入门 | Prompt Tuning技术综述(三)Prompt-Tuning的本质

第四章:Prompt-Tuning的本质

涉及知识点:

  • 元学习与prompt;

  • 基于Prompt的NLP任务的统一范式;

  • 基于生成模型的Prompt;

  • Prompt与参数有效性学习;

前面章节介绍了大量与Prompt相关的内容,我们可以发现,最初的Prompt Tuning是旨在设计Template和Verbalizer(即Pattern-Verbalizer Pair)来解决基于预训练模型的小样本文本分类,然而事实上,NLP领域涉及到很多除了分类以外其他大量复杂的任务,例如抽取、问答、生成、翻译等。这些任务都有独特的任务特性,并不是简单的PVP就可以解决的,因而, 我们需要提炼出Prompt Tuning的本质,将Prompt Tuning升华到一种更加通用的范式上

博主根据对Prompt-Tuning两年多的研究经验,总结了三个关于Prompt的本质,如下:

  • Prompt的本质是一种对任务的指令;

  • Prompt的本质是一种对预训练任务的复用;

  • Prompt的本质是一种参数有效性学习;

4.1 Prompt是一种针对任务的指令

Prompt本质上是对下游任务的指令,可以作为一种信息增强

简单的来说,就是告诉模型需要做什么任务,输出什么内容。上文我们提及到的离散或连续的模板,本质上就是一种对任务的提示。当数据集不同(乃至样本不同)的时候,我们期望模型能够自适应的选择不同的模板,这也相当于说不同的任务会有其对应的提示信息。

例如在对电影评论进行二分类的时候,最简单的提示模板是“. It was [mask].”,但是其并没有突出该任务的具体特性,我们可以为其设计一个能够突出该任务特性的模板,例如“The movie review is . It was [mask].”,然后根据mask位置的输出结果通过Verbalizer映射到具体的标签上。这一类具备任务特性的模板可以称之为 指令(Instruction)

下面展示几个任务设计的指令模板:

看似设计指令是一件容易的事情,但是在真实使用过程中,预训练模型很难“理解”这些指令,根据最近研究工作发现,主要总结如下几个原因:

  • 预训练模型不够大 :我们常使用的BERT-base、BERT-large、RoBERTa-base和RoBERTa-large只有不到10亿参数,相比于现如今GPT-3、OPT等只能算作小模型,有工作发现,小模型在进行Prompt Tuning的时候会比Fine-tuning效果差,是因为小模型很容易受到模板的影响

对比一下传统的Fine-tuning,每个样本的输入几乎都是不同的,然而基于Prompt的方法中,所有的样本输入都会包含相同的指令,这就导致小模型很容易受到这些指令带来的干扰。

  • 缺乏指令相关的训练 :这些小模型在预训练阶段没有专门学习过如何理解一些特殊的指令。

我们回顾一下上面章节,不论是生成离散的模板还是连续的模板,都是在向现有的预训练语言模型进行“妥协”,即找到能够让当前预训练语言模型在小样本上效果最好的模板,或者说是站在已有预训练模型的基础上寻找模板。然而这种寻找到的模板不可读也不可解释,或者过于通用,不具备任务特性,无法很好地在真实场景下使用。因此,我们需要的是先设计好任务相关的指令,使得这些指令是可读的,可在真实场景下使用的。不过由于预训练模型没见过这些指令,所以很难在小样本上快速理解它们。

也许读者想到了前面所讲到的Pre-trained Prompt Tuning(PPT),即再次对预训练语言模型进行一次Continual Pre-training。然而我们忽略了一点,即 我们期望预训练模型不止是在我们已经设计好的指令上进行学习,还应该在未知的指令上具备一定的泛化性能 ,也就是说在一个完全新的任务上,只需要少量样本(甚至是零样本),也能过很好地理解这个指令。

为了达到这个目的,最常用的方法是 元学习(Meta Learning) ,我们介绍几个代表性的工作:

  • 《TransPrompt: Towards an Automatic Transferable Prompting Framework for Few-shot Text Classification》:代表方法TransPrompt,利用迁移学习提升预训练语言模型在不同类型任务上的泛化性能;

  • 《Adapting Language Models for Zero-shot Learning by Meta-tuning on Dataset and Prompt Collections》:代表方法:MPT,统一分类任务范式,并采用元学习进行训练;

TransPrompt

该方法是面向连续提示模板的,其对P-tuning做了如下几个改进:

  • 引入Cross-task Learning :原来P-tuning只对单一任务进行Prompt Tuning,而TransPrompt则对同一类别多个任务进行Cross-task Learning。例如情感分析有SST-2、MR和CR三个任务,则为每一个任务设计一个Task-specific Prompt Encoder。为了捕捉任务之间的共同知识,也额外设计以恶搞Universal Prompt Encoder。

在训练过程中,所有任务的数据集样本直接混合起来,每一个样本都会对应一个任务的标记。在喂入模型时,一个batch内会有来自多个任务的样本,根据任务类型的标记,分别使用对应的Task-specific Prompt Encoder来表征连续的模板,所有的样本都喂入Universal Prompt Encoder以获得通用的连续模板。

  • 引入去偏(De-basing)技术 :不论是小样本还是全量数据,即便是统计分布上完全一致,不同的任务的难易程度是不一样的,因此模型在训练的时候可能极易偏向于一些简单任务。为了确保任务之间训练的平衡性,引入两个去偏技术,分别是Prototypical-based Debiasing和Entropy-based Debiasing,具体的做法详见原文。
Meta Prompt Tuning(MPT)

该方法是面向离散的提示,其主要关注于文本分类任务,但是不同的是,其对分类的范式进行了一些转换,将所有分类任务定义为“Yes/No”问题,下面对比一下两种不同的范式:

传统的多类分类范式:假设一个分类任务有 个类别, 一般情况下, 一个句子 将会对应一个样本 , 其中 是 类中的一个; Yes/No分类范式:假设一个分类任务有 个类别, 将每一个句子和类别作为一个整体, 来判断它们之间是否匹配, 即, 得到一个新的样本 。这样的话, 一个句子 将会对应 个样本。基于Yes/No 范式, 不论类别有多少, 都可以转换为统一的Yes/No 分类,从而不同类别的分类任务也可以混合起来进行训练。

在转换范式的时候, 会发现输入的句子需要融合标签, 因此需要涉及到为不同标签设计对应的指令。如下图所示, 对于情感分析任务, 输入的句子是 “ 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的超大规模多任务训练奠定基础,但是其缺点也很突出,即需要为不同任务不同类别设计对应的指令。

4.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的先验知识在不同的下游任务上获得更好的表现?是否可以设计一个全新的预训练任务来满足一些下游任务的需求呢?

我们介绍两个充分利用这个思想的方法:

  • 万物皆可生成 :将所有任务统一为文本生成,极大化利用单向语言模型目标;

  • 万物皆可抽取 :将所有任务统一为抽取式阅读理解,并设计抽取式预训练目标;

  • 万物皆可推理 :将所有任务建模为自然语言推断(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》、《ProQA- Structural Prompt-based Pre-training for Unified Question Answering》,其采用端到端的预训练语言模型(例如BART、T5),并复用预训练阶段的训练目标。

最近大火的ChatGPT则是基于“万物皆可生成”的思想,将单向语言模型的ALM发挥到极致,实现对所有任务的大一统,与之为代表的还有In-Context Learning、Instruction-Tuning和Chain-of-Thought,将在第5章节介绍。

(2)万物皆可抽取——基于抽取式阅读理解的Prompt范式统一

基于生成的方法存在两个缺点:

  • 必须让待生成的部分置于文本末尾,此时会约束指令和模板的设计,不利于灵活运用;

  • 由于是开放式生成,生成的内容无法控制,且依赖于文本的长度等;

  • 对于一些具有条件限制的任务,例如多项选择、信息抽取等,生成的内容或许不符合这些条件。例如在做实体抽取的时候,需要确保生成的实体是在文本中出现的。

为此,“万物皆可抽取”的思想可以解决此类问题,其思想指将所有自然语言理解任务转换为抽取式阅读理解的形式,下面给出形式化的定义:

抽取式阅读理解 (Extractive MRC) : 给定一个问题 (Question) ,一篇文章或文本(Passage) ,其中 分别表示 Question 和Passage 的 token, 分别表示 Question 和Passage 的长度。任务的目标是根据 Question,在Passage 中寻找一个区间 start: end] 作为答案 start end

除了抽取式阅读理解任务外,其他NLP任务如何转换为这个形式呢?本质上还是在如何设计模板和指令。下面给出几个事例:

可以发现,如果是分类型的任务,只需要通过指令和模板的形式将所有类别罗列起来即可。在训练时,可以采用两种方法:

  • 设计抽取式预训练目标,在无标注语料上进行自监督训练;

  • 按照阅读理解的形式统一所有任务范式,并混合所有任务进行Cross-task Learning,再在新的任务上进行测试。

经典的方法比如《Unifying Question Answering, Text Classification, and Regression via Span Extraction》,苏剑林提出的Global Pointer。博主也运用该思想在2022年AIWIN春季赛“中文保险小样本”中获得第二名成绩。

基于MRC的范式统一方法则是提出新的预训练目标——区间抽取,并巧妙的集成了一些比较复杂的任务,例如实体识别,同时抽取式方法也可以很好地运用在多标签分类问题上,同理,实体识别和多区间抽取QA也属于类似多标签问题,即需要抽取出数量不等的区间。但是缺点是无法运用到生成问题上,且依赖于候选项。

(3)万物皆可推理——基于NLI的Prompt范式统一

另外一个方法则是将所有任务建模为NLI形式,其与上文介绍的MPT比较类似,除了MPT以外,《Entailment as Few-Shot Learner》(EFL)和NSP-BERT也是类似的方法,其思想是复用BERT中的Next Sentence Prediction(NSP)的预训练目标。下面给出几个事例:

通常可以直接使用NSP对应的LMhead进行微调,在训练过程中还需要考虑如何进行负采样,一般方法是直接选择其他类别作为负样本。

例如一个分类问题中有 个类别。给定一个句子有对应 个正确的类别 (ground truth) , 当 时就是单标签的分类, 则是多标签分类。那么每个句子就可以得到 个正样本 (即输入句子与对应标签是蕴含关系的) 和 个负样本。在训练的时候, 则可以构建一个句子-类别矩阵 , 其中 表示第 个句子与第 个类别是否存在蕴含关系。

下图给出传统Fine-tuning(图(a))、基于MLM的Prompt-Tuning(图(b))和基于NLI的Prompt-Tuning(图(c))的对比:

可以发现,两种Prompt-Tuning方法的共同点是都是复用了预训练阶段所使用的目标和参数,不同点是对任务建模的方式和指令模板的设计有所不同。在复用NSP时,则需要罗列所有的类别并与输入样本做拼接,从而将多类分类问题转换为判断输入与标签是否存在蕴含关系(Entailment)。

另外,该思想也在最近大火的多模态模型CLIP模型中应用,通过设计Prompt的形式对文本和图像进行匹配,并设计对比学习目标进行预训练。

4.3 Prompt的本质是参数有效性学习

根据前文的讲解,我们可以发现,实现Prompt-Tuning只需要考虑如何设计模板或指令,而模型和训练目标则都是复用预训练阶段的,即在整个训练过程中,无须添加任何参数(或只需要添加非常少量的与模板有关的参数),而其他参数都是训练好的。基于这个思想,我们再一次将Prompt升华到更高的层面—— Prompt的本质是参数有效性学习(Parameter-Efficient Learning,PEL)

参数有效性学习的背景 :在一般的计算资源条件下,大规模的模型(例如GPT-3)很难再进行微调,因为所有的参数都需要计算梯度并进行更新,消耗时间和空间资源。为了解决这个问题,参数有效性学习被提出,其旨在确保模型效果不受太大影响的条件下尽可能地提高训练的时间和空间效率。参数有效性训练 :在参数有效性学习过程中,大模型中只需要指定或额外添加少量的可训练参数,而其余的参数全部冻结,这样可以大大提高模型的训练效率的同时,确保指标不会受到太大影响。

常见经典的参数有效性学习有Adapter-Tuning、Prefix-Tuning、BitFit。下面进行简单的介绍。

(1)Adapter-Tuning

Adapter-Tuning在2019年提出,其面向预训练语言模型的参数有效性学习。在多层Transformer模型中,在微调过程中所有的参数都需要更新,显然并不是有效的。为了提高效率,该方法提出固定Transformer的全部参数,然后在Transformer的每一个Block里嵌入一些新初始化的Adapter Network。如下图所示:

Adapter位于Feed-Forward Layer之后、残差连接之前。Adapter本质上就是两层MLP,分别负责将Transformer的表征降维和升维(右图)。基于Adapter的方法, 只需要添加不到5%的可训练参数,即可以几乎达到全参数训练的效果 ,在训练过程中大大节省了训练时间,做到时间有效性。因此在真实场景应用时, 不同的任务我们不需要重新对整个预训练模型进行微调,我们只需要保存Adapter即可 ,而预训练模型的其他参数都是原始预训练的,这样就做到了空间的有效性。

(2)Prefix-Tuning

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,不同之处在于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》提出将这些参数有效性方法进行统一,提出UniPELT框架:

(3)BitFit

BitFit的思想更简单,其不需要对预训练模型做任何改动,只需要指定神经网络中的偏向(Bias)为可训练参数即可,BitFit的参数量只有不到2%,但是实验效果可以接近全量参数。

介绍了上述的一些参数有效性方法,我们发现,Prompt-Tuning也符合其主旨。基于参数有效性的思想,也有许多工作致力于Prompt与参数有效性的结合,例如《Delta Tuning: A Comprehensive Study of Parameter Efficient Methods for Pre-trained Language Models》、《LiST: Lite Prompted Self-training Makes Parameter-efficient Few-shot Learners》、《Making Parameter-efficient Tuning More Efficient: A Unified Framework for Classification Tasks》、《P-Adapters- Robustly Extracting Factual Information from Language Models with Diverse Prompts》、《Context-Tuning: Learning Contextualized Prompts for Natural Language Generation》,由于相关工作非常多而且更新频繁,这里不一一介绍。


最后分享

AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。

学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。

这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享

1. 成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
在这里插入图片描述

2. 大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础(书籍含电子版PDF)

在这里插入图片描述

3. 大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

在这里插入图片描述

4. 大模型项目实战

学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

在这里插入图片描述

5. 大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

在这里插入图片描述

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以微信扫描下方CSDN官方认证二维码,免费领取【保证100%免费

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值