前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >文本匹配——【EMNLP 2021】SimCSE

文本匹配——【EMNLP 2021】SimCSE

作者头像
小爷毛毛_卓寿杰
发布2022-09-30 14:31:14
9180
发布2022-09-30 14:31:14
举报
文章被收录于专栏:Soul Joy Hub

1. 介绍

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

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

  • 目标函数 Multiple Negatives Ranking Loss:

其中,z和z’ 是两个不同的dropout随机掩码。

h_i^{z_i},h_i^{z'_i}

是相同句子

x_i

输入相同编码器,但使用两个不同的dropout随机掩码而得到的向量。

2. 实验效果

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

3. 实现

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

代码语言:javascript
复制
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也可以用于有监督的数据上训练。我们构造的有监督数据形式为

(x_i,x_i^+,x_i^-)

。简单来说,就是在训练时不只是把

x_i^-

视为负例,且把同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。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 介绍
  • 2. 实验效果
  • 3. 实现
  • 4. 有监督的训练
  • Why does it work?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档