前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >文献阅读:SNCSE: Contrastive Learning for Unsupervised Sentence Embedding with Soft Negative Samples

文献阅读:SNCSE: Contrastive Learning for Unsupervised Sentence Embedding with Soft Negative Samples

作者头像
codename_cys
发布2022-04-13 16:52:14
6760
发布2022-04-13 16:52:14
举报
文章被收录于专栏:我的充电站我的充电站

1. 内容简介

这篇文章算是SimCSE的一个进阶版本吧,关于SimCSE的介绍之前我已经写了一篇小博客(文献阅读:SimCSE:Simple Contrastive Learning of Sentence Embeddings)介绍了一下了,这篇文章感觉像是基于SimCSE之后的一个优化版本。

文章关注的问题依然是nlp当中sentence的embedding表征学习方面的工作,和SimCSE一样,它同样采用了对比学习的方式来优化效果,不过对于embedding的获取方法,与SimCSE的直接取用[CLS]标志的embedding不同,它采用了prompt learning的方式来获取文本的embedding。

此外,文中还特别针对了语义表达进行了优化。

文本表征的一个常见问题就是文本相似度很高,但是语义相反的情况,比如今天天气很好今天天气不好。他们的语义是完全相反的,但是往往在NLP模型当中获得的两个句子的sentence embedding表达确实非常相似的,因为他们的token组成还有文本描述都是非常接近的,因此就会被模型混淆。

因此,文中提出了一种soft negative sample的方式来强制模型学习这种语义上的相反信息,然后增设了一个BML Loss来加强模型对这方面特征的学习,从而优化模型的效果。

整体的优化方案可以从下述图片当中获得比较直观的了解。

2. 方法实现

下面,我们来考察一下其具体的方法实现。

1. embedding的获取

首先,关于sentence的embedding获取方式,如前所述,与传统的bert通过[CLS]token来获取sentence embedding的方式略有不同,文中借鉴了prompt learning的方式,具体而言,对于任意的sentence

X

,通过构造这样的文本:

其中,3个[MASK]的embedding对应着三个句子的embedding,而

X^+

代表正例,事实上就是原始的文本输入,而

