6

Prompt learning系列之prompt engineering(三) 连续型prompt自动构建

 2 years ago
source link: https://mp.weixin.qq.com/s?__biz=MjM5ODkzMzMwMQ%3D%3D&%3Bmid=2650429811&%3Bidx=3&%3Bsn=ab6ca60add56c38810dac63f6e761f45
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Prompt learning系列之prompt engineering(三) 连续型prompt自动构建

AINLP 2022-04-04 13:47
640?wx_fmt=jpeg

提纲

1 简介
2 Prefix Tuning

    2.1 Prefix-Tuning

    2.2 Prompt tuning

    2.3 Frozen

3 Tuning Initialized with Discrete Prompt

    3.1 OPTIPROMPT

    3.2 Soft

     3.3 WARP

4. Hard-Soft Prompt Hybrid Tuning

    4.1 P-tuning 

    4.2 PTR

1 简介

    前面一章我们已经提到过关于离散型prompt的自动构建,离散型prompt的问题在于如果想利用梯度回传的方式寻找最优prompt的时候,会遇到不可导的问题,这个问题只能通过近似的方法去解决,这也会影响最终的结果。由于构建prompt的目的是为了寻找一种方式让语言模型能在特定任务下保持有效,需要构建的是语言模型能够理解的prompt,所以没有必要把prompt限制在人类可以理解的语言,也就是之前讨论的离散型prompt。基于此,有不少自动构建连续型prompt的方法被提出,直接在模型的词嵌入空间里构建prompt(prompt用连续型的向量表示),那么本章节就围绕着这些方法展开。可以这样认为,离散化prompt是由token构建的,人一眼就可以明白这个prompt的意思,但是连续型prompt是通过向量来表示的,已经是人肉眼无法理解的。但是即便是离散型prompt,通过神经网络的嵌入层也会被转化为向量,语言模型其实能理解这些连续型的向量表示,所以无论离散型prompt还是连续型prompt,模型都是可以理解的。

2 Prefix Tuning

    在序列前加入相关的连续型prompt,微调这些prompt相关的参数,通过这些prompt去管控模型的行为。

2.1 Prefix-Tuning[1]

    相对于Fine-tuning,对于每个下游任务都要去更新模型的全部参数,同时保留多个不同参数的模型,Prefix-tuning通过在输入序列中加入跟任务相关的向量,只训练这部分任务相关的向量,保持语言模型的参数不变,这种方式可以实现多个下游任务只需要多个任务相关的向量跟一份语言模型的参数就可以。

640?wx_fmt=png

图1: Fine-tuning vs Prefix-tuning

    假设源文本是x,目标文本是y,通过语言模型,可以得到各个位置的隐状态h。对于Prxfix-tuning,就是想构建跟任务相关的向量,加到各个网络层中去。对于自回归模型,可以将prefix加到序列前,得到z=[prefix; x; y],对于encoder-decoder模型,可以分别在encoder跟decoder前加入prefix,得到[prefix1; x; prefix2; y]。这里的prefix的长度可以自定义,但是宽度必须要跟语言模型隐状态的维度保持一致,这种才能将prefix跟序列[x;y]经过语言模型得到的隐状态拼接到一起。可以理解Prefix-tuning在语言模型的每一层都插入了跟任务相关的向量,然后通过语言模型的训练目标去优化这些跟任务相关的参数,保持语言模型的参数不变。在实际使用中,发现直接对prefix相关参数直接优化会导致不稳定和性能下降,为此在训练阶段将任务相关的参数套了层MLP(推理的时候不需要用到)。在推理阶段,根据当前场景在语言模型各层插入对应的特定任务的向量,通过这些训练好的prefix参数去管理模型的行为,让模型更好地预测结果。

640?wx_fmt=png

图2: Prefix-tuning

640?wx_fmt=png

图3:优化函数

    Prefix-tuning有几个重要结论,

    a) 更长长度prefix意味着更多的训练参数,从而带来更强大的表达能力。

    b) 只在嵌入层插入prefix的效果不如每个网络层都插入prefix,同时只在嵌入层插入prefix的效果优于离散型prompt的方法。

    c) 在输入序列前插入prefix的效果优于在输入序列中间插入prefix,也就是[prefix;x;y]的方式优于[x;prefix;y]。这是因为[prefix;x;y]中的prefix能影响到x,y的激活值,但是[x;prefix;y]只有y的激活值会被prefix影响。

    d) 用真实token带出初始化prefix的方式优于随机初始化prefix。

2.2 Prompt tuning[2]

    跟Prefix tuning想法很接近,但是只在嵌入层插入任务相关的参数,然后训练时只更新这部分的参数,保持语言模型的参数不变。比起Prefix tuning每层都有任务相关的参数,Prompt tuning这种只在嵌入层插入prompt的方式需要新增更少的参数量。Prompt tuning的部分结论跟prefix tuning一致。需要补充的是,实验发现使用那些跟目标相关的token来进行初始化的方式最合适。另外,训练任务选择合适的语言任务相关也很重要,用自回归任务训练更新的prompt会优于自重建任务更新的。

640?wx_fmt=png

图4: Prompt tuning实验结果

2.3 Frozen[3]

    这是一种多模态的方法,训练一个encoder来将图片编码到一个特定向量,以此作为prompt插入到自回归语言模型来生成更合适的图片说明,Frozen在包括图片问答等few shot场景下的效果表现良好。

    Frozen其实就是想利用图片来构建相应的prompt,它的做法是通过一个encoder对图片进行编码,然后通过一个矩阵乘法将编码得到的结果转换为n*D的连续型prompt。这里的D是transformer的词嵌入的维度,这种就可以把图片构建的prompt和文本直接拼接到一起,n可以理解为prompt的长度,是一个超参数,n的大小会影响模型的效果,这在前面两种方法Prefix-tuning跟Prompt-tuning也提到过。训练过程是将图片构建得到的prompt跟文本拼接到一起后,输入transformer去生成相应的图片描述,训练目标是使得生成的图片描述文本概率最大化。这个过程只优化用于图片编码的encoder跟将编码结果转化为D*n维prompt的矩阵这些参数,不更新语言模型transformer相关的参数。在推理阶段,除了可以利用Frozen来生成图片相关的描述外,还能利用图片构造的prompt跟问题拼接在一起输入,来完成图片问答或者图片分类等任务。

640?wx_fmt=png

图5:Frozen的推理过程

    Frozen跟前面两种方法不同,前面两种方法训练得到的prompt都是跟任务相关的,但是Frozen却是跟样本相关的,因为每个样本都有独自的图片,进而拥有独立的prompt。另外,这种方式其实跟Prompt-tuning很像,都是只在嵌入层插入跟词嵌入维度一样的连续型prompt,只是Frozen的prompt是通过图片生成的。

3 Tuning Initialized with Discrete Prompt

    通过手工构造prompt或者自动构建离散型prompt去初始化连续型prompt的方法

3.1 OPTIPROMPT[4]

    OPTIPROMPT受到自动构建离散型AUTOPROMPT的启发,利用人工构造的prompt来初始化连续型prompt,连续型prompt的初始化采用人工构建的prompt对应的token的词嵌入,同时连续型prompt的长度跟位置取决于人工构建的prompt。完成初始化后,训练时固定语言模型参数,只更新连续型prompt的词嵌入表示。

3.2 Soft[5]

    Soft是一个混合模型,相比之前的模型,它考虑到模版权重,认为对于不同的输入,应该赋予模版不同的权重。对于一个关系三元组(x,r,y),x是实体头部,r是关系,y是实体尾部,在给定x,r的基础上去推断y。之前的方法都是构造一个合适的模版,将x,r转换为一个合适的完形填空格式,去预测y。Soft则不然,它会构造一个prompt集合,在给定x跟r的条件下去计算各个prompt的权重,然后在乘上在给定x和prompt的下预测到y的概率。也就是它会根据x跟r去选择一个合适的模版去赋予更高的权重,然后更加依赖于这个prompt的预测结果。这里如何给模版分配权重也是神经网络学习的。所以Soft总共有两部分参数需要更新,一部分是连续型的prompt的参数,另一部分是给不同prompt分配权重的模型参数。为了同时优化这两部分参数,Soft采用了跟EM算法等价的训练方法,在E阶段去优化prompt权重的后验函数,在M阶段通过梯度去更更新prompt的参数。

3.3 WARP[6]

    之前的方法我们都是只优化prompt的参数,WARP在这个基础引入答案相关的参数。例如对于分类任务而言,如果采用prompt的方法,我们会把输入转换为带[MASK]的完形填空格式,然后预测[MASK]位置上的token,预测的结果跟哪个类别最相关就认为输入属于哪个类别。WRAP则在用连续型的向量来表征不同的类别,将prompt的结果跟代表类别的向量做点积,然后选择其中最大的对应的类别作为预测结果。模型训练的目标函数如图所示,其中P是跟prompt相关的参数,V是跟答案相关的参数,这两部分参数都是需要更新优化的。

640?wx_fmt=png

图6: WARP的训练目标

4. Hard-Soft Prompt Hybrid Tuning

    比起只用到纯粹的可学习的prompt模版,这些方法还会插入一些可训练的词嵌入参数到prompt模版中。

