hi,各位伙伴们早上好,好久没有更文了,最近也没有发觉特别有意思的论文,今天给大家带来一篇和Prompt相关的论文,欢迎食用~
论文地址:https://export.arxiv.org/pdf/2202.04824.pdf
一、提出动机
1)本文作者认为Prompt的提示信息不能被预训练模型充分挖掘使用
2)下游任务的数据不能很好地应用于微调阶段,讲的通俗一点就是模型不能很好的学习下游任务的数据
二、核心idea
作者认为Prompt-based(传统prompt方法)比较依赖预训练模型的泛化性,因为预训练模型的数据(BOOKCORPUS plus WIKIPEDIA corpus)和下游任务的数据分布不一致存在gap;然后作者还认为模型预测mask位置的词都是事先固定好的,构建一个能够完全覆盖候选词的说话者需要专家知识,而一个设计拙劣的说话者限制了预测的准确性,这里简单说下自己的看法,如果mask要预测得词都是事先固定好的(就是去计算设定好词的概率)这样就像是在做选择题,而不是和MLM类似的完型填空任务,这样会限制模型的泛化性。
于是本文作者提出以下改进:
2.1 将场景信息以及提示信息融入到预训练模型
具体的做法是使用未标注的测试集加入Prompt提示( P r o m p t ( x ) Prompt(x) Prompt(x) )
然后使用预训练模型去预测mask位置的token得到 t o p − ∣ O ∣ top-|O| top−∣O∣个预测结果,然后将预测 t o p − ∣ O ∣ top-|O| top−∣O∣得结果填补到原来的模板中被mask位置得到新的数据 q i q_i qi,可以看下原文中给的一个例子:

得到新的数据 q i q_i qi后再使用ES(使用的TF-IDF算法衡量句子间的相似性)为样本 q i q_i qi去语料库(这里的语料库指的是预训练使用的数据BookCorpus 等)检索top-k相似的query,将这些检索后的query数据集作者称为 D p D_p Dp,通过这样的操作作者认为预训练的数据和下游数据统一,而且数据集 D p D_p Dp不仅融入的特定任务信息而且还融入了Prompt提示的信息,其实我觉得这里就是做了一个映射,将特定场景的数据加入Prompt提示后,映射到预训练的数据集中。然后将新的数据集 D p D_p Dp 加入到预训练模型做MLM任务,得到新的预训练模型 M D p M_{D_p} MDp。
得到新的模型 M D p M_{D_p} MDp之后作者认为这是一个融入特定任务的一个模型,然后再重复上诉步骤得到 M D p ′ M^{'}_{D_p} MDp′,然后再使用 M D p ′ M^{'}_{D_p} MDp′作为最终的基准模型,我猜想得到这个基准模型之后在进行常规的Prompt-tuning(原文好像没有交待之后的事,也有可能是我看漏了,欢迎补充~)。
2.2 扩展Verbalizer(就是要映射到label的单词)
常规的Prompt做法是将模型预测得结果直接映射到task classes中,例如: “good”for positive and “bad” for negative. 上文中也提到过这种做法会损失模型的一定泛化性因为我们强制的让模型倾向于预测几个固定的结果中,所以本文提出了一种扩展模型预测结果范围的方法。
将测试数据送入PLM中预测得到一系列 t o p − ∣ O ∣ top-|O| top−∣O∣的结果作为候选Verbalizer C C C,且 c ∈ C c\in C c∈C,使用训练好的NLI系统去推断 s 1 , s 2 s1,s2 s1,s2是否为蕴含关系,如果是蕴含关系则将 c c c加入到Verbalizer集里面。
举个例子:
s1 = I love this movie. In summary, the movie is c c c(候选verbalizer)
s2 = I love this movie. In summary, the movie is good
将<s1,s2>送入到NLI模型判断两者是否是蕴含关系,如果是则说明如果模型预测结果为 c c c和预测为good效果是一样的都会映射到positive这个类别。
三、实验结果
四、总结
毫无疑问本文致力于消除预训练和下游任务的gab从而来提升模型的效果,作者的做法非常的巧妙,将特定下游任务的测试数据(因为一般测试数据覆盖度比较全)映射到预训练使用的数据,从而充分挖掘模型在预训练学习到的知识。谢谢食用~~~~~