P-Tuning:GPT Understands, Too
2103.10385v2
摘要
用自然语言模式Prompting(提示)预先训练的语言模型已被证明对自然语言理解(NLU)是有效的。然而,我们的初步研究表明,手动离散prompts(提示)往往会导致性能不稳定——例如,在提示中改变一个单词可能会导致性能的显著下降。我们提出了一种新的P-Tuning微调方法,该方法采用了可训练的连续prompt(提示)embeddings与离散prompts连接。根据经验,P-Tuning不仅通过最小化各种离散提示之间的差距来稳定训练,而且在包括LAMA和SuperGLUE在内的广泛NLU任务上显著提高性能。在完全监督和few-shot设置下,P-Tuning对于冻结和调优的语言模型通常都是有效的。
导言
离散提示的问题
实验指出,离散提示已经在一些NLP任务上取得了持续和实质性的改进。然而,如何编写高性能的离散提示仍然是一个具有挑战性的问题。
通过挖掘训练语料库、基于梯度的搜索和使用预先训练的生成模型来自动化离散提示的搜索过程。这些实现是寻找性能更好的提示,但不改变离散提示的不稳定性的性质。除了不稳定性问题之外,在离散空间中的搜索可能不能充分利用来自反向传播的梯度,这可能会导致次优解。为此,我们探讨了训练连续提示以稳定和提高语言模型适应性能的可能性。
P-Tuning
形式上,设$M$是一个预先训练的语言模型,隐藏层大小为$h$,词汇量大小为$|V|$。设${(x_i,y_i))}i$是一个NLU任务的标记数据集,其中$x{0:n} = {x_0,x_1,...,x_n}$是由一系列离散标记组成的输入,$y∈Y$是一个标签。我们的目标是估计分类$f_M(x)=\hat{p}(y|x)$的条件概率,$M$的参数不是微调就是冻结。
提示以离散令牌的格式提出,设$[D_i ]$是一个离散的提示符标记。每个提示符都可以被描述为一个模板
$T={[D_{0:i}],x,[D_{(i+1):j}],y,[D_{(j+1):k}]}$
它可以将标记的数据(包括输入x和标签y)组织成一系列文本标记,这样任务就可以重新表述为填充输入文本的空白。例如,对于预测一个国家的首都的任务(LAMA-TREx P36),一个提示可以是“The capital of [INPUT] is [LABEL]“。用一块贴有标签的数据“(英国,伦敦)”,重新制定的文本将是“The capital of Britain is [MASK].”,其中“[MASK]”应该预测给定的标签“London”。离散提示和离散数据一起映射到输入嵌入中:${e(D_0)...e(D_i), e(x_0), ..., e(x_n), ..., e(D_k)}$通过预先训练好的嵌入层,其中$e∈ R ^{|V|×d}$。
这种离散提示往往非常不稳定,对于反向传播可能不是最优的。因此,我们提出了P-Tuning使用连续提示嵌入来改进和稳定的prompting。设$[P_i]$为第i个连续的提示符嵌入。P-Tuning的提示模板如下:
$T = {[P_{0:i} ], x, [P_{(i+1):j} ], y, [P_{(j+1):k}]}$
P-Tuning利用了一个额外的嵌入函数$f: [P_i ]→h_i$来将模板映射到
${h_0, ..., h_i , e(x), h_{i+1}, ..., h_j , e(y), h_{j+1}, ..., h_k}$
最后,我们更新了嵌入${P_i}^k_{i=1}$,以优化任务损失函数。
值得注意的是,我们还可以将离散提示与连续提示连接起来,这种提示的性能更好,在我们的实验中都被采用。P-Tuning适用于frozen(冻结)和finetuned(微调)的语言模型。

提示搜索的一个例子“The capital of Britain is [MASK]”,给到上下文(蓝区,Britain)和目标(红区,“[MASK]”),橙色区域表示prompt(提示符)。在(a)中,提示生成器只接收离散的奖励;相反,在(b)中,the continuous prompt embeddings and prompt encoder(连续的提示嵌入和提示编码器)可以以一种可微的方式进行优化

Last updated