虽然GPT在传统的预训练微调方面并没有在自然语言理解任务上达到最好的效果, 但是当使用我们提出的P-tuning方法时,便可以与BERT相媲美。P-tuning是一种新的微调方法,其使用可训练的连续空间内的prompt embeddings。在knowledge probing和superGLUE benchmark上得以提升。最重要的是,我们发现P-tuning也可以让BERT在小样本和监督学习上得以提升。且P-tuning可以在superGLUE的小样本任务上达到SOTA。
简要信息:
序号 | 属性 | 值 |
1 | 模型名称 | P-tuning |
2 | 所属领域 | 自然语言处理;文本分类 |
3 | 研究内容 | 预训练语言模型;Prompt框架 |
4 | 核心内容 | Prompt-based Fine-tuning |
5 | GitHub源码 | https://github.com/THUDM/P-tuning |
6 | 论文PDF | https://arxiv.org/pdf/2103.10385.pdf |
核心要点:
- template的构建:在离散的template上对部分token替换为可在连续空间微调的pseudo token;
- 离散和连续的template token混合时,发现显式地插入一些anchor(领域有关的离散token)可以有助于template的优化;
一、动机
- 语言模型可以在预训练阶段学习到上下文的表征信息,也包括其他方面的知识,例如语法、常识或者世界知识等。
- 现如今预训练模型包括三种类型,分别是以GPT为代表的单向模型,以BERT为代表的双向模型,以及以XLNet为代表的混合模型(单双向复合);
- GPT3于2020年下半年提出,其能够在少量样本甚至是0样本情况下获得较好的效果。其主要依赖于提出的新的微调范式(prompt-based和in-context learning)。这表明,即便是单向模型,如果使用合适的人工构建的prompt模板也是可以达到很好的自然语言理解目的;
GPT模型包含巨大规模的参数,使得其很难被迁移,也很难被落地使用
- 然而,如何选择handcrafted prompt temporary如同大海捞针,而且需要大量的验证集,同时也可能导致陷入局部最优。先前工作(包括chengdanqi的LM-BFF)致力于解决离散提示模板(discrete prompt temporary)的自动生成问题,然而作者认为,神经网络是连续的,离散的prompt会导致局部最优。
- 同时作者发现,prompt模板发生细微的改变,都会对最终的结果产生戏剧性的变化。例如在knowledge probing任务中,可以生成一个文本提示模板,但是究竟哪一个模板合适?作者发现模板中增删一个token就会产生很大的性能差异。(这一部分与chengdanqi的LM-BFF的发现一样)
In this work, we propose a novel method– P-tuning– to automatically search prompts in the continuous space to bridge the gap between GPTs and NLU applications.1 P-tuning leverages few continuous free parameters to serve as prompts fed as the input to the pre-trained language models. We then optimize the continuous prompts using gradient descent as an alternative to discrete prompt searching.
- 作者还发现,GPT并非只能生成数据,而无法实现自然语言理解,语言模型是包含许多世界知识和先验知识。
综合上述,作者提出了新的方法P-tuning:
二、方法:P-tuning
在一般场景下,给定一个token序列,通过随机MASK若干个token,并进行自监督训练,预测MASK部分的词;在预测阶段(例如分类),则输入的是整个文本序列,预测[CLS]对应的类别。
如果在prompt-based场景下,则通常将下游任务转化为Mask Language Model任务,因此此时不需要引入额外的参数,但需要明确一个prompt模板。作者认为一个模板 就可以表示为一个token序列: 中的pseudo token序列进行表征,则可以使用梯度下降法更新连续的参数。
另外作者发现,加入一些anchor可以提升效果。理解为加入一些比较有代表性的token可以显示让模型知道预测的意图。
- 先前的prompt generator是通过decoder等方法直接生成出显式的token词,然后将这些token对应的embedding喂入到BERT中参与微调。
- 而P-Tuning的思路应该是不显式的生成这些prompt temporary具体的token词,而是在generator之前的encoder表征的向量来代替这些词,这样在BERT微调的时候可以让这些temporary也跟着微调,达到作者所谓的differential,可以传梯度了。
P-tuning的具体代码细节可以简单描述为:
- 输入一个句子,以及预先设计的一个离散的模板:
The Disney film is good! It was [MASK].
;
- 先使用BERT的分词工具分词,并获得input ids、position ids、attention masks等;
- 对输入的template中,挑选一个(或多个)token作为pseudo token:
The Disney film is good! [pseudo] was [MASK].
其初始化可以直接使用原本的token embedding;
- 对所有的pseudo token
三、实验
4.1 knowledge probing (知识探索)
典型代表是LAMA数据集,根据知识库中结构化三元组(事实)构建的完形填空类型的数据。例如三元组(Dante, born in, Florence)可以转化为一个完型填空句子“Dante was born in [MASK]”,语言模型则可以通过MLM来预测[MASK]标记对应的词
(1)设置
- 作者首先使用LAMA-34k,其词汇包含了BERT的所有词汇,但与GPT有差异,作者又使用了LAMA-29K,则包括了GPT和BERT词汇的交集;
- 作者根据AutoPrompt工作,在TRE-x数据集上训练了prompt seaching模块;
- 在评估阶段,对于双向的语言模型(BERT),使用(3,sub,3,obj,3)模板,在单向语言模型(GPT),使用(3,sub,3,obj)模板,数字表示的是模板prompt的token数量。在本任务中,不使用anchor token
(2)分析
作者对传统的fine-tuning和p-tuning进行了对比。选择四个对比模型(MP:manual prompt、FT:fine-tuning、MP+FT、P-tuning),发现P-tuning超过了另外三个基线,且在BERT和GPT上均达到最好。作者认为:
- fine-tuning在微调时更新了所有模型参数,而P-tuning并不更新参数;
- fine-tuning会导致灾难性遗忘,而P-tuning因为不更新参数,而是寻找一个更好的连续的模板;
- 作者发现P-tuning与单向语言模型更有亲和力(affinity);
4.2 SuperGLUE
(1)设置
- SuperGLUE中包含8个自然语言理解(NLU)任务,作者只使用7个。在fully supervision和few-shot 两个setting下完成实验,前者则使用所有训练集,后者则使用32个训练集,并选择32个样本作为验证集(与chengdanqi的设置相似)
- 在NLU任务上,首先在不同位置初始化prompt的embedding,并与预训练模型一同微调;
(2)分析
- 在fully supervision任务上(如上表Table3/4),p-tuning比其他方法好,而且发现在p-tuning方法之下,GPT比BERT更优;
- 在few-shot任务上(如上表Table6),P-tuning比当前最好的PET模型在各个数据集上均得到很大的提升。结果表明few-shot效果与prompt的语义、形式、语法没有明显的关系;微小的变化可能造成实质性性能的差异
- Table5表明了P-tuning相比现有的模型PET均有很好的表现,验证了在few-shot情境下,P-tuning相比人工选择模板来说,更加有效