文 | 花小花Posy

上周把 《对比学习有多火?文本聚类都被刷爆了...》分享到卖萌屋的群里后,遭到了群友们一波嫌弃安利。

小伙伴们表示,插入替换的数据增强方式已经Out了,SimCSE才是现在的靓仔。

snowfloating说:看完Danqi Chen组里的SimCSE,再看这篇感觉就没什么惊喜了。

苏神: 直接用dropout,居然work了。真见鬼了......

奥多多奥多多:这篇有说法的。

抱着一颗好奇的心,想看看这篇SimCSE到底有什么说法,又哪里见鬼了?小花认认真真拜读了原文,今天跟大家分享分享SimCSE用的什么神奇招数。

看完你可能不信,但它真的很神奇!

SimCSE的全称是 Simple Contrastive Learning of Sentence EmbeddingsS代表Simple。文中的方法完全对得起题目,它是真的简单!简单在哪儿呢?

  1. 它简单地用dropout替换了传统的数据增强方法,将同一个输入dropout两次作为对比学习的正例,而且效果甚好。

  2. 它简单地将NLI的数据用于监督对比学习,效果也甚好。

这么简单的方法,真的work!?WHY?

下面我们一起领略一下这篇文章的风骚吧!

论文题目:
SimCSE: Simple Contrastive Learning of Sentence Embeddings

论文链接:
https://arxiv.org/pdf/2104.08821.pdf

SimCSE开篇讨论的问题是:对比学习为何work?写上一篇文的时候,我就在想对比学习为什么work呢?今天看到本文给出了很好的解释。

对比学习为何work?

原来 ICML2020 专门有一篇文章[1]研究了对比学习为什么work。[1]中指出,对比表示学习有用,主要是因为它优化了两个目标:

  1. 正例之间表示保持较近距离

  2. 随机样例的表示应分散在超球面上。

并提出这两个目标分别可以用指标alignmentuniformity来衡量。

下图可以直观理解这两个目标:

alignment计算正例对之间的向量距离的期望

越相似的样例之间的alignment程度越高。因为alignment使用距离来衡量,所以距离越小,表示alignment的程度越高。

uniformity评估所有数据的向量均匀分布的程度,越均匀,保留的信息越多

可以想象任意从表示空间中采样两个数据









, 希望他们的距离比较远。他们的距离越远,证明空间分布越uniform。所以uniformity的值也是越低越好。

SimCSE也采用这两个指标来衡量生成的句子向量,并证明了文本的语义空间也满足:alignment值越低且uniformity值越低,向量表示的质量越高,在STS任务上的Spearman相关系数越高。

SimCSE

SimCSE有两个变体:Unsupervised SimCSESupervised SimCSE,主要不同在于对比学习的正负例的构造。下面详细介绍下他们的构造方式。

无监督SimCSE

Unsupervised SimCSE 引入dropout给输入加噪声,假设加噪后的输入仍与原始输入在语义空间距离相近。其正负例的构造方式如下:

正例:给定输入







,用预训练语言模型









编码







两次得到的两个向量










































作为正例对。

负例:使用in-batch negatives的方式,即随机采样一个batch中另一个输入







作为







的负例。

训练目标函数:

下图展示了Unsupervised SimCSE的样例:

如何生成dropout mask?

对于Unsupervised SimCSE,核心在于如何生成dropout mask。刚开始读完一遍的时候,惊叹原来dropout可以这么用,效果提升还挺大。后来细想,仍旧有些困惑两次dropout mask的生成过程是怎样的呢?仔细读了下,原文说:

In other words, we pass the same input sentence to the pre-trained encoder twice and obtain two embeddings as “positive pairs”, by applying independently sampled dropout masks。

还是不太清楚。后来看了作者在GitHub的issue里面的回复才懂了。因为BERT内部每次dropout都随机会生成一个不同的dropout mask。所以SimCSL不需要改变原始BERT,只需要将同一个句子喂给模型两次,得到的两个向量就是应用两次不同dropout mask的结果。然后将两个向量作为正例对。(真的simple)

有监督SimCSE

本文还提出Supervised SimCSE,利用标注数据来构造对比学习的正负例子。为探究哪种标注数据更有利于句子向量的学习,文中在多种数据集上做了实验,最后发现NLI数据最有利于学习句子表示。下面以NLI数据为例介绍Supervised SimCSE的流程。

Supervised SimCSE 引入了NLI任务来监督对比学习过程。该模型假设如果两个句子存在蕴含关系,那么它们之间的句子向量距离应该较近;如果两个句子存在矛盾关系,那么它们的距离应该较远。因此NLI中的蕴含句对和矛盾句对分别对应对比学习中的正例对和负例对。所以在Supervised SimCSE中,正负例的构造方式如下:

