相似句子计算工业级方法:对比学习SimCSE原理透析

最近看了一篇最新的Sentence Embedding论文,今年4月份的,丹琦大神发表的《Simple Contrastive Learning of Sentence Embeddings》, 简称就是SimCSE,直译过来就是 基于简单对比学习句子嵌入。和没有对比学习的Bert相比,个人认为最大的区别就是:

  • 考虑到了拉大当前样本和不相关样本的距离,uniformity。 而原始的Bert仅仅考虑了相似样本越相似越好,也就是Alignment。

整篇文章的关键词有两个,simple 和 Contrastive Learning。接下里,我们分别来看下,如何简单,又如何对比学习。

Contrastive Leaning

释义

对比学习,顾名思义,就是两个事物之间作比对,山羊和绵羊之间相似度高。 山羊和飞机之间相似度低。而其思想就是,让相似度更加拉近,不相似的之间距离更加远。有点类似于聚类的思想,类的内部距离越小越好,类的外部距离越大越好。

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

训练目标为:

 sim函数是余弦相似度,其值越大越相似,

\tau是一个温度超参数

所以这块可以等价于对相似的结果做交叉熵损失函数。


假设我们数据集中有两个相似样本,xi+和xi, 那么他们的输出为hi+和hi, 他们应该是相似的,越小越好,距离越近,即分子越小越好。

 论文实验了一系列的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的位置是不变的,也就是说,相同的输入肯定会有相同的输出,这就意味着正例就学不到东西了,只有负例,这也就是为什么会造成效果如此之差。

评价指标

总结

整篇论文,我觉的两个亮点:
1.考虑到了拉大当前样本和不相关样本的距离,uniformity。 而原始的Bert仅仅考虑了相似样本越相似越好,不会考虑不同的样本间的距离增大,也就是Alignment。

  1. Dropout在Encoder内部干预,要比源头增强更好,更直接。

训练代码参考:




引用:https://www.jianshu.com/p/ebe95c24bac0
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会发paper的学渣

您的鼓励和将是我前进的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值