【好文分享】SimCSE---简单有效的对比学习

2021-10-27 10:48:44 浏览数 (2)

“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。

来源:知乎—wangj

地址:https://zhuanlan.zhihu.com/p/375659368

这篇论文出来已经有一段时间了,刚出来还是有不小的影响的,但是本人实在有点懒,到现在才仔细看了一遍,进入正题,这篇论文提出了两种SimCSE,有监督和无监督,而我觉得最巧妙的就是无监督使用的技巧,很有意思,下面仔细介绍一下这篇论文。

01

模型结构

02

无监督模型

先看一下左边的无监督模型,一个句子通过encoder得到sentence embedding,而其他句子得到的sentence embedding是作为负例,而正例就很巧妙了,是同一个句子输入两遍,通过不同的drop mask机制得到的sentence embedding,dropout层在训练时是会随机drop一些输入的,因为具有一定的随机性,所以同一个句子输入两遍得到的sentence embedding是有一点区别的,但是总体上还是表达了同一个意思。(只想说666)

训练目标为:

sim函数是余弦相似度

论文实验了一系列的dropout的p值,发现对于STS-B任务,p值为0.1时取得的效果最好,另外还有两个比较特殊的p值---0.0和Fixed 0.1,p值为0.0意味着dropout层没有使用,dropout层不会drop任何数值,输入值和输出值是一样的,而Fixed 0.1指的是dropout层的p值为0.1,但是drop的位置是不变的,也就是说,相同的输入肯定会有相同的输出,这就意味着正例就学不到东西了,只有负例,这也就是为什么会造成效果如此之差。

03

有监督模型

在自然语言处理中,有自然语言推断或者文本蕴涵任务,包含了对应的数据集,有三个标签,entailment(蕴涵),neutral(中立),contradiction(相反),如下图所示,论文实验了不同数据集作为正例的结果。

第一行是无监督的SimCSE,sample指的是对数据集采样训练,采样大小为134k,而full使用整个数据集作为训练集,图中的分数为斯皮尔曼相关系数,模型使用的是 。而最后一栏中的使用entailment作为正例,contradiction作为hard neg,这也是有监督模型的最终模型。

训练目标为:

正如上图所示,通过添加hard neg使得模型效果从84.9提升到了86.2,另外在模型结构图中,右边是有两个Encoder的,论文实验了这两个Encoder不一样的情况,发现模型效果从86.2下降到了84.2。 最后再放上模型的实验结果图:

04

总结

论文中其实还有很多小细节,对文章感兴趣的可以细细看一遍,这篇论文提出了很多比较新奇的点,我个人认为无监督学习模型使用的dropout是一个非常有意思的点,从模型结果我们也能看出,相比于其他模型,SimCSE的效果要好得多。

0 人点赞