正例:NLI中entailment关系样例对。负例:a) in-batch negatives b)NLI中关系为contradiction的样例对。

训练目标:

实验结果

Dropout优于传统数据增强?

下图中对比了使用Unsupervised SimCSE (第一行None)和常见的数据增强方法在STS-B验证集上的Spearman's Correlation。

其中crop k%表示随机减掉k%长度的span,word deletion表示随机删除k%的词,delete one word只删除一个词,MLM 15%表示用









随机替换掉15%的词。上表中所有dropout的方法的dropout的比例都是0.1。(因为文中对比了不同比例的dropout,p=0.1效果最好。)

实验结果很明显的可以看出,SimCSE是远超其余数据增强方法的。小花的理解是传统数据增强的方法是对原始输入直接进行改变,在编码后,增强的数据与原始数据在语义空间的距离是不是要比直接用dropout的方式要远。

Dropout与对比学习的关系

为了理解dropout为什么work,作者可视化了不同方法下alignment和uniformity在训练过程中的变化趋势。

上图中对比了在不同数据增强/dropout方式下,



















在训练过程中的变化方向(每训练10步采样一次)。Fix 0.1表示p=0.1时,两次使用相同dropout mask。对于Fixed 0.1和No dropout来讲,正例对的句子表示是完全相同的,

可以看到随着训练步数增加,Unsup. SimCSE的









平稳地递减。虽然









降低的趋势却不明显,但其初始化的值就相对较低。上图进一步验证了SimCSE有效的原因是,它可以让alingnment和uniformity的值逐渐降低。

小花在这里有一个问题请教:使用Fixed 0.1和No dropout与另外两种方式相比较,是不是不太公平?因为当正例对两个向量完全相同时,其实是缺失了一些变体的对比信息在里面的。还有既然两个向量完全相同,









为什么会上升呢?还望理解的小伙伴留言讨论下呀!(╹▽╹)

语义文本相似效果如何?

SimCSE在STS(语义文本相似)任务上进行了评估。评价指标是 Spearman’s correlation。表格中对比了各种建模句子向量的方法,包括简单的对Glove向量取平均,到前不久的SOTA:BERT-Flow和BERT-Whitening。可以看到,在各种编码器和有无监督模式下,SimCSE都取得了显著的提升。比如无监督时,

























与BERT-Whitening相比,Avg. 分别提升了7.96%和14.77%。

此外,作者还对比了不同句子表示模型下



















与他们在STS任务上的结果:可以看出:

  • Avg.BERT模型的









    较低,但









    较高;

  • 相反,对BERT表示进行后处理的BERT-flow和BERT-whitening的









    较低,但是









    却很高;

  • Unsup.SimCSE和SimCSE的两个值都是较低的,他们的STS的结果也更好。

说明



















需要结合使用,只有当二者的值都比较低时,模型学习到的句子向量表示才最适合STS任务。

迁移学习效果

除了STS任务上的评估外,本文还将训练好的句子向量迁移到7个任务上。

迁移学习上的SimCSE并没有展现出明显的优势。作者的解释是句子级别的训练目标并不能直接有利于迁移学习。为了让迁移学习效果更好,文中还是尝试将MLM损失和对比学习损失一起训练,取得了少量的提升(上表中标有w/MLM的行)。

有开源嘛?

有的! 4月23号刚开源的代码。

GitHub链接:
https://github.com/princeton-nlp/SimCSE

文中的预训练语言模型已经整合到了HuggingFace中,可以像BERT模型那样,直接通过API调用模型。

from transformers import AutoModel, AutoTokenizertokenizer = AutoTokenizer.from_pretrained("princeton-nlp/sup-simcse-bert-base-uncased")
model = AutoModel.from_pretrained("princeton-nlp/sup-simcse-bert-base-uncased")

想动手试试的小伙伴们赶紧GitHub看看吧...

小结

本文提出了一个简单的对比学习的框架,SimCSE,用于学习句子表示。文中提出dropout+对比学习和NLI+对比学习,都非常有利于句子表示的学习。SimCSE大幅刷新STS任务榜单,取得了新一轮的SOTA。

这篇文章让小花很爱的一点是,明明是我们习以为常的dropuout和早就熟悉透了的的NLI数据,但是本文的作者们却能从一个全新的角度看待它们,将它们与比学习建立联系,取得非常显著的提升,并合理地解释为什么work。

寻求报道、约稿、文案投放:
添加微信xixiaoyao-1,备注“商务合作”

后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

 

[1] Wang, T., & Isola, P. (2020). Understanding Contrastive Representation Learning through Alignment and Uniformity on the Hypersphere. ICML. https://arxiv.org/pdf/2005.10242.pdf

