赞
踩
每天给你送来NLP技术干货!
来自:李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
方法的核心思路也比较简单,分为两步:
用Prompt的方式生成句子表示,比如[X] means [MASK]
,[X]
是输入句子,[MASK]
是输出的表示,用这个当句子表示
用不同的Prompt模版来生成对比学习的view,继续采用自监督的方式训练
上面两步带来的提升也是相辅相成的,首先加了Prompt之后生成的表示本身就比BERT-flow、BERT-whitening、ConSERT要好:
注:OptiPrompt是参数化的prompt,但作者在最终实验用的还是手工prompt
加上对比学习的无监督训练后,效果又又又提升了一些(开头的图),不过从训练目标的消融实验可以猜想,主要提升还是在prompt产生句子表示的方式,而用不同template来对比学习的提升其实有限(第一行SimCSE设置 vs 第二行):
上面嗖嗖列了一堆实验结果,其实这篇文章的核心思想就是用Prompt来产生句子表示,那为什么这样产出的表示效果会好呢?
作者认为,原生BERT表现不好主要是因为词语频率、大小写、subword等token导致的bias,而BERT本身各层Transformer都没有纠正这个问题。通过利用prompt,可以更有效地使用BERT各层中的知识,并且用[MASK]来表示embedding的话,可以避免像以前一样做各种token的平均,从而避免了token引入的偏差。
为了证明上述猜想,PromptBERT在开头做了不少分析:
通过实验,显示embedding层甚至比最后一层的表现要好,证明BERT各层对于文本表示任务效率较低
之前其他工作认为,原生BERT表现差主要是因为表示空间的anisotropy(呈锥形),而anisotropy是由词频这样的偏差引起。但作者通过一些实验,认为anisotropy和bias不是相关的,所以bias的问题仍有待解决
总的来说,Prompt+对比学习的结合方式还是很巧妙的,我之前还想怎么用prompt做表示来着,没想到这样就work了。另外作者关于anisotropy和bias的实验也比较有启发性,同时在附录里作者通过实验显示,如果不对embedding层和softMax层进行weight tying的话,会很大程度上减少偏差。
不过并没有直接的实验可以表示PromptBERT减少了偏差,另外作者对prompt前期的探索虽然很到位(尝试T5生成的模版、参数化模版),但不知道为啥最后还是选择了人工模版。还有个疑惑是PromptBERT只在base模型上做了实验,而我们都知道prompt是模型越大越好的,一般我看到的prompt论文都是large模型起步,base就取得了这么好的效果还是蛮让人惊讶。
投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。
方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。
记得备注呦
整理不易,还望给个在看!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。