P-Tuning v2: Prompt Tuning Can B
prompt-tuningv1当模型尺寸较小时,尤其是小于100亿个参数时,它仍然表现不佳。
P-tuning v2 是优化版本 of prefix-tuning,起源于使用deep prompt tuning, 在预训练模型的每一层使用 continuous prompts ,Deep prompt tuning 增加了continuous prompts的容量也缩小了在各种设置中进行微调的差距,尤其是对于小型模型和复杂任务
- Simple NLU tasks involve classification
简单的NLU任务涉及分类在一个标签上
之前的工作
手动构造在词汇表中提取 "IT" , "is" , "[MASK]"
input embedding 可以表示为
但依旧是 discrete natural prompts,使用prompt-learning后
因此这样就可以differentially optimized
- Hard sequence NLU tasks
涉及一系列标签的分类,开放式信息提取,命名实体识别、抽取式问答和语义角色标记。
缺乏跨尺度的普遍性 当模型扩展到100亿个参数以上时,prompt-tuning可以与fine-tuning相媲美。但对于那些较小的型号(从100M到1B),prompt-tuning和fine-tuning的性能之间存在显著差异,这大大限制了prompt-tuning的适用性。
任务之间缺乏普遍性 ,v1只适用于简单的NLU任务
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。
1. Deep Prompt Tuning
不同层中的提示作为前缀token加入到输入序列中,并独立于其他层间(而不是由之前的transformer层计算)一方面,通过这种方式,P-tuning v2有更多的可优化的特定任务参数(从0.01%到0.1%-3%),以允许更多的每个任务容量,而它仍然比完整的预训练语言模型小得多
另一方面,添加到更深层的提示可以对输出预测产生更直接和重大的影响,而中间的transformer层则更少
1.1 重新参数化
对于NLU任务,这种技术的好处取决于任务和数据集。对于一些数据集(如RTE和CoNLL04),MLP的重新参数化带来了比嵌入更稳定的改善;对于其他的数据集,重新参数化可能没有显示出任何效果(如BoolQ),有时甚至更糟(如CoNLL12)
1.2 提示长度优化
不同的理解任务通常用不同的提示长度来实现其最佳性能
1.3 多任务学习优化
在一些困难的序列任务中,多任务学习可以作为P-tuning v2的有益补充,表示为MPT-2
2. 实体识别(CoNLL03、OntoNotes 5.0、CoNLL04):
任务旨在对每个token进行分类,并输出对应的标签;
Multi-task版本:三个task混合起来进行训练,并分别对应一个分类器,continuous prompt及其参数则共享;
实验结果如下:
3. 结论
P-tuning在复杂的NLU任务上效果很差;
P-tuning V2可以与传统Fine-tuning有差不多的效果;
Multi-task P-tuning V2效果更好,分析认为可能是变相的数据增强带来的影响。