丹琦女神新作:对比学习,简单到只需要Dropout两下相关推荐

  1. 丹琦女神出品|开放域问答综述

    卷友们好,我是rumor. 做了三年多的问答,我对这个领域真是又恨又爱.恨吧,互联网里的问答产品就是个锦上添花的东西,而且效果还上不去,一堆case等着我解.爱吧,我们NLP可是人工智能的掌上明珠,而 ...

  2. 【论文复现】SimCSE对比学习: 文本增广是什么牛马,我只需要简单Dropout两下

    文本增广是什么牛马,我只需要简单Dropout两下 Sentence Embeddings与对比学习 SimCSE 无监督Dropout 有监督对比学习 如何评判Sentence Embeddings ...

  3. NLP与对比学习的巧妙融合,简单暴力效果显著!

    NewBeeNLP公众号原创出品 公众号专栏作者 @Maple小七 北京邮电大学·模式识别与智能系统 今天和大家来看看最近讨论度非常高的SimCSE,据说简单暴力还效果显著! 论文:SimCSE: S ...

  4. ACL Tutorial|开放域问答综述 -- 陈丹琦和Scott

    每天给你送来NLP技术干货! 来自:李rumor 做了三年多的问答,我对这个领域真是又恨又爱.恨吧,互联网里的问答产品就是个锦上添花的东西,而且效果还上不去,一堆case等着我解.爱吧,我们NLP可是 ...

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

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

  6. 73岁Hinton老爷子构思下一代神经网络:属于无监督对比学习

    来源:机器之心 本文约2700字,建议阅读7分钟. 在近期举行的第 43 届国际信息检索年会 (ACM SIGIR2020) 上,Geoffrey Hinton 做了主题为<The Next G ...

  7. 成本砍砍砍!不用数据也能用 BERT 做对比学习?

    文 | 小昌 编 | 小戏 来自 | 夕小瑶的卖萌屋 大家好,我是小昌,今天和大家聊一聊如何从 BERT 中获取好的句子表征. 大家都知道,BERT 的设计初衷是为了获得更好的单词表征.但是,利用 B ...

  8. Hinton构思下一代神经网络:属于无监督对比学习

    本文由机器之心报道 Geoffrey Hinton 是谷歌副总裁.工程研究员,也是 Vector Institute 的首席科学顾问.多伦多大学 Emeritus 荣誉教授.2018 年,他与 Yos ...

  9. 对比学习系列论文SDCLR(二)-Self-Damaging Contrastive Learning

    目录 0.Abstract 0.1逐句翻译 0.2总结 1. Introduction 1.1. Background and Research Gaps 1.1.1逐句翻译 第一段(引出对比学习是否 ...

最新文章

  1. docfetcher,filelocator使用
  2. 后台开发必读书籍--Linux 高性能服务器编程
  3. Mysql:is not allowed to connect to this MySQL
  4. outdated: 3.Adding Color
  5. 剑指offer:22-25记录
  6. 三维点云学习(3)6- 实现K-Means
  7. Win2008使用WEB方式更改工作组计算机用户帐户密码
  8. 浅谈MySQL索引背后的数据结构及算法
  9. oracle显示一个月的所有天数
  10. cocos2d 解密ccbi_CocosBuilder 学习笔记(3) AnimationManager 与 ccbi 文件解析
  11. Windows 环境搭建Redis集群之无脑教程
  12. 双向循环链表解决约瑟夫问题
  13. FANUC机器人:奇异点回避功能介绍与使用方法
  14. 本人搜集的不用fq的免费学术技术资源网站
  15. 共享服务器与独立服务器的区别是什么?
  16. 修改openwrt或者LEDE默认wifi名称以及默认开启wifi
  17. 信息架构和零代码应用搭建
  18. Java kafka监控 topic的数据量count情况,每个topic的Summed Recent Offsets(总结最近的偏移量)
  19. Tableau工具提示:显示图表
  20. Java实现发送邮件并携带附件

热门文章

  1. 【原】jQuery编写插件
  2. plsql 中的一些好的设置和快捷键总结
  3. c#执行存储过程的简单实例
  4. 首个开源 Linux 系统登陆火星,占有率超 Windows,一同登录还有一款安卓手机芯片...
  5. 你们班上的同学现在都怎么样了?
  6. linux下mysql主从同步是主从i/o线程显示为no_mysql主从同步IO线程NO
  7. python模块讲解_python模块详解
  8. excel高级筛选怎么用_python中实现excel的高级筛选
  9. 【Pytorch神经网络理论篇】 31 图片分类模型:ResNet模型+DenseNet模型+EffcientNet模型
  10. python网络爬虫系列(二)——ProxyHandler处理器实现代理IP