1 引言
Bert时代,我们常做预训练模型微调(Fine-tuning),即根据不同下游任务,引入各种辅助任务loss和垂直领域数据,将其添加到预训练模型中,以便让模型更加适配下游任务的方式。每个下游任务都存下整个预训练模型的副本,并且推理必须在单独的批次中执行。
那么能不能将所有自然语言处理的任务转换为语言模型任务?就是所有任务都可以被统一建模,任务描述与任务输入视为语言模型的历史上下文,而输出则为语言模型需要预测的未来信息。
因此,Prompt新范式被提出,无需要fine-tune,让预训练模型直接适应下游任务。Prompt方式更加依赖先验,而 fine-tuning 更加依赖后验。
2 P-tuning
P-tuning有两个版本:
- 论文GPT Understands, Too[2]中的Prompt tuning,在本文行文过程中称为P-tuning v1。
GitHub 代码:https://github.com/THUDM/P-tuning
- P-Tuning v2在论文《P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks》中提出。
GitHub代码:https://github.com/THUDM/P-tuning-v2
2.1 prefix-tuning
如果分析 P-tuning,那不得不提到prefix-tuning技术,相对于fine-tuning,在调节模型的过程中只优化一小段可学习的continuous task-specific vector(prefix)而不是整个模型的参数。
对于不同的任务和模型结构需要不同的prefix:
-
在autoregressive LM 前添加prefix获得: