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

SimCSE是一种新的SentenceEmbedding方法,由丹琦大神在2022年4月提出。它通过对比学习来增强句子嵌入,不仅考虑相似样本的相似性(Alignment),还关注不同样本间的距离(Uniformity)。对比学习中,同一句子的不同版本(通过dropout产生)被视为正例,其他句子作为负例。论文表明,dropout的p值选择对模型性能至关重要,如0.1在某些任务上表现最佳。此外,内部dropout比源头增强更能直接优化模型。该方法的评价指标包括相似样本的接近度和不相似样本的疏远度。SimCSE为无监督学习的句子表示提供了一种有效的新视角。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近看了一篇最新的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
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

会发paper的学渣

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

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

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

打赏作者

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

抵扣说明:

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

余额充值