亚马逊VaSCL | 无监督虚拟增强困难样本,超越SimCSE

关注 ▲对白▲ 和百万AI爱好者,一起向上生长

图片

这是对白的第 90 期分享

作者 l 知乎@不是大叔    出品 l 对白的算法屋


大家好,我是对白。

半年前SimCSE两次dropout的操作刷爆朋友圈,对比学习相关论文也席卷各大顶会顶刊;上次也总结了ACL2021的一些对比学习文章。最近组内论文分享有同事分享了一篇亚马逊AI Lab的工作,觉得还蛮有意思,该论文于2021年12月16日发布在arxiv上,目前是文本匹配新SOTA效果超越了SimCSE

下面就让我们一起学习一下如何通过无监督虚拟增强难负样本,来提升文本匹配效果~

图片

一、正文


首先思考一下,SimCSE虽然操作简单,这其实意味着它还有很多的可操作空间,比如——如何进一步加大对困难样本信息的挖掘,从而进一步提升网络的性能。

这个道理就像考试,简单的题目大家都会,所以所有大家随便考考都可以考到90分,但是90-100分这个区间,就要考验大家对困难题目的理解了;如果我们平时学习一直反复写简单题目,忽略了难题的练习,那肯定是没办法在90分的基础上再多考几分的。

想让模型多见一些困难样本,有两种方式:

第一种方式就是充分挖掘现在的数据集,找出现在数据集内的困难样本,然后通过加大这些样本的权重或者出现的比例,强迫模型多关注这些难题,比如SimCSE内利用温度τ来控制对困难样本的关注度:

图片

1. 分子是原始case两次dropout输出,其相似度一定较大,无太大随机性,即熵值较为固定;
2. 分母中包含一堆负样本,包括简单样本,困难样本等,不确定性高,熵值大;
3. 分母中困难样本定义为:其明明是负样本,其和原始case相似度却很大;那么分母一定是更关注困难样本,因为简单样本loss低;
4. 所以当τ>1,相当于降低对困难样本的关注度,当 τ<1,则进一步扩大困难样本比重,更加关注困难样本。

比如简单负样本和原句相似度0.1,困难样本和原句相似度0.6,除以τ=0.2后,差距进一步扩大,模型会更关注困难样本;

或者利用方差等方式手动挑出来比较困难的样本,反复多加入几次迭代过程,具体在这里就不赘述了。

另一种方式就是创造更多的困难样本,常见的方式一般是人为分析数据后进行手工添加,可以配合一些仿射变换,如同义词替换、回译等;那么能不能像第一种方式那样,在训练过程中,让网络自己想办法去创建一些困难样本呢?

好了,本文的主角终于来了——VaSCL,其会在网络训练的过程中自动创造一些虚拟的困难样本,为什么说是虚拟的,自然也是和SimCSE那样直接dropout出来的一堆“数据分布”一样,毫无章法且不讲道理但..有效!

二、VaSCL是怎么做的?


首先还是和SimCSE一样,一个case两次dropout,然后最小化自身两次dropout的距离,并推远与其它样本的距离;即,SimCSE原loss全部保留;

剩下就是怎么找出来困难样本。

① 假设batch为32,我们需要找出第一句话的困难样本,因为是无监督模型,除了第一句话自身,其余所有case都是负样本,那么模型输出特征向量和第一句话越相似的,其就越可能是第一句话的困难样本是吧?我们首先定义一个k,在每个batch中找到每句话输出特征向量最近的k句话,后文称为这句话的k领域,后面就用这k句话创建第一句话的虚拟困难样本。

② 假设第一句话经过模型输出的特征向量是e,随便搞一个高斯白噪声α,加上去,得到一个新的特征向量e+α,理论上来说,这个新的特征向量和第一句话的意思应该还是相近的,因为是高斯白噪声,其不会对原始向量数据分布产生太大影响,这个过程大概可以模拟成这样:

e = e + np.random.standard_normal(y.shape) * 0.01

如果是给一张图片加上高斯白噪声,基本是看不出什么变化的。仔细看一下这个高斯白噪声的代码,好好想想,理论上按照这个公式,高斯白噪声一定不应该对原句的语义产生太大影响。

