1. 介绍

SimCSE(Simple Contrastive Learning of Sentence Embeddings)是一种简单在没有监督训练数据的情况下训练句子向量的对比学习方法。

这个方法是对同一个句子进行两次编码。由于在 Transformer 模型中使用了 dropout,两个句子表征的位置将略有不同。这两个表征之间的距离将被最小化,而同一批中其他句子的其他表征的距离将被最大化(它们作为反例):

  • 目标函数 Multiple Negatives Ranking Loss:

    其中,z和z’ 是两个不同的dropout随机掩码。hizi,hizi′h_i^{z_i},h_i^{z'_i}hizi,hizi 是相同句子xix_ixi输入相同编码器,但使用两个不同的dropout随机掩码而得到的向量。

1.1 对比学习损失函数的性质

直观来说,上文对比学习的损失函数要求第i个样本和它的另一个augmentation的副本(即正样本)之间的相似度尽可能大,而与其他的实例(负样本)之间的相似度 尽可能小。然而,很多的损失可以达到这个要求,例如下面的最简单的形式 :

然而实际训练过程,采用上述的简单形式作为损失函数效果非常不好,下面给出了使用contrastive loss(Eq1)和简单损失(Eq2)的性能对比,温度系数采用0.07:

上面的结果显示,在所有数据集上Contrastive Loss要远远好于Simple Loss。不同于Simple Loss,Contrastive Loss是一个困难样本自发现的损失函数。我们可以上述公式看到,Simple Loss对所有的负样本相似度给予了相同权重的惩罚( 损失函数对所有的负样本相似度的梯度都是相同的)。而Contrastive Loss则更会自动的给距离更近相似度更高的负样本更多的惩罚。这一点可以通过对比损失对不同负样本的相似度的惩罚梯度的简单计算来观察:
对正样本的梯度:

对负样本的梯度:

其中:

对于所有的负样本比较来说,PijP_{ij}Pij的分母项都是相同的。那么 sijs_{ij}sij 越大(也就是负样本越相似),则 PijP_{ij}Pij 的分子项越大,梯度项也越大。也就是说,对比损失给予了更相似(困难)的负样本更大的远离该样本的梯度。 可以把不同的负样本想像成同极点电荷在不同距离处的受力情况,距离越近的点电荷受到的库伦斥力更大,而距离越远的点电荷受到的斥力越小。对比损失也是这样的。这种性质更有 利于形成在超球面均匀分布的特征

为了验证上面表格中对比损失和简单损失的差距确实是因为对比损失具有困难样本自发现的特性,我们用一种显式的困难样本挖掘算法用于简单损失上。即选取最相似的4096个样本作为负样本,并用的简单损失作为损失函数,采用显式困难样本挖掘算法的简单损失函数效果大大提升,远远超过了温度系数取0.07时的对比损失。结果如下表所示:

1.2 对比学习温度系数的作用

除了上面介绍的困难样本自发现的性质之外,观察梯度公式,我们可以容易地发现,损失函数对正样本的梯度绝对值等于所有对负样本的梯度值绝对值的和,即

给予这个观察,作者定义了对第j个负样本的一个相对惩罚强度:

如果我们将负样本的相似度由大到小排序,形成一个顺序统计量,那么温度系数的大小将决定了分布的陡峭程度,如下图所示是负样本惩罚梯度在不同温度系数下与相似度的关系:

当温度系数很小时,例如蓝色线0.07,随着相似度的增大将惩罚梯度剧烈的增大。而当温度系数逐渐增大,概率分布逐渐接近均匀分布,例如图中的绿色线。那么对相似度大的负样本的关注度就变小很多了。

上面论证了温度系数的作用,即温度系数决定了对比损失对困难负样本的关注程度,越大的温度系数,往往一视同仁,不会太过关注更困难的负样本;而温度系数越小,则越关注与该样本相似度非常大的困难负样本,给予困难负样本更大的梯度与正样本分离。

2. 实验效果


发现效果会比我之前介绍的CT要好

3. 实现

sentence_transformers已经把SimCSE已经封装成pip包,完整的训练流程例子可以参考《Sentence-BERT》。我们在此基础上只用修改loss就能轻松的训练SimCSE了:

from sentence_transformers import SentenceTransformer, InputExample
from sentence_transformers import models, losses
from torch.utils.data import DataLoader# ……train_loss = losses.MultipleNegativesRankingLoss(model)# 训练模型
model.fit(train_objectives=[(train_dataloader, train_loss)],epochs=1,show_progress_bar=True
)

4. 有监督的训练

SimCSE也可以用于有监督的数据上训练。我们构造的有监督数据形式为(xi,xi+,xi−)(x_i,x_i^+,x_i^-)(xi,xi+,xi)。简单来说,就是在训练时不只是把xi−x_i^-xi视为负例,且把同batch其他句子的正负例都视为句子i的负例:

目标函数为:

实验效果:

Why does it work?

知乎上有同学提问《为什么SimCSE的效果这么好呢?》

如题,为何通过两次dropout、"自己预测自己"的这种方法效果会这么好呢?通过dropout添加噪声不会改变原来句子的语义吗?

作者在论文中也尝试做了解答:

Table3 中尝试不同的dropout rate,并观察所有变体的表现都低于默认值Transformers 的 dropout rate p = 0.1。可以发现,当 p增加时,的确可能会添加过多的“噪声不会改变原来句子的语义”,导致表现变差。

此外,我们发现两个极端情况特别有趣:
“no dropout”(p = 0)和“fixed 0.1”(使用默认值 dropout p = 0.1,但该对的 dropout 掩码相同)

在这两种情况下,结果对的embedding完全相同,它导致性能急剧下降。我们在训练期间每 10 步检查一次这些模型的checkpoints,并可视化对齐和均匀性(alignment and uniformity)

Alignment:positive pairs Feature 之间的对齐性(紧密性)。相似的样本具有相似的特征
Uniformity:特征在归一化后在超平面上的均匀性。保留最大信息

这两个指标与对比学习的目标非常一致:正实例应该保持接近,随机实例的嵌入应该分散在超球面上。

如上图所示,清楚地表明,从预训练的checkpoint开始,所有
模型大大提高了均匀性。

然而两个特殊变体的对齐性也急剧下降,而无监督 SimCSE 保持稳定对齐性,这要归功于 dropout 的使用噪音。

它还表明,从预训练的checkpoint开始是至关重要的,因为它提供了良好的初始对齐性。最后,“删除一个词”改善了对齐方式但获得了较小的增益在均匀性指标上,最终表现不如无监督 SimCSE。

【EMNLP 2021】SimCSE:句子嵌入的简单对比学习 【CVPR 2021】理解对比学习损失函数及温度系数相关推荐

  1. 一个简单的例子让你理解强化学习是什么,和有监督学习的区别又是什么

    一个简单的小例子: 对于一个正在学走路的小屁孩,他一不小心摔倒了,如果他一摔倒就哭,那妈妈就会打他小屁屁,如果他摔倒了会自己爬起来,那妈妈很高兴,就奖励他喝一口奶.这样小屁孩就学会了摔倒了要自己爬起来 ...

  2. CVPR 2021评审出炉,得分惨不忍睹,面对奇葩评审该如何反击?

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨青暮 编辑丨AI科技评论 1月18日,CVPR 2021的评审结果出炉,那么同学们的评审结果如何 ...

  3. CVPR 2021评审出炉,评审员奇葩意见遭热议 | AI日报

    CVPR 2021评审出炉,评审员奇葩意见遭热议 1月18日,CVPR 2021的评审结果出炉.根据CVPR 2021 程序主席.FAIR研究科学家Georgia Gkioxari近日在推特上的发文数 ...

  4. 【重磅】CSIG-广东省CVPR 2021论文预交流在线学术报告会来啦! (5月8日)

    来源丨 CSIG-文档图像分析与识别专委会 编辑丨极市平台 [导读]:广东省CVPR 2021论文预交流学术报告会将于2021年5月8日在线举办,本次会议邀请了13位广东省在此领域部分优秀团队的青年学 ...

  5. CVPR 2021 论文分享会预告

    CVPR 2021 还有2个月开幕,目前已经有592篇论文公布,占近1/3. 52CV 持续跟踪仓库: https://github.com/52CV/CVPR-2021-Papers 微软亚洲研究院 ...

  6. CVPR 2021 Authors Guidelines 投稿须知 中英文对照翻译

    怕存在一些被忽视的流程, 因此本文对CVPR2021的Authors Guidelines:http://cvpr2021.thecvf.com/node/33  进行全文对照翻译. 目录 AUTHO ...

  7. SimCSE:用于句子嵌入的对比学习

    目录 引言 对比学习Contrastive Learning SimCSE思想 无监督下的SimCSE 有监督下的SimCSE 连接各向异性Connection to Anisotropy 分析 引言 ...

  8. NeurIPS 2021 | 简单且通用的多视图对比图聚类方法

    随着信息时代的蓬勃发展,产生了大量多视图属性图图数据.随即,也出现许多的多视图聚类方法,但这些方法只利用数据中的多属性信息或者多拓扑图信息,没有完整地利用属性图数据的所有信息. 本期 AI Drive ...

  9. EASE:一种融合实体信息的句子嵌入对比学习方法

    写在前面 大家好,我是刘聪NLP. 今天给大家带来一篇NAACL2022论文,一种融合实体信息的句子嵌入对比学习方法,全名为<EASE: Entity-Aware Contrastive Lea ...

最新文章

  1. Matlab与线性代数 -- 稀疏矩阵的图形显示
  2. python可视化多个机器学习模型在训练集(train set)上交叉验证(cross validation)的AUC值、可视化模型效能
  3. 光在介质中传播速度—材料折射率变化—物理光学记录
  4. java qq登录界面_用java实现QQ登录界面怎么写
  5. fwrite视频写入帧率测试(不用测了。。)
  6. gensim流式训练word2vec模型,不需要一次性加载完整数据集
  7. hihoCoder 1175 拓扑排序
  8. 从0打卡leetcode之day 3 -- 最大子序列和
  9. wpf listbox绑定不跟新_苦逼的程序员,Python又有新版本3.9,跟还是不跟?
  10. vs2017激活密钥
  11. fdfs_upload_file发送内存文件
  12. word审阅 去除word回车换行时出现的竖线的方法
  13. signal函数详解
  14. input text 限制文本内容
  15. 微信小程序--js中string转换为number
  16. oracle分类账设置,Oracle EBS R12 总帐和子分类账关系详解[转载]
  17. npm使用过程中的一些错误解决办法及npm常用命令
  18. 2021最新Java面试笔试题目分享
  19. php x509certificate,ssl - .NET中的X509Certificate2和X509Certificate有什么区别?
  20. oppo手机使用应用沙盒动态修改序列号信息

热门文章

  1. a频繁连接不上redis_解决Redis连接无法正常释放的问题
  2. RocEDU.阅读.写作《苏菲的世界》书摘(四)
  3. 双剑合璧保障数据库安全
  4. 【数量技术宅|量化投资策略系列分享】股指期货IF分钟波动率统计策略
  5. 计算机专业考研390分是什么水平,考研初试390分被淘汰,复试到底发生了什么?...
  6. Spring源码 - 从缓存中获取单例Bean
  7. 洛谷-P1830 轰炸III
  8. 关于Qt6.2中的所有属性绑定
  9. 《Java语言程序设计》 课程分析与总结(上)---我为什么这样设计考试试卷?
  10. Python批量PNG转换成JPGE设置quality=99