(Paper Weekly03) GPT Understands, Too: P-tuning
GPT Understands, Too
(什么,GPT也可以拿来做NLU?)
本文提出了一种全新的fine-tune方法:P-tuning,并比大小接近的BERT模型上取得了相近甚至更好的表现。P-tuning的motivation其实很简单,既然可以通过离散的prompt来做NLU任务,那么连续的prompt是不是能达到更好的效果。
两个motivation如下:
- finetune大模型非常困难。大模型的迁移泛化能力(transferbility)很差,而且当模型过大时,显存开销是个很大的问题。P-tuning并不需要对参数进行更新,真正会被训练到的参数大概只有预训练模型的1%
- 人工编写的prompt准确率无法保证,一般来说任何人造的prompt能提取到的知识都是预训练模型中知识的下界。
之前的工作中,针对prompt的生成方法有两种:
- Mining-based生成:利用中间词或使用依存树分析
- Paraphasing-based生成:利用back-translation
Ranked Ensemble
P-tuning
传统的prompt会根据人工选择的词将其映射到对应的词向量上,而p-tuning的做法是直接优化隐状态。
这里的e(x)是通过embedding层得到的vector表示,h代表的是可训练的embedding向量。作者在优化一节中详细描述了得到h的过程。
如果h的初始化使用简单的独立随机采样,那么可能在优化中可能表现不佳,作者认为这是由SGD带来的,隐向量可能只在初始化附近小幅度的变化,很容易落到local minima中。
此外,还需解决不同的隐状态向量之间的依赖关系。本文采用bi-LSTM进行建模,相较transformers引入的overhead较小。
此外,作者还发现在prompt中加入一些anchor词的embedding可以改善模型在NLI部分benchmarks上的表现。
Experiments
本文在两个task上进行了实验。
Task 1 Knowledge Probing
由于bert和GPT的词汇表不太一样,作者重新构造了一个新的数据集LAMA-29K,在这个数据集上对于各种模型使用P-tuning都能带来不小的改进;在模型参数量过大以至于无法进行fine-tune的MegatronLM模型上使用P-tuning达到了新的SOTA。
Task 2 SuperGLUE
第二个TASK作者使用了superGLUE(不知道为什么不用GLUE),并使用参数量接近的GPT2-base和BERT-base作对比,可以发现P-tuning对GPT的提升幅度是比较显著的,虽然和MP相比提升不是特别明显。吐槽:70出头的avg score可以说是baseline中的baseline了,目前superGLUE的SOTA都在90+,差距还是比较明显。当然superGLUE并不是最契合p-tuning的情景,所以苛求表现好像也不太公平。