4.1 P-tuning[7]

    P-tuning是在离散型prompt的基础上改进的,构造离散型prompt后,可以通过一个encoder(这里采用的是双向LSTM)获得离散型prompt的token对应的表征,然后去替换原本的离散型prompt(图中的P),这样就获得连续型的prompt(图中的h),训练过程通过梯度可以去同时去优化encoder跟离散型prompt的参数。在推理阶段可以直接用到连续型prompt的结果(训练好encoder后,可以将离散型prompt输入encoder就得到连续型prompt的参数了),将其插入到序列中即可。除此之外,P-tuning还引入了跟任务相关的anchor token插入到模版中,这些token在训练过程不会更新参数,这个技巧进一步提高模型在NLU任务的效果。

640?wx_fmt=png

图7: P-tuning的框架

4.2 PTR[8]

    PTR的想法非常直观,就是通过逻辑规则将人工构建的子prompt组合成完整的prompt。举个例子,对于关系分类任务,如果我们要判断一个句子是否包含“person: parent”的关系,我们需要判断两个条件,其一是两个被标记的实体是否代表人,其二是这两个被标记的实体之间是否是父子关系。所以PTR通过人工构建子prompt,包括判断实体是否代表人的prompt,判断实体关系的prompt等等,然后把这些子prompt组合起来,构建一个完整的prompt,就可以去完成上述例子的任务了。与之前的方式不同,PTR最终构建的prompt是由多个子prompt组合得到的,所以包含有个[MASK],需要同时预测出来。另外,为了让组合得到的prompt更加有效,PTR引入了一些可学习的token,通过随机初始化插入到模版中,具体可以看下图的红色部分。

640?wx_fmt=png

图8: PTR的框架

5 总结

    Prompt是为了管控语言模型的行为,让语言模型可以更好的适配下游任务,所以不能局限于用人容易理解的token去构造离散型的prompt,对于语言模型而言,它更能理解的可能是连续型的prompt。可以看到上面几种连续型prompt的方法基本都在2021年问世的,相互之间没有太多比较。但是看完这几个方法后,还是可以看到一些共识。

    a) 连续型的prompt效果优于离散型prompt。连续型的prompt可以通过梯度去更新优化,但是离散型prompt由于不可导的原因只能采用近似梯度或者其他方式去优化。

    b) 连续型的prompt初始化很重要。一般会采用合理的token,可以是离散型的prompt进行初始化,都会优于随机初始化的方式。

    c) 连续型prompt的长度也会影响效果。越长的prompt,其相应的参数会越多,能学到的能力更加强大,但并不是越长越好,超过一定长度后,增益并不明显。

    d) 连续型prompt的参数更新过程都会冻结语言模型的参数,只更新prompt相关的参数。

参考文献

    1. (2021, ) Prefix-tuning: Optimizing continuous prompts for generation.

https://arxiv.org/pdf/2101.00190.pdf

    2. (2021, ) The Power of Scale for Parameter-Efficient Prompt Tuning

https://arxiv.org/pdf/2104.08691.pdf

    3. (2021, ) Multimodal Few-Shot Learning with Frozen Language Models

https://arxiv.org/pdf/2106.13884.pdf

    4. (2021, ) Factual Probing Is [MASK]: Learning vs. Learning to Recall

https://arxiv.org/pdf/2104.05240.pdf

  5. (2021, ) Learning How to Ask: Querying LMs with Mixtures of Soft Prompts

https://aclanthology.org/2021.naacl-main.410.pdf

    6. (2021, ) WARP: Word-level Adversarial ReProgramming

https://arxiv.org/pdf/2101.00121v2.pdf

    7. (2021, ) GPT Understands, Too

https://arxiv.org/pdf/2103.10385.pdf

    8. (2021,) PTR: Prompt Tuning with Rules for Text Classification

https://arxiv.org/pdf/2105.11259.pdf

0?wx_fmt=png
AINLP
一个有趣有AI的自然语言处理公众号:关注AI、NLP、机器学习、推荐系统、计算广告等相关技术。公众号可直接对话双语聊天机器人,尝试自动对联、作诗机、藏头诗生成器,调戏夸夸机器人、彩虹屁生成器,使用中英翻译,查询相似词,测试NLP相关工具包。
343篇原创内容
Official Account
进技术交流群请添加AINLP小助手微信(id: ainlper)
请备注具体方向+所用到的相关技术点
640?wx_fmt=jpeg

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。

640?wx_fmt=jpeg

阅读至此了,分享、点赞、在看三选一吧🙏


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK