当前位置: 首页 > article >正文

SimCSE论文阅读

  • 正负样本对构建原理正样本pair:one sentence two different embeddings as “positive pairs”. (通过dropout 作为噪声)
  • 负样本pair:Then we take other sentences in the same mini-batch as “negatives”
  • 任务: the model predicts the positive one among the negatives

在这里插入图片描述

无监督pair构造:

  • 只有自己和自己的随机dropout后的是正样本pair
  • 自己和其他的样本都是负样本

其实一个batch,比如有N个句子对,那么就有2N个句子,其中正例是1个,负样本应该是总样本数目2N减去样本本身,也就是2N-1;

在这里插入图片描述

有监督的pair构造:

按照上图理解,一个句子,有两个已经打好不同的标签的句子,进行配对。pair远离一样。

构造难度增加(一般采用这种策略):

在这里插入图片描述

infoNCE Loss的理解:

在这里插入图片描述

Q:温度常数t的作用是什么?
温度系数的作用是调节对困难样本的关注程度:越小的温度系数越关注于将本样本和最相似的困难样本分开,去得到更均匀的表示。然而困难样本往往是与本样本相似程度较高的,很多困难负样本其实是潜在的正样本,过分强迫与困难样本分开会破坏学到的潜在语义结构,

  • 因此,温度系数不能过小

考虑两个极端情况:
(1)温度系数趋向于0时,对比损失退化为只关注最困难的负样本的损失函数;
(2)当温度系数趋向于无穷大时,对比损失对所有负样本都一视同仁,失去了困难样本关注的特性。
物理的角度理解:

可以把不同的负样本想像成同极点电荷在不同距离处的受力情况,距离越近的点电荷受到的库伦斥力更大,而距离越远的点电荷受到的斥力越小。

  • 对比损失中,越近的负例受到的斥力越大,具体的表现就是对应的负梯度值越大[4]。这种性质更有利于形成在超球面均匀分布的特征。

  • 梯度越大,权重更新的越厉害,越能区分开来

构造案例:

在这里插入图片描述
在这里插入图片描述

  • 100 是指自己和自己完全一样,表示自身和自身不做相似度比较。
  • 1是指自己和自己不同的embedding
  • 不同的embedding构造:SimCSE源码中实际上是在一个batch中实现的,即[a,a,b,b…]作为一个batch去输入(复制一下)

对比学习度量学习和对比学习的思想是一样的,都是去拉近相似的样本,推开不相似的样本
但是对比学习是无监督或者自监督学习方法,而度量学习一般为有监督学习方法

对比学习的loss:

对比学习在loss设计时,为单正例多负例的形式,因为是无监督,数据是充足的,也就可以找到无穷的负例,但如何构造有效正例才是重点

度量学习的loss:

而度量学习多为二元组或三元组的形式,如常见的Triplet形式(anchor,positive,negative),Hard Negative的挖掘对最终效果有较大的影响

  • Q:对比学习中一般选择一个batch中的所有其他样本作为负例,那如果负例中有很相似的样本怎么办?

在无监督无标注的情况下,这样的伪负例,其实是不可避免的,首先可以想到的方式是去扩大语料库,去加大batch size,以降低batch训练中采样到伪负例的概率,减少它的影响。

SimCSE的缺点

从 SimCSE 的正例构建中我们可以看出来,所有的正例都是由「同一个句子」过了两次模型得到的。

  • 这就会造成一个问题:模型会更倾向于认为,长度相同的句子就代表一样的意思。
  • 原因:由于数据样本是随机选取的,那么很有可能在一个 batch 内采样到的句子长度是不相同的。
    在这里插入图片描述

解决方案:

要想消除模型对句子长度的敏感,我们就需要在构建正例的时候让输入句子的长度发生改变
改变句子长度通常有 3 种方法:随机删除、随机添加、同义词替换,但它们均存在句意变化的风险

  • 所以,通过随机重复单词,既能够改变句子长度,又不会轻易改变语义。

单/双塔

单/双塔参考链接:https://zhuanlan.zhihu.com/p/585533302

关于PromptPromptBert:

  • 作者认为,原生BERT表现不好主要是因为词语频率、大小写、subword等token导致的bias,而BERT本身各层Transformer都没有纠正这个问题。
  • 通过利用prompt,可以更有效地使用BERT各层中的知识,并且用[MASK]来表示embedding的话,可以避免像以前一样做各种token的平均,从而避免了token引入的偏差。

http://www.kler.cn/a/156424.html

相关文章:

  • ffmpeg内存模型
  • Stored procedures in PostgreSQL
  • 欧国联的规则,你都了解吗?
  • yolov7论文翻译
  • 51c视觉~合集6
  • 一文了解珈和科技在农业遥感领域的服务内容和能力
  • 2023年年末Java面试题
  • Spring Task 定时任务框架
  • read()之后操作系统都干了什么
  • 自动驾驶学习笔记(十四)——感知算法
  • Ai2 Starter模拟器:中文绿色最新版下载及使用方法
  • Pytorch进阶教学——训练一个图像分类模型(GPU)
  • 【开源】基于Vue.js的假日旅社管理系统
  • Python词频统计(数据整理)
  • 【开源】基于JAVA语言的APK检测管理系统
  • 2024年甘肃省职业院校技能大赛(中职教师组)网络安全竞赛样题卷④
  • h5进行svga动画礼物特效播放的代码实现队列按顺序播放
  • 终端安全管理软件是监控软件吗
  • Cesium 展示——新增需求和分析
  • 2023年关于爬取Bilibili(B站)视频的一些最新资源和案例
  • Synchronized关键字的底层原理
  • 关系型数据库的数据隔离级别Read Committed与Repeatable Read
  • springboot(ssm 二手图书交易系统 图书销售系统Java(codeLW)
  • 删除PPT文件的备注内容
  • python爬虫之创建属于自己的ip代理池
  • 行业分析:2023年木炭行业市场需求及发展前景