赞
踩
本文提出一种方法P-Tuning用于增强预训练模型在NLU任务中的能力,采用可训练的连续的prompt方式,放弃了"模板由自然语言构成"这一常规要求,从而将离散模板的选择转化为连续参数的优化问题
GPT在微调的NLU任务上表现不好
神经网络本身是连续的,离散的prompt可能次优的
离散prompt 一般是基于自然语言的模板,或者是自动搜索离散的prompt
ps: 先前自动搜索离散的prompt的工作包括挖掘训练语料mining training corpus
和梯度搜索gradient search
的方法
P-Tuning v1将自然语言提示的token,替换为可训练的嵌入,同时利用LSTM进行Reparamerization加速训练,并引入少量自然语言提示的锚字符(Anchor,例如Britain)进一步提升效果
本图为了方便理解,论文中并未使用[u]*
在一般场景下,给定一个token序列,通过随机MASK若干个token,并进行自监督训练,预测MASK部分的词;在预测阶段(例如分类),则输入的是整个文本序列,预测[CLS]对应的类别。
如果在prompt-based场景下,则通常将下游任务转化为Mask Language Model任务,因此此时不需要引入额外的参数,但需要明确一个prompt模板。 传统的使用离散的prompt搜索方法是直接将模板T的每个token映射为对应的embedding,然后为整个模板生成一个得分。
将输入文本x、真实标签y(输入时被替换为[MASK])和Prompt组合成一个模板 T
T
=
{
[
P
0
:
i
]
,
x
,
[
P
i
+
1
:
m
]
,
y
}
T = \{[P_{0:i}], \mathbf{x}, [P_{i+1:m}], \mathbf{y}\}
T={[P0:i],x,[Pi+1:m],y}
这个模板的创建是灵活的,要添加多少提示标记以及如何确定这些标记的位置可以自己确定\
P i , ( 0 ≤ i < m ) 下 文 x i 默 认 此 范 围 ) , P_i,_{(0 \leq i<m)}下文x_i默认此范围), Pi,(0≤i<m)下文xi默认此范围),则称为soft prompt(文中称为Pseudo token)
随机初始化Pseudo token
作者认为这部分Pseudo token也存在序列关系,因此使用双向LSTM对模板T中的pseudo token序列进行表征(认为LSTM输出的TOKEN之间关联更强),使得输入的序列更接近"自然语言",而苏剑林老师的认为在这里使用LSTM不够优雅,但是更好的做法是应该同时做其他token的预测
预训练模型将新生成的Prompt向量 h i h_i hi、上下文向量的嵌入表示 e ( x ) e(x) e(x)和目标向量的嵌入表示 e ( y ) e(y) e(y)作为输入
h ^ 0 : m = arg min h L ( M ( x , y ) ) \hat{h}_{0: m}=\underset{h}{\arg \min } \mathcal{L}(\mathcal{M}(\mathbf{x}, \mathbf{y})) h^0:m=hargminL(M(x,y))
LSTM和前馈层被丢弃,因为我们需要的是最终生成且经过良好训练的prompt token embeddings h i h_i hi
注意! 代码和论文不一致,暂时不学习实验结果
输入一个句子,以及预先设计的一个离散的模板: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].
其初始化可以直接使用pseudo token原本的token embedding;
不确定,按照苏老师的说法,模板中,除了
MASKED
位置,都应该被[pseudo]
,即The Disney film is good! [pseudo] was [MASK].
应该同时做其他token的预测
对所有的pseudo token $ P_i 喂 入 一 层 L S T M , 并 获 得 每 个 p s e u d o t o k e n 输 出 的 隐 状 态 向 量 喂入一层LSTM,并获得每个pseudo token输出的隐状态向量 喂入一层LSTM,并获得每个pseudotoken输出的隐状态向量 h_i$$
将整个句子喂入BERT embedding layer,对于pseudo token部分的token embedding,则使用
h
i
h_i
hi进行替换,最后喂入MLM中获得[MASK]位置的预测结果。
1. 目标token如“体育”标记为masked,那么它们可不可以也用[unused]的token代替呢?*
答案是可以,但也分两种情况考虑:1、在标注数据比较少的时候,人工来选定适当的目标token效果往往更好些;2、在标注数据很充足的情况下,目标token用[unused*]效果更好些,因为这时候模型的优化空间更大一些。
随机初始化+梯度传回来 小, 为什么梯度传回来小,
P-tuning的效果很好,之前的Prompt模型都是主打小样本效果,而P-tuning终于在整个数据集上超越了精调的效果:
P-tuning并不是随机初始化几个新token然后直接训练的,而是通过一个小型的LSTM模型把这几个Embedding算出来,并且将这个LSTM模型设为可学习的。原论文大概的意思是:LSTM出现的token表示相关性更强,某种程度上来说更像“自然语言”(因为自然语言的token之间不是独立的),此外还能防止局部最优。我在Github上进一步向作者确认了一下(参考这里),效果上的差别是通过LSTM多绕一步的方法可以使得模型收敛更快、效果更优。
然而,这样多了一个LSTM,总感觉有些别扭,而且实现上也略微有点麻烦。按照作者的意思,LSTM是为了帮助模版的几个token(某种程度上)更贴近自然语言,但这并不一定要用LSTM生成,而且就算用LSTM生成也不一定达到这一点。笔者认为,更自然的方法是在训练下游任务的时候,不仅仅预测下游任务的目标token(前面例子中的“很”、“新闻”),还应该同时做其他token的预测。
比如,如果是MLM模型,那么也随机mask掉其他的一些token来预测;如果是LM模型,则预测完整的序列,而不单单是目标词。这样做的理由是:因为我们的MLM/LM都是经过自然语言预训练的,所以我们(迷之自信地)认为能够很好完成重构的序列必然也是接近于自然语言的,因此这样增加训练目标,也能起到让模型更贴近自然语言的效果。经过笔者的测试,加上这样辅助目标,相比单纯优化下游任务的目标,确实提升了效果。
参考资料
https://kexue.fm/archives/8295
https://zhuanlan.zhihu.com/p/400790006
https://www.jianshu.com/p/8e2a957f068b
http://www.phpheidong.com/blog/article/174792/25fe57c49b7280bd2280/
https://mp.weixin.qq.com/s/EvD9OW115XMnrxOcC2BKDA
https://blog.csdn.net/qq_36426650/article/details/120802305
https://blog.csdn.net/qq_43183860/article/details/120753558
https://baijiahao.baidu.com/s?id=1695551335236626340&wfr=spider&for=pc
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。