当前位置:   article > 正文

[论文笔记]GPT Understands, Too_2021.3, gpt understands, too

2021.3, gpt understands, too

[论文笔记]GPT Understands, Too

​ 本文提出一种方法P-Tuning用于增强预训练模型在NLU任务中的能力,采用可训练的连续的prompt方式,放弃了"模板由自然语言构成"这一常规要求,从而将离散模板的选择转化为连续参数的优化问题

动机

  • GPT在微调的NLU任务上表现不好

  • 神经网络本身是连续的,离散的prompt可能次优的

离散prompt 一般是基于自然语言的模板,或者是自动搜索离散的prompt

ps: 先前自动搜索离散的prompt的工作包括挖掘训练语料mining training corpus和梯度搜索gradient search的方法

实验表明
  1. NLU方面,GPT可以和BERTs一样具有竞争力(有时会更好),P-tuning可以提高预训练语言模型的性能
  2. P-tuning是一种改善在小样本或者全监督下的GPTs和BRETs下的通用方法
  3. 显式地插入一些anchor(领域有关的离散token)可以有助于template的优化

方法

​ P-Tuning v1将自然语言提示的token,替换为可训练的嵌入,同时利用LSTM进行Reparamerization加速训练,并引入少量自然语言提示的锚字符(Anchor,例如Britain)进一步提升效果

本图为了方便理解,论文中并未使用[u]*

模型
image-20220324100056287

​ 在一般场景下,给定一个token序列,通过随机MASK若干个token,并进行自监督训练,预测MASK部分的词;在预测阶段(例如分类),则输入的是整个文本序列,预测[CLS]对应的类别。
​ 如果在prompt-based场景下,则通常将下游任务转化为Mask Language Model任务,因此此时不需要引入额外的参数,但需要明确一个prompt模板。

​ 传统的使用离散的prompt搜索方法是直接将模板T的每个token映射为对应的embedding,然后为整个模板生成一个得分。

定义
  1. 将输入文本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,(0i<m)xi),则称为soft prompt(文中称为Pseudo token)

  2. 随机初始化Pseudo token

架构
  1. 随机初始化Pseudo token经过 一个 LSTM 层 和 两个前馈层,生成表示Pseudo token的新向量 h i h_i hi

作者认为这部分Pseudo token也存在序列关系,因此使用双向LSTM对模板T中的pseudo token序列进行表征(认为LSTM输出的TOKEN之间关联更强),使得输入的序列更接近"自然语言",而苏剑林老师的认为在这里使用LSTM不够优雅,但是更好的做法是应该同时做其他token的预测

image-20220324162424671

预训练模型将新生成的Prompt向量 h i h_i hi、上下文向量的嵌入表示 e ( x ) e(x) e(x)和目标向量的嵌入表示 e ( y ) e(y) e(y)作为输入

优化
  1. 利用Loss函数差异优化 h i h_i hi

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))

推理
  1. LSTM和前馈层被丢弃,因为我们需要的是最终生成且经过良好训练的prompt token embeddings h i h_i hi

    image-20220324175348522

代码实现流程

注意! 代码和论文不一致,暂时不学习实验结果

  • 输入一个句子,以及预先设计的一个离散的模板: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;

    1. 不确定,按照苏老师的说法,模板中,除了MASKED位置,都应该被[pseudo],即The Disney film is good! [pseudo] was [MASK].

    2. 应该同时做其他token的预测

  • 对所有的pseudo token $ P_i 喂 入 一 层 L S T M , 并 获 得 每 个 p s e u d o t o k e n 输 出 的 隐 状 态 向 量 喂入一层LSTM,并获得每个pseudo token输出的隐状态向量 LSTMpseudotoken h_i$$

  • 将整个句子喂入BERT embedding layer,对于pseudo token部分的token embedding,则使用
    h i h_i hi进行替换,最后喂入MLM中获得[MASK]位置的预测结果。

QA

1. 目标token如“体育”标记为masked,那么它们可不可以也用[unused]的token代替呢?*

​ 答案是可以,但也分两种情况考虑:1、在标注数据比较少的时候,人工来选定适当的目标token效果往往更好些;2、在标注数据很充足的情况下,目标token用[unused*]效果更好些,因为这时候模型的优化空间更大一些。

随机初始化+梯度传回来 小, 为什么梯度传回来小,

P-tuning的效果很好,之前的Prompt模型都是主打小样本效果,而P-tuning终于在整个数据集上超越了精调的效果:

疑问
  1. 显式地插入一些anchor(领域有关的离散token)可以有助于template的优化
  2. 损失函数
引用苏剑林老师的想法

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/858071
推荐阅读
  

闽ICP备14008679号