论文解读:P-Tuning v2: Prompt Tuning Can Be Comparable to Finetuning Universally Across Scales and Tasks
P-tuning等方法的提出,避免了人工构建离散的template,而让模型可以自动学习continuous embedding,然而P-tuning在一些复杂的自然语言理解(Natural Langauge Understanding, NLU)任务上效果很差。因此本文基于P-tuning和Prefix-tuning,拓展提出p-tuning的V2版本模型——P-tuning V2,并引入Deep Prompt Encoding和Multi-task Learning。
简要信息:
序号 | 属性 | 值 |
---|---|---|
1 | 模型名称 | P-Tuning V2 |
2 | 所属领域 | 自然语言处理;自然语言理解; |
3 | 研究内容 | 预训练语言模型;Prompt框架 |
4 | 核心内容 | Prompt-based Fine-tuning |
5 | GitHub源码 | https://github.com/THUDM/P-tuning-v2 |
6 | 论文PDF | https://arxiv.org/pdf/2110.07602.pdf |
核心要点:
- 在原始P-tuning基础上,提出deep prompt tuning,对pseudo token采用更深的表征,该方法可以视为Prefix-tuning的拓展版本(Prefix-tuning本身用于生成任务,作者将其拓展为NLU任务);
一、动机
- Fine-tuning需要微调整个预训练语言模型,且额外添加了新的参数,而Prompting则可以将整个预训练语言模型的参数保持固定,而只需要添加prompt来预测结果即可;因此无需微调,但容易陷入局部最优;
- Prompt-tuning则是将Prompt加入到微调过程中,此时只对Prompt部分的参数进行训练,而语言模型的参数固定不变。例如,在P-tuning中引入continuous template,此时template是连续可微调的token,而不是离散的token,模型可以学习一个pseudo token;
但发现P-tuning等Prompt-tuning方法在一些自然语言理解(NLU)任务中(例如抽extractive QA、序列标注等),基于普通的预训练语言模型,现有的prompting工作推理能力十分有限; - 因此本文提出P-tuning-V2模型(对Prefix-tuning的扩展),发现稍微改进优化后的prompt-tuning依然可以达到与传统Fine-tuning一样甚至更好的效果;提出Deep Prompt Tuning,进一步对pseudo continuous embedding进行深度表征:
Deep prompt tuning increases the capacity of continuous prompts and closes the gap to finetuning across various settings, especially for small models and hard tasks.
如下图(RTE、BoolQA、CB验证集的平均准确率):
当预训练语言模型的参数很少时,P-tuning效果显然很差,而只有当参数规模达到100亿时,才勉强达到Fine-tuning效果。
二、方法:
2.1 P-tuning
如上图,输入一个句子,设计一个template,其包含pseudo token,对这部分token使用LSTM进行表征,并替换原始的pre-trained model word embedding后,得到:
[ e ( x ) , h 0 , ⋯ , h i , e ( [ M A S K ] ) ] [\mathbf{e}(\mathbf{x}), h_0, \cdots, h_i, \mathbf{e}([MASK])] [e(x),h0,⋯,hi,e([MASK])]
将其喂入MLM,MLM输出[MASK]位置的概率分布,根据verbalizer给出label word以及对应的class预测概率。
然而P-tuning其存在两个问题:
- Fail to work well on small models:发现当预训练语言模型的参数量低于100亿时,Prompt-tuning会比传统的Fine-tuning差;
But for those smaller models (from 100M to 1B), there is a significant discrepancy between performances of prompt tuning and fine-tuning.
- Fail to work well on hard NLU tasks:发现像序列标注等对推理和理解要求高的任务,prompt-tuning效果会变差;
2.2 Deep Prompt Tuning
先前的P-tuning用了一层BiLSTM来表征pseudo token,显然是推理能力不足的原因之一,因此该部分提出Deep Prompt Tuning,替换原来的BiLSTM而使用Prefix-tuning中的深层模型,如下图:
P-tuning V2相比P-tuning,区别在于:
- 取消了reparamerization:对pseudo token,不再使用BiLSTM或MLP进行表征,且不再替换pre-trained model word embedding,取而代之的是直接对pseudo token对应的深层模型的参数进行微调;
- Multi-task learning:对于pseudo token的continous prompt,随机初始化比较难以优化,因此采用multi-task方法,具体实现相见实验部分;
- P-tuning V2无需verbalizer,而完全变为生成模型,可以在[CLS]部分输出sentence-level class,以及每个token位置上输出token-level class。
三、实验
挑选部分NLU task,包括:
- GLUE(SST-2、MNLI-m);
- SuperGLUE(RTE、BoolQ、CB);
- 实体识别(CoNLL03、OntoNotes 5.0、CoNLL04);
- ExtractiveQA(SQuAD1.1、SQuAD2.0);
- Semantic Role Labelling(CoNLL05、CoNLL12)。
Baseline选择:
- PT-2:本文提出的P-tuning V2;
- MPT-2:本文提出的P-tuning V2,并采用Multi-task learning方法;
- PT:P-tuning;
- FT:传统的Fine-tuning方法;
3.1 Across Scales
- Prompt-tuning/P-tuning方法在参数规模小的语言模型上,效果低于传统的Fine-tuning;
- P-tuning V2则不论在小模型还是大模型上,均可以提升;
- 当选择100亿参数规模的语言模型时,P-tuning V2基本可以与传统的Fine-tuning保持相当水平;
3.2 Across Tasks
挑选几个比较复杂的任务:
(1)实体识别(CoNLL03、OntoNotes 5.0、CoNLL04):
- 任务旨在对每个token进行分类,并输出对应的标签;
- Multi-task版本:三个task混合起来进行训练,并分别对应一个分类器,continuous prompt及其参数则共享;
- 实验结果如下:
(2)ExtractiveQA(SQuAD1.1、SQuAD2.0):
- 任务旨在给定question和passage,从passage中抽取一个span text作为答案。本文视为一种序列标注任务,每个位置token输出start和end的概率;
- Multi-task版本:直接将两个task训练数据混合起来,且不考虑unanswerable情况;(问题:SQuAD1.1和2.0有很多是重复的)
- 实验结果如下:
(3)Semantic Role Labelling(CoNLL05、CoNLL12):
- 任务旨在给定一个句子,对句子中的word或phrase标注语义角色(semantic role);
Multi-task版本:三个task混合起来进行训练,并分别对应一个分类器,continuous prompt及其- - 参数则共享; - 实验结果如下:
(4)结论:
- P-tuning在复杂的NLU任务上效果很差;
- P-tuning V2可以与传统Fine-tuning有差不多的效果;
- Multi-task P-tuning V2效果更好,分析认为可能是变相的数据增强带来的影响。