Press "Enter" to skip to content

PromptBERT|结合Prompt+对比学习,超越SimCSE两个多点

卷友们好,我是rumor。

 

可能是因为对比学习,今年以来文本表示方向突然就卷起来了,SOTA刷的嗖嗖的,我还停留在 我们ConSERT 的阶段,结果别人不精调就已经超了。昨天实习同学发了我几篇Open Review上ACL的投稿,其中一篇效果最好的模型, 在摘要中写道 :

 

「 Even a non fine-tuned method can outperform the fine-tuned methods like unsupervised ConSERT on STS tasks 」

 

好,你厉害,我读还不行吗。

这篇文章名叫PromptBERT,无监督直接在SimCSE的基础上提了2个多点:

 

PromptBERT: Improving BERT Sentence Embeddings with Prompts
https://openreview.net/forum?id=7I3KTEhKaAK

方法的核心思路也比较简单,分为两步 :

 

 

    1. 用Prompt的方式生成句子表示,比如

[X] means [MASK]

[X]

    1. 是输入句子,

[MASK]

    1. 是输出的表示,用这个当句子表示

 

    1. 用不同的Prompt模版来生成对比学习的view,继续采用自监督的方式训练

 

 

上面两步带来的提升也是相辅相成的,首先加了Prompt之后生成的表示本身就比BERT-flow、BERT-whitening、ConSERT要好:

注:OptiPrompt是参数化的prompt,但作者在最终实验用的还是手工prompt

 

加上对比学习的无监督训练后,效果又又又提升了一些(开头的图),不过从训练目标的消融实验可以猜想,主要提升还是在prompt产生句子表示的方式,而用不同template来对比学习的提升其实有限(第一行SimCSE设置 vs 第二行):

为什幺Prompt可以work

 

上面嗖嗖列了一堆实验结果,其实这篇文章的核心思想就是用Prompt来产生句子表示,那为什幺这样产出的表示效果会好呢?

 

作者认为,原生BERT表现不好主要是因为词语频率、大小写、subword等token导致的bias,而BERT本身各层Transformer都没有纠正这个问题。通过利用prompt,可以更有效地使用BERT各层中的知识,并且用[MASK]来表示embedding的话,可以避免像以前一样做各种token的平均,从而避免了token引入的偏差 。

 

为了证明上述猜想,PromptBERT在开头做了不少分析:

 

 

    1. 通过实验,显示embedding层甚至比最后一层的表现要好,证明BERT各层对于文本表示任务效率较低

 

    1. 之前其他工作认为,原生BERT表现差主要是因为表示空间的anisotropy(呈锥形),而anisotropy是由词频这样的偏差引起。但作者通过一些实验,认为anisotropy和bias不是相关的,所以bias的问题仍有待解决

 

 

总结

 

总的来说,Prompt+对比学习的结合方式还是很巧妙的,我之前还想怎幺用prompt做表示来着,没想到这样就work了。另外作者关于anisotropy和bias的实验也比较有启发性,同时在附录里作者通过实验显示,如果不对embedding层和softMax层进行weight tying的话,会很大程度上减少偏差。

 

不过并没有直接的实验可以表示PromptBERT减少了偏差,另外作者对prompt前期的探索虽然很到位(尝试T5生成的模版、参数化模版),但不知道为啥最后还是选择了人工模版。还有个疑惑是PromptBERT只在base模型上做了实验,而我们都知道prompt是模型越大越好的,一般我看到的prompt论文都是large模型起步,base就取得了这幺好的效果还是蛮让人惊讶。

 

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注