Prompt:The Fourth Paradigm for NLP

前言

      自从bert发展以来,NLP在通过pre-training,fine-tuning的方式在各种任务上都刷新了SOTA,但是预训练模型在预训练过程是不考虑下游任务的,这造成了预训练模型与下游任务天然的gap。而这种模式,下游任务通过不使用预训练模型的最后一层,通常会加入和任务相关的网络层以及对应的损失函数,这样不能充分挖掘预训练模型的能力。Prompt作为NLP新的范式,有望解决这一困境。

Prompt介绍

      其实Prompt并不陌生,我们使用搜索引擎的时候,在输入部分内容,搜索引擎会自动提示一下内容,这就是Prompt。如下图所示:

图片

下面我们给出Prompt在NLP领域的定义:

      Prompt is a cue given to the pre-trained language model to allow it better understand human's questions

一个比较技术的定义是:

图片

Prompt流程

      Prompt的操作与之前的基于bert范式的fine-tuning不同,Prompt需要通过模板对输入数据进行重构,这样会把预测的内容也嵌入到输入数据中,这样就可以使用类似MLM的方法进行学习label了。

大致分为如下四个步骤

lStep1:Prompt Construction

lStep2:Answer Construction

lStep3:Answer Prediction

lStep4:Answer-Label Mapping

我们以一个情感分析的例子说明一下这四个步骤的具体操作:

Input: x= l love this movie

label:y=☺

      在监督学习中是一个二分类问题,给定一段描述,然后判断这个描述的情感类型,那么这个问题使用Prompt如何操作呢?

Step1:首先在Prompt Construction阶段需要制定一个模板,比如模板是这样:

Template:[x] Overall,it was a [z] movie

[x]是输入数据的占位符,[z]是预测label的占位符。如果我们使用l love this movie对[x]进行填充,那么就完成了Prompt Construction的工作了,具体形式如下:

Prompting: x′= l love this movie.Overall, it was a [z]movie.

图片

Step2:预训练模型通常学习的是有语义的label答案,如果我们任务的label仅仅是一些无意义的标签,比如A类、B类,这个时候通常需要构造无意义标签与有语言label之间的映射关系,这就是Answer Construction。本例子中可以做如下映射关系:

图片

通常answer的词会有很多个,

Step3:这个步骤的主要作用就是使用预训练模型预测[z]。因此选择合适的预训练模型非常重要。假设已经选择了一个预训练模型,如果预测的结果是fantastic,那么就使用fantastic填充[z],流程如下图所示:

图片

Step4:这个步骤是把step3预测得到的[z],根据step2定义的Answer Construction来进行fantastic=> ☺的映射,完整的过程如下图所示:

图片

以上就是完整的Prompt操作流程,下面总结一下涉及到的数学符合

Terminology

Notation

Example

Input  

x  

I  love this movie

Output  (label)

y  

☺ 

Template  

-  

[x]  Overall, it was a [z] movie

Prompt  

x’  

I  love this movie. Overall, it was a [z] movie

Answer  

z  

fantastic,  boring

思考:

上述情感分析的例子在传统监督学习与Prompt有什么区别呢?

图片

      从上图可以看出,在这个任务上,其实传统的监督学习方法操作流程更简单,然而Prompt方法更可以充分挖掘预训练语言模型的知识能力,GPT3就是一个很好的例子。

Prompt设计要点:

lPrompt Template Engineering

lAnswer Engineering

lPre-trained Model Choice

lExpanding the Paradigm

lPrompt-based Training Strategies

      从上图传统方法与Prompt方法对比图来看,Prompt方法在Template设计、Answer构建以及预训练模型选择都需要人工参与,这也是Prompt设计的关键要点。

Prompt Template Engineering

图片

Answer Engineering

图片

Pre-trained Model Choice

图片

Expanding the Paradigm

图片

Prompt-based Training Strategies

       在基于 prompt的下游任务学习中,通常存在两种类型的参数,即来自预训练模型和prompt的参数。哪类参数应该更新是一项重要的设计决策,可以在不同场景中产生不同程度的适用性。

       研究者基于底层语言模型的参数是否需要调整、是否有额外的prompt参数和这些额外的prompt参数是否需要调整这三个方面总结以下5 种调整策略,如下表 6 所示,它们分别为:

图片

GPT3的一些思考:

图片

从GPT3给出的一些答案来看,预训练语言模型是有一些知识的,

Facebook 2019(LAMA:) 论文《langauge models as knowledge base?》通过知识图谱与语言模型的对比,证明了语言模型中包括大量的知识信息。

图片

图片

AutoPrompt

      上述介绍的Prompt流程,需要大量的人力去构建Template,然后算法对Template的格式非常敏感,如下表所示,尽管他们在人看来语义是比较接近的,但是P@1指标波动很大。

图片

《AutoPrompt: Eliciting knowledge from languagemodels with automatically generated prompts (Shin+, 2020)》提出了一种自动构建Template的方法

图片

核心思想:通过梯度找出的trigger word和mask拼接在文本中,形成一个语义上不通顺、但是对模型而言却具有合理提示的样本,并且将label预测转换为masked token的预测(即完形填空问题)

基本步骤是:

1.将所有triggertoken初始化为mask token;

2.对某个trigger进行替换,找出前k个最大化输入与其梯度乘积的词:

3.对每个候选词,评估其加入prompt后的模型预测概率;

4.通过形如{sentenct}[T][T][T][T][T][P]的模版,加入上面选出的词构造prompt。