当然,实际上我们不是随便乱加一个高斯白噪声,我们期待我们有很多的高斯白噪声,然后再其中选取一个最优的高斯白噪声,可以使得第一句话加上这个噪声以后,即e+α和原来的特征向量e,最远,但是第一句话k领域内的所有负样本加上这个噪声α后都和原句e更靠近了,这样的一个高斯白噪声可谓是坏事干尽了,迷惑性贼大!

所以当原句e加上这个最优的噪声α,就得到了一个很强的困难样本!

这里有个问题,这个候选高斯白噪声集合哪里来,文章没有交代,理论上我们随机生成若干个作为备选,或者预设一个数值,每次训练过程中随机生成这么多个,再或者直接把这个噪声当成可训练参数或许也可以(但是按照原文的意思,似乎没有把这个α当成可训练参数);不过都是小问题,个人比较倾向在训练前指定数值n,

③ 训练过程中batch中每句话的loss:

首先保持SimCSE的损失:

  • 每句话的两次dropout靠近

  • 每句话和别的句子dropout拉远

然后是虚拟困难样本损失:按②的规则在高斯白噪声集里面找到一个最优的噪声α,每句话加上其最优噪声得到这句话的虚拟困难样本,这句话的k领域内负样本也加上这句话的最优噪声,得到这句话k领域的虚拟困难负样本

  • 原句和其虚拟困难样本拉近

  • 原句/原句虚拟困难强样本分别与k领域内负样本/k领域虚拟困难负样本拉远

作者没有开源,但是其实按照SimCSE实际实现起来应该差不多,难度不大。

三、效果


语义相似度效果:

图片

文本聚类效果:

图片

少样本学习意图分类效果:

图片

模型在不同数据增强策略下的效果:

图片

技术交流群邀请函

已建立CV/NLP/推荐系统/多模态/内推求职等交流群!想要进交流群学习的同学,可以直接扫下方二维码进群。

加的时候备注一下:昵称+学校/公司。群里聚集了很多学术界和工业界大佬,欢迎一起交流算法心得,日常还可以唠嗑~

图片

图片

后台回复关键词【人工智能】

领取整理最全面的人工智能学习礼包

后台回复关键词【对比学习】

获取最新对比学习

在各大顶会上的论文合集!

往期精彩回顾

[

图片

中国互联网寒冬的根本原因是什么?

](http://mp.weixin.qq.com/s?__biz=Mzg3NzY2ODIzOA==&mid=2247512933&idx=1&sn=02288adac9649df566348e3124f2d95b&chksm=cf1d8184f86a0892d3e9f0c352bf1b398164e359050e0a13589a46bf420d9bd72e9913fd6713&scene=21#wechat_redirect)

[

图片

吴恩达:回顾2021,这些大事件影响了AI这一年

](http://mp.weixin.qq.com/s?__biz=Mzg3NzY2ODIzOA==&mid=2247512920&idx=1&sn=0c7581cb5eb62a3d6ed07f7bcaf5f11a&chksm=cf1d81b9f86a08afe2f60f9b0b614a651046e3be9036d536220589ffa715d2dbaa171e8c06ce&scene=21#wechat_redirect)

[

图片

中科大软件学院硕士:实习秋招百多轮面试总结(中)

](http://mp.weixin.qq.com/s?__biz=Mzg3NzY2ODIzOA==&mid=2247512839&idx=1&sn=86a25e221cf77dd3a3d2d62e14ea42c1&chksm=cf1d81e6f86a08f0543f543278e7f3f5b8399498a204334f5081d3099a9540c21c2a548625bb&scene=21#wechat_redirect)

最后欢迎大家关注我的微信公众号:对白的算法屋(duibainotes),跟踪NLP、推荐系统和对比学习等机器学习领域前沿,日常还会分享我的创业心得和人生感悟。想进一步交流的同学也可以通过公众号加我的微信,和我一同探讨技术问题,谢谢!

posted @   对白的算法屋  阅读(86)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2018-03-13 hiveserver2连接报错: User: root is not allowed to impersonate anonymous (state=08S01,code=0)
2018-03-13 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
2018-03-13 允许Ubuntu系统下Mysql数据库远程连接
2018-03-13 详解如何使用Docker Hub官方的MySQL镜像生成容器
2018-03-13 Docker的Mysql数据库:把数据存储在本地目录
2018-03-13 Docker搭建Mysql容器
2018-03-13 Docker中查看Mysql数据库中的各环境参数
点击右上角即可分享
微信分享提示