真正的利器:对比学习SimCSE

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

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

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

Contrastive Leaning

释义

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

损失函数

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

而分母则是,xi和数据集中其他的样本的距离,不相识的样本,越大越好,即分母越大越好。
总起来说,就是这个损失越小,越能达到对比学习的思想。

评价指标

引入两个指标分别刻画对比学习的两个目标:

  • Alignment: 代表相似样本之间距离更近。
    其公式为:


    公式

    所有的样本和自己的相似样本做差平方,越小越相似。在下面图上更直观:


    image.png

    假设x和y是相似样本,那么输出的向量f(x)和f(y) 越近越好,最好到了一个点上。
  • uniformity
    uniformity是从另一个角度来考虑问题,不相关的样本越远越好。
    其公式为:


    公式

    这个公司可以近似看做熵, 假设x和y是不相似样本,那么输出的向量f(x)和f(y) 越远,uniformity越小,最好不相关都滚远点。
    下面图上更直观:

每一家都住在这个图上,家庭内部都住着相似样本,家之外都不相似,彼此离得越远越好,也许最理想的境界就是 每一家彼此都离的差不多远,比较平均的住在这个球上,这样整体的平均距离才能达到最大,这也就是熵的含义。 因为均匀分布信息熵最高,分布越均匀则保留的信息越多.

SimCSE

原理和损失函数都有了,接下来是如何构造正负例了。 在这文章中,分为两种情况,分别取构建自己的正负例。

Unsupervised SimCSE

image.png

实线箭头代表正例,虚线代表负例。

  • 正例构造: 给定输入,用Bert Encoder两次得到的两个向量和作为正例对。
    由于Bert本身就有随机DropOut 功能,所以同一句话 走两次Bert,得到的两个向量不同,但是是相似的。因为原样本和生成的正样本的语义是完全一致的,只是生成的embedding不同而已,可以看做Bert Encoder过程中,对数据做了一个小增强。
  • 负例构造:使用in-batch negatives的方式,即随机采样一个batch中另一个输入作为的负例。说白了就是batch中其他的样本就是负例。
  • 损失如下:


    image.png

而且这种dropoutmask 比数据增强也强很多,文章中实验指标如下:


image.png

为什么会强这么多呢?这是个好问题

可能是,增强嘛,无非对输入的原始词做改变,无论是删除,替换,回译等等吧,毕竟是源头上,离最后的输出太远了。而 Dropout基本上是最后的阶段,干掉一些神经元,可能效果更直接一些。

Supervised SimCSE

image.png

正例就是人工标注的相关的,负例就是batch中其他的负样本。
损失函数:


image.png

如下图:


image.png

Two dogs are running. 和 There are animals outdoors. 是人工标注的相关的两句话,所以是正例,用实线连接的。
其他的都是负例,用虚线连接的。同一个batch的中的。

总结

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

  1. Dropout在Encoder内部干预,要比源头增强更好,更直接。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 机器学习基础总结 一、其它 1. 机器学习的编程流程 模型的训练过程a. 数据的加载b. 数据的清洗c. 数据的分...
    潇萧之炎阅读 402评论 0 0
  • 机器学习是做NLP和计算机视觉这类应用算法的基础,虽然现在深度学习模型大行其道,但是懂一些传统算法的原理和它们之间...
    在河之简阅读 20,649评论 4 65
  • 以西瓜书为主线,以其他书籍作为参考进行补充,例如《统计学习方法》,《PRML》等 第一章 绪论 1.2 基本术语 ...
    danielAck阅读 4,717评论 0 5
  • 1 为什么要对特征做归一化 特征归一化是将所有特征都统一到一个大致相同的数值区间内,通常为[0,1]。常用的特征归...
    顾子豪阅读 6,875评论 2 22
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 6,135评论 0 4