X^{\#}

代表soft negative sample。

不过坦率地说个人对于这里的prompt方法的必要性是多少有点存疑的,因为感觉基于bert的finetune,而且也没有给出其他的任务数据进行数据增强,那么获取sentence embedding的方式prompt learning和原始的[CLS]直接获取的方式应该是一样的,这里感觉有点强行蹭热度了,不过具体就不知道文中作者他们是不是有做相关的对比实验了,也可能纯粹是我想当然了……

2. soft negative样品的生成

而关于soft negative样品的生成方法,其实这个算是文中最核心的优化部分了。

正常来说,我们是无法获得这种soft negative样本的,文中事实上是采用了一种相对暴力的方式进行了实现。

具体而言,他其实是先调用了一个外部工具叫做spaCy的工具获取了文本的dependence parsing树结构,然后通过一些rule base的方式生成了与原文表达相近但是语义相反的文本。

所以某种意义上,个人觉得其实这也就是一种更好的数据增强的方式,个人觉得这部分内容才是这篇文章的精髓所在,可惜他没有给出具体的介绍,code大致扫了一下,似乎也没找到对应的部分……

3. loss函数的定义

最后,关于loss的定义,由于soft negative sample的存在,文中为其单独设置了一个loss来进行优化,即文中提到的BML(bidirectional margin loss)损失函数。

其具体的函数定义如下:

\Delta = cos(sim(h_i, h_i^{\#})) - cos(sim(h_i, h_i^{+}))
L_{BML} = ReLU(\Delta + \alpha) + ReLU(-\Delta - \beta)

而对于正常的负例,则使用普通的loss就行了,具体而言,就是:

L_{InfoCSE} = - log\frac{e^{cos(sim(h_i, h_i^{+})) / \tau}}{\sum_{j} e^{cos(sim(h_i, h_j^{+})) / \tau}}

而整体的loss函数就定义为:

L_{SNCSE} = L_{InfoCSE} + \lambda L_{BML}

另外,出于对比实验的考虑,文中还给出了两个对比实验,分别就是将soft negative sample当成纯粹的正例以及纯粹的负例的情况进行考察,具体的两种Loss函数如下:

  1. 视为纯粹的正例
L_{PL} = - log\frac{e^{cos(sim(h_i, h_i^{+})) / \tau}}{\sum_{j} e^{cos(sim(h_i, h_j^{+})) / \tau}} - log\frac{e^{cos(sim(h_i, h_i^{\#})) / \tau}}{\sum_{j} e^{cos(sim(h_i, h_j^{\#})) / \tau}}
  1. 视为纯粹的负例
L_{NL} = - log\frac{e^{cos(sim(h_i, h_i^{+})) / \tau}}{\sum_{j} e^{cos(sim(h_i, h_j^{+})) / \tau} + e^{cos(sim(h_i, h_i^{\#}))/\tau}}

3. 实验 & 结果

下面,我们来看一下他们具体的实验以及对应的实验结果。

1. 基础实验结果

首先,在核心的实验方面,他们在STS数据集上考察了一下模型的效果,具体结果如下表所示:

可以看到,整体而言他们的SNCSE模型还是比较一致的获取了SOTA的实验结果,说明他们的方法确实是有效的。

2. soft-negative样品的作用

然后,他们使用消解实验看了一下soft negative sample是不是真的发挥了正向的作用。

具体而言,他们设置了4个实验:

  1. 将soft negative sample完全视为正例
  2. 将soft negative sample完全视为负例
  3. 不考虑soft negative sample的影响
  4. 使用BML损失函数

得到的实验结果如下:

3. BML loss的考察

然后基于上面的实验结果,我们可以判断soft negative sample在BML损失函数的加成下确实对于结果有着正向的收益,但是参数

\alpha, \beta

还有

\lambda

取什么值比较好呢?

文中针对这一点还进行了一下调参优化,得到结果如下:

可以看到,当

\alpha=0.1, \beta=0.4, \lambda=1e-3

时,模型取得了最优地调参效果。

不过这部分基本就是调参优化了,借鉴借鉴量级就行了。

4. similarity考察

另外,除了指标方面,为了实际考察一下SNCSE是否真的可以对语义进行区分,文中还对negative sample以及soft negative sample的相似度分布进行了绘制,得到结果如下:

可以看到:

  • 如果不使用BML,模型将缺乏辨别soft negative sample的能力,SimCSE一定程度上可以缓解上述问题,但是整体而言问题还是比较大的,但是加入了BML之后的SNCSE区分度就有了明显的提升;
  • 对于negative pairs,similarity的分布三者都有很好的区分,其中SimCSE区分度最大一些。

5. 实例考察

最后,他们给出了一些SNCSE预测的实际的bad-case如下:

可以看到:

  • 尽管在上述指标上SNCSE均获得了不错的效果表达,但是在实际的应用当中,SNCSE在拼写错误,语序、否定逻辑以及文本指代问题上事实上还是存在着很大的优化空间,远没有达到完美的程度。

4. 结论 & 思考

综上,上述文献主要就是在sentence embedding的表达优化问题上具体对于相似文本进行了优化,具体方式就是加入了soft negative sample的方式。

但是虽然他给出了不少的优化点,整体而言给我的感觉主要其实最主要的还是一种数据增强策略,这个或许在后续我这边其他的工作当中也可以用到。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/03/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 内容简介
  • 2. 方法实现
    • 1. embedding的获取
      • 2. soft negative样品的生成
        • 3. loss函数的定义
        • 3. 实验 & 结果
          • 1. 基础实验结果
            • 2. soft-negative样品的作用
              • 3. BML loss的考察
                • 4. similarity考察
                  • 5. 实例考察
                  • 4. 结论 & 思考
                  相关产品与服务
                  对象存储
                  对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档