P-tuning

       不管是人工构建Template还是AutoPrompt方法,token都来自字典,有一个问题:Template真的需要是“自然语言”吗?

       其实我们只需要知道模版由哪些token组成,该插入到哪里,插入后能不能完成我们的下游任务,输出的候选空间是什么

图片

       论文《GPTUnderstands, Too》提出了名为P-tuning的方法,成功地实现了模版的自动构建。

       The capital of Britain is [MASK] 是很典型的一个LAMA的模板;蓝色的Britain是上下文context,红色的[MASK]是目标target;而橙色的thecapital of ... is ...是prompt tokens。

      论文中黄色字体的Prompt embedding是通过BiLSTM来学习的,目的是学习这些Prompt token之间的相互关系,如下图所示:

图片

      模型训练结束后,会把红色框中的MLP和LSTM删除掉,inference的时候不使用,只保留离预训练模型最近的一层向量。

P-tuning:

精髓一:自动化地寻找连续空间中的知识模板;

精髓二:训练知识模板,但不fine-tune语言模型。

P-tuning数学描述如下:

图片

图片

P-tuning实验效果:

图片

P-tuning VS fine-tuning

图片

结论如下:

lfine-tuning: 随着模型规模的增大,提升逐渐饱和;

lprompt tuning: 随着模型规模的增大,性能提升与数量级基本呈现线性增长

图片

lP-tuning for GPT
– 显著提升GPT在NLU上的性能
– 同时提升BERT在NLU上表现

The Limitation of PromptTuning& P-tuning 

n缺少通用性

lP-tuning匹敌fine-tuning要求
        – 10B左右或更高的参数量
        – 特殊的初始化技巧(label initialization)
        – LMadaptation 

l如何惠及1亿~10亿中小规模的模型? 

n缺少任务通用性

l简单任务:GLUE& SuperGLUE
         – P-tuning表现良好

l困难任务:需要知识和长文本理解
        – 序列标注:命名实体识别,阅读理解……

l更现实的问题:无含义标签
        – 不是所有任务的标签都有语义
        – 序列标注中难以利用语义标签

P-tuning V2

      论文《P-Tuning v2:Prompt Tuning Can Be Comparable to Fine-tuningUniversally Across Scales and Tasks》提出P-Tuning v2方法在Prefix-Tuning(专门为NLG)的基础上做了一些改进,使得更适配NLU场景。

图片

特点:

– 去除重参数化编码器

– 在Transformer的每一层都加入了Prompt 向量

– 放弃语言标签,回归[CLS]和token标签+MLP

– (可选)多任务学习

图片

n保持预训练模型参数冻结

–P-tuning v2:仅使用0.1%的参数,在330M~10B规模均与fine-tune匹敌
       –Prompt tuning & P-tuning:仅在10B规模与fine-tune匹敌

The Four Paradigms for NLP

图片

图片

      从NLP四种范式的发展规律来看,预训练语言模型与下游任务的距离越来越近了,甚至在Prompt范式预训练语言模型与下游任务几乎是一起的,充分挖掘了预训练语言模型的能力。

how can PLMs adapt to different NLP tasks?

      在多任务或者基于预训练语言模型在不同的下游任务进行fine-tuning,发现都会取得不错的效果,然而随着预训练语言模型的参数量越来越大,使得fine-tuning的耗时越来越多,甚至像GPT3这么大的模型几乎无法fine-tuning。

       论文《Exploring Low-dimensional Intrinsic Task Subspace via Prompt Tuning 》提出一种假设,不同的子任务在预训练语言模型上进行fine-tuning都会取得不错的效果,那么这些任务是否存在共性呢?比如都是基于一个公共的向量或者矩阵,然后进行不同的映射来得到不同子任务fine-tuning之后的参数呢?

        本论文就是基于这样的思想:假设这样的低纬向量存在,然后使用auto-encoder来寻找这样的低纬向量和映射矩阵,固定好映射矩阵,在每个不同的任务上只fine-tuning这个低纬向量,然后乘以映射矩阵即可,这样fine-tuning的参数量就大幅减少了。

图片

图片

图片

图片

数学描述如下:

图片

实验结果如下:

nPhase 1: Multi-task SubspaceFinding (MSF)

Find the intrinsic task subspace with multiple tasks’ prompts with an auto-encoder

nPhase 2: Intrinsic subspace Tuning(IST)

Tune parameters only in the subspace and then recover them to soft prompts with the back-projection function

图片

nEvaluation Metric:

图片

nDuring MSF, test the recovering performance for soft prompts.

nDuring IST, test the performance on seen data, unseen data, and unseen
tasks.

nExperiments:

lTraintaskset: 100 few-shot NLP tasks; Test task set: 20 few-shot NLP tasks

从实验效果来看,Di=3的时候,训练时就可以恢复1.09倍的性能。

OpenPrompt

介绍一个Prompt的开源框架OpenPrompt

nOpenPrompt:《A Unified Prompt-learningProgramming Framework》

lModularity,Flexibility,Uniformity

https:/github.com/thunlp/OpenPrompt

架构如下图所示:

图片

操作步骤示例如下:

nStep1:Define a task

图片

nStep2:Define a Pre-trained Language Models(PLMs) as backbone

图片

nStep3:Define a Template

图片

nStep4:Define a Verbalizer(optional)

图片

nStep5:Define a PromptModel

图片

图片

nStep6: Train and Inference

图片

猜你喜欢

转载自blog.csdn.net/wshzd/article/details/121036358
NLP