论文笔记--SimCSE: Simple Contrastive Learning of Sentence Embeddings

news2025/1/24 14:28:03

论文笔记--SimCSE: Simple Contrastive Learning of Sentence Embeddings

  • 1. 文章简介
  • 2. 文章概括
  • 3 文章重点技术
    • 3.1 对比学习 Contrastive Learning
    • 3.2 Unsupervised SimCSE
    • 3.3 Supervised SimCSE
    • 3.4 Anisotropy
    • 3.5 Alignment and Uniformity
  • 4. 文章亮点
  • 5. 原文传送门
  • 6. References

1. 文章简介

  • 标题:SimCSE: Simple Contrastive Learning of Sentence Embeddings
  • 作者:Tianyu Gao, Xingcheng Yao, Danqi Chen.
  • 日期:2021
  • 期刊:arxiv preprint

2. 文章概括

  文章给出了一种通过对比学习得到句子嵌入的方法:SimCSE。数值试验表明Unsupervised SimCSE在非监督STS任务上的表现超过SOTA,upervised SimCSE在监督STS任务上的表现超过SOTA。相比于SBERT[1],文章提出的SimCSE得到的句子嵌入具有更好的一致性和对齐性。
  文章整体框架如下
SSimCSE

3 文章重点技术

3.1 对比学习 Contrastive Learning

  对比学习是一种学习句子嵌入的有效方法,旨在通过将语义相近的句子拉近,语义不同的句子推远。具体来说,假设我们有标注数据集 D = { ( x i , x i + ) } i = 1 m \mathcal{D} = \{(x_i, x_i^+)\}_{i=1}^m D={(xi,xi+)}i=1m,其中每一对样本 ( x i , x i + ) (x_i, x_i^+) (xi,xi+)表示语义相关的正样本,令 h i \boldsymbol{h_i} hi h i + \boldsymbol{h_i}^+ hi+分别表示 x i x_i xi x i + x_i^+ xi+对应的向量表示,则针对每个大小为 N N N的mini-batch(即 N N N个样本对),对比学习的目标为 l i = − log ⁡ e s i m ( h i , h i + ) / τ ∑ j = 1 N e s i m ( h i , h j + ) / τ l_i = -\log \frac{e^{sim(\boldsymbol{h_i}, \boldsymbol{h_i}^+)/\tau}}{\sum_{j=1}^N e^{sim(\boldsymbol{h_i}, \boldsymbol{h_j}^+)/\tau}} li=logj=1Nesim(hi,hj+)/τesim(hi,hi+)/τ,其中 τ \tau τ为温度参数,当 τ \tau τ比较小的时候,可以令正负样本的差异增大; s i m ( h i , h j + ) sim(\boldsymbol{h_i}, \boldsymbol{h_j}^+) sim(hi,hj+)表示 h i , h i + \boldsymbol{h_i}, \boldsymbol{h_i}^+ hi,hi+之间的cosine相似度, h i , h i + \boldsymbol{h_i}, \boldsymbol{h_i}^+ hi,hi+ x i , x i + x_i, x_i^+ xi,xi+输入BERT[2]/RoBERTa[3]得到的嵌入,然后我们根据上述训练目标将BERT/RoBERTa的参数进行微调。

3.2 Unsupervised SimCSE

  SimCSE的思想非常简单,即我们将相同的句子做不同的随机掩码,作为对比学习模型中的正样本输入。比如我们有句子集合 { x i } \{x_i\} {xi},则我们令 x i + = x i x_i^+=x_i xi+=xi,但分别将 x i , x i + x_i, x_i^+ xi,xi+作为独立的输入进行不同的dropout masks输入到Transformer模型。具体来讲,我们对 x i , x i + x_i, x_i^+ xi,xi+分别生成随机mask z i , z i + z_i, z_i^+ zi,zi+用于dropout token,然后我们得到它们各自的向量嵌入 h i z i , h i z i + \boldsymbol{h}_i^{z_i}, \boldsymbol{h}_i^{z_i^+} hizi,hizi+,从而我们的损失函数变为 l i = − log ⁡ e s i m ( h i z i , h i z i + ) / τ ∑ j = 1 N e s i m ( h i z i , h i z j + ) / τ l_i = -\log \frac{e^{sim(\boldsymbol{h}_i^{z_i}, \boldsymbol{h}_i^{z_i^+})/\tau}}{\sum_{j=1}^N e^{sim(\boldsymbol{h}_i^{z_i}, \boldsymbol{h}_i^{z_j^+})/\tau}} li=logj=1Nesim(hizi,hizj+)/τesim(hizi,hizi+)/τ.
  我们可以将dropout mask视为一种最小化的数据增强方法。为了验证该方法的性能,我们将其与裁剪、单词删除、删除一个单词、同义词替换和MLM这些数据增强方法进行对比,发现我们的dropout方法表现最好。
data-aug

3.3 Supervised SimCSE

  SimCSE可以利用标注数据进一步提升模型性能。文章考虑NLI任务数据。NLI任务中,给定一对句子,它们的关系为entaiment(蕴含), neutral(中立)或contradiction(对立)。训练时,我们可以只考虑entailment的样本作为正样本对,此时可直接使用上述对比损失函数。
  或者我们可以将对立的标注也引入模型,此时我们将样本对拓展为 ( x i , x i + , x i − ) (x_i, x_i^+, x_i^-) (xi,xi+,xi),训练目标定义为 l i = − log ⁡ e s i m ( h i , h i + ) / τ ∑ j = 1 N e s i m ( h i , h j + ) / τ + e s i m ( h i , h j − ) / τ l_i = -\log \frac{e^{sim(\boldsymbol{h_i}, \boldsymbol{h_i}^+)/\tau}}{\sum_{j=1}^N e^{sim(\boldsymbol{h_i}, \boldsymbol{h_j}^+)/\tau} + e^{sim(\boldsymbol{h_i}, \boldsymbol{h_j}^-)/\tau}} li=logj=1Nesim(hi,hj+)/τ+esim(hi,hj)/τesim(hi,hi+)/τ.
  实验证明,负样本(hard negative)的引入可有效的增强模型表现:
hard-neg

3.4 Anisotropy

  最近的一些论文表明BERT产生的语言表示会存在各向异性问题,即生成的向量在高维空间中类似一个锥体,这可能会严重限制词向量的表达能力。
  解决上述问题的一种简单方法为后处理,我们可以减轻一些主要成分从而不让一些特征对整体的影响过大,或者我们可以将嵌入映射到一个各项同性的空间。另一种方法为在训练过程增加正则项。
  在本文中,我们可以证明我们提出的dropout方法可以有效地缓解各向异性问题。事实上,上述增加了hard negative的对比损失函数可写成 − 1 τ E ( x , x + ) ∈ P p o s [ f ( x ) T f ( x + ) ] + E x ∈ P d a t a [ log ⁡ E x − ∈ P d a t a [ e f ( x ) T f ( x + ) / τ ] ] -\frac 1\tau \mathbb{E}_{(x, x^+)\in \mathcal{P}_{pos}} \left[f(x)^Tf(x^+)\right] + \mathbb{E}_{x \in \mathcal{P}_{data}} \left[\log \mathbb{E}_{x^- \in \mathcal{P}_{data}} \left[e^{f(x)^Tf(x^+)/\tau}\right]\right] τ1E(x,x+)Ppos[f(x)Tf(x+)]+ExPdata[logExPdata[ef(x)Tf(x+)/τ]],其中第一项是为了让正样本尽可能相似,第二项是为了让负样本尽可能拉远。当 P d a t a \mathcal{P}_{data} Pdata是在 { x i } i = 1 m \{x_i\}_{i=1}^m {xi}i=1m中均匀采样有限次时,上式第二项可写作 E x ∈ P d a t a [ log ⁡ E x − ∈ P d a t a [ e f ( x ) T f ( x + ) / τ ] ] = 1 m ∑ i = 1 m log ⁡ ( 1 m ∑ j = 1 m e h i T h j / τ ) \mathbb{E}_{x \in \mathcal{P}_{data}} \left[\log \mathbb{E}_{x^- \in \mathcal{P}_{data}} \left[e^{f(x)^Tf(x^+)/\tau}\right]\right] \\ = \frac 1m \sum_{i=1}^m \log \left(\frac 1m \sum_{j=1}^m e^{\boldsymbol{h_i}^T \boldsymbol{h_j}/\tau}\right) ExPdata[logExPdata[ef(x)Tf(x+)/τ]]=m1i=1mlog(m1j=1mehiThj/τ)。再由Jensen不等式[5]和 log ⁡ \log log为凹函数,我们有 log ⁡ ( 1 m ∑ j = 1 m e h i T h j / τ ) ≥ ∑ j = 1 m 1 m log ⁡ ( e h i T h j / τ ) = 1 m τ h i T h j \log \left(\frac 1m \sum_{j=1}^m e^{\boldsymbol{h_i}^T \boldsymbol{h_j}/\tau}\right) \ge \sum_{j=1}^m \frac 1m \log (e^{\boldsymbol{h_i}^T \boldsymbol{h_j}/\tau}) = \frac 1{m\tau} \boldsymbol{h_i}^T \boldsymbol{h_j} log(m1j=1mehiThj/τ)j=1mm1log(ehiThj/τ)=mτ1hiThj,从而损失函数的第二项满足 E x ∈ P d a t a [ log ⁡ E x − ∈ P d a t a [ e f ( x ) T f ( x + ) / τ ] ] ≥ 1 m 2 τ ∑ i , j h i T h j \mathbb{E}_{x \in \mathcal{P}_{data}} \left[\log \mathbb{E}_{x^- \in \mathcal{P}_{data}} \left[e^{f(x)^Tf(x^+)/\tau}\right]\right]\ge \frac 1{m^2\tau} \sum_{i,j}\boldsymbol{h_i}^T \boldsymbol{h_j} ExPdata[logExPdata[ef(x)Tf(x+)/τ]]m2τ1i,jhiThj.记 W = ( h 1 T , … , h m T ) T W = (\boldsymbol{h_1}^T,\dots, \boldsymbol{h_m}^T)^T W=(h1T,,hmT)T,考虑到 h i \boldsymbol{h_i} hi式正则化之后的向量,我们有 W W T WW^T WWT的对角线上都是1。事实上,考虑实对称矩阵 W W W的特征分解 W = Q Λ Q − 1 W=Q\Lambda Q^{-1} W=QΛQ1,其中 Q Q Q为正交矩阵,则 t r ( W W T ) = t r ( Q Λ Q − 1 ( Q Λ Q − 1 ) T ) = t r ( Q Λ Q − 1 Q − 1 T Λ T Q T ) = t r ( Q Λ Λ T Q T ) = ∑ j λ j tr(WW^T) = tr(Q\Lambda Q^{-1}(Q\Lambda Q^{-1})^T) = tr(Q\Lambda Q^{-1}{Q^{-1}}^T \Lambda^TQ^T ) \\= tr(Q\Lambda \Lambda^T Q^T)=\sum_j \lambda_j tr(WWT)=tr(QΛQ1(QΛQ1)T)=tr(QΛQ1Q1TΛTQT)=tr(QΛΛTQT)=jλj,另一方面我们有 t r ( W W T ) = n tr(WW^T)=n tr(WWT)=n,从而 ∑ j λ j = n \sum_j \lambda_j=n jλj=n。又由Merikoski定力,可得到 S u m ( W W T ) Sum(WW^T) Sum(WWT)是其最大特征值的一个上界,从而当我们最小化损失函数的时候,损失函数的第二项自然会变小,故有 1 m 2 τ ∑ i , j h i T h j = 1 m 2 τ S u m ( W W T ) ≥ λ l a r g e s t \frac 1{m^2\tau} \sum_{i,j} \boldsymbol{h_i}^T \boldsymbol{h_j}=\frac 1{m^2\tau}Sum(WW^T)\ge \lambda_{largest} m2τ1i,jhiThj=m2τ1Sum(WWT)λlargest会变小。总结下来,我们通过沿着损失函数减小的方向学习,可以使得 W W T WW^T WWT的最大特征值被削弱,而由于所有特征值之和是定值,故其它特征值会增加,从而有效提高句嵌入的uniformity

3.5 Alignment and Uniformity

  对比学习有两个关键的度量指标:Alignment和Uniformity。Alignment表示正样本之间的距离,其值越小越好。Uniformity表示随机采样的样本是否均匀分布,其值越小越好。具体定义如下 l a l i g n : = E ( x , x + ) ∈ P p o s ∥ f ( x ) − f ( x + ) ∥ 2 l u n i f o r m : = log ⁡ E ( x , y ) ∼ i . i . d . P d a t a e − 2 ∥ f ( x ) − f ( x + ) ∥ 2 l_{align} := \mathbb{E}_{(x, x^+)\in \mathcal{P}_{pos}} \Vert f(x) - f(x^+)\Vert^2 \\l_{uniform} := \log \mathbb{E}_{(x, y)\overset{i.i.d.}{\sim} \mathcal{P}_{data}} e^{-2\Vert f(x) - f(x^+)\Vert^2} lalign:=E(x,x+)Pposf(x)f(x+)2luniform:=logE(x,y)i.i.d.Pdatae2∥f(x)f(x+)2
  上述我们已经证明dropout可以缓解各向异性,自然地,uniformity也会随之提升。数值实验也表明,SimCSE可有效增强学习到的句子嵌入的Alignment和Uniformity:
Align_unifom

4. 文章亮点

  文章提出了SimCSE,一种基于dropout的数据增强方法。通过该方法训练的BERT系列模型在STS任务上取得了新的SOTA。且文章提出了非监督和监督SimCSE方法,以供不同场景的下游任务学习。SimCSE得到的句子嵌入给出了更好的Alignment和Uniformity,且有效缓解了BERT模型产生的各向异性,从而高效地给出句子表达。

5. 原文传送门

SimCSE: Simple Contrastive Learning of Sentence Embeddings

6. References

[1] 论文笔记–Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
[2] 论文笔记–BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
[3] 论文笔记–RoBERTa: A Robustly Optimized BERT Pretraining Approach
[4] 各向异性
[5] Jensen 不等式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/632261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring中Aop实现日志功能

文章目录 前言1.环境搭建2.设计日志记录表3.aop需要引入aspectj依赖4.日志实体类设计5.自定义日志BusiLog注解6.定义日志切面6.1 此处只使用了环绕通知6.2 Aspect中有5种通知 7.业务中使用注解8.测试8.1 测试查询8.2 测试删除 前言 上篇分享了jdk动态代理以及cglib代理&#x…

SQL注入总结

Sql注入定义: 就是通过把sql命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行的sql命令的目的。 sql注入分类: 基于联合查询 基于错误回显 基于盲注,分时间盲注和布尔型的盲注 基于user-agen…

NIN(Network In Network)

目录 论文信息摘要批注 主要工作1. MLPCONV结构1.1为什么11卷积层可以代替MLP层1.2 批注2. Global Average Pooling(GAP)3、NIN网络结构NIN论文解读及个人理解NIN网络的代码实现(pytorch) 参考文献 论文信息 论文名称:Network In Network 论…

SQL注入—报错注入

0x00 背景 SQL注入长期位于OWASP TOP10 榜首,对Web 安全有着很大的影响,黑客们往往在注入过程中根据错误回显进行判断,但是现在非常多的Web程序没有正常的错误回显,这样就需要我们利用报错注入的方式来进行SQL注入了。这篇文章会讲…

SpringBoot集成WebSocket的两种方式

本站在2014年4月时曾全面的学习HTML5的技术,特写过HTML5的WebSocket示例,当时使用的Servlet3.0规范中的API,需要Tomcat7的支持(貌似在Tomcat6的后期维护版本也增加了WebSocket的支持),早在当初该示例还是本…

SVN注册下载安装以及使用一气呵成

本博客根据SVNbucket官方视频学习制作的,这里记录本人操作的记录 视频链接: https://www.bilibili.com/video/BV1k4411m7mP?vd_sourcea4c65e14d1ff11ea858cadc164fbb59e 一 .SVN的介绍 1.SVN是什么 查阅资料可以知道 ,这是一个开放源代码的版本控制系统,管理着随时间改变的…

docsify项目部署(华为云+宝塔+centos+docker+nginx)踩坑指南

docsify部署(华为云宝塔centosdockernginx) 🗡1、安装docker 首先在服务器中安装docker sudo yum install -y yum-utils由于之前我的python默认版本升级到了python3,但yum执行使用的是python2,就遇到报错 File &quo…

Hbase架构

HBase 系统遵循 Master/Salve 架构,由三种不同类型的组件组成: client 提供了访问hbase的接口提供cache缓存提高访问hbase的效率 , 比如region的信息 Zookeeper保证任何时候,集群中只有一个 Master;存储所有 Region 的寻址入口&…

基于深度学习的高精度工人阶梯检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度工人阶梯检测识别系统可用于日常生活中或野外来检测与定位工人阶梯目标,利用深度学习算法可实现图片、视频、摄像头等方式的工人阶梯目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5…

Verilog基础:标识符的层次名引用

相关文章 Verilog基础:表达式位宽的确定(位宽拓展) Verilog基础:表达式符号的确定 Verilog基础:数据类型 Verilog基础:位宽拓展和有符号数运算的联系 Verilog基础:case、casex、ca…

Java8 Stream详解及创建流方法使用示例(二)

本章介绍Stream 创建流的操作:创建流指的是将一个集合或其他数据源转换为 Stream 流对象的过程。通常情况下,我们可以使用 Stream 类的静态方法来创建流对象,如 Stream.of()、Collections.stream() 等。这些方法将返回一个 Stream 流对象&…

【模块三:职业成长】35|模块导读:回过头来看,你觉得架构师到底是做什么的?

你好,我是郭东白。我们今天就正式进入模块三的学习了。 我们在开篇词里面介绍了,模块三的目的是向你介绍架构师的能力维度,以及获取这些能力的方法。既然是总结架构师成长的课程,那么“什么是架构师”就是一个绕不过去的话题。 …

操作系统-内存管理-虚拟内存管理

目录 一、虚拟内存定义和特征 二、请求分页管理 页表机制 缺页中断机构 地址变换机构 三、页面置换算法 3.1最佳置换算法(OPT) 3.2先进先出置换算法(FIFO) 3.3最近最久未使用置换算法(LRU) 3.4时钟置换算法(CLOCK) 3.4.1简单时钟置换算法 3.4.2改进型时钟置换算法 四、…

数据库—mysql、数据库编程(API)

1. Linux平台准备 &#xff08;1&#xff09;安装SDK开发包的命令 sudo apt-get install libmysqlclient-dev &#xff08;2&#xff09;编译时需要链接的库:-lmysqlclient 2. mysql 的初始化和清理 #include <mysql/mysql.h> MYSQL mysql1; //创建句柄 mysql_init(&…

springboot+java高校图书馆图书借阅挂失崔还系统

功本次设计任务是要设计一个图书借阅系统&#xff0c;通过这个系统能够满足图书借阅系统的管理及用户的图书借阅功能。系统的主要功能包括&#xff1a;主页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;借阅证件管理&#xff0c;挂失信息管理&#xff0c;图书信息管理…

华为OD机试真题 JavaScript 实现【快速寻找某字符】【牛客练习题】

一、题目描述 给定一个一个目标值 target和一个 元素升序的无重复数字字符串 &#xff0c;写一个函数搜索 字符串 中的 target&#xff0c;如果目标值存在返回下标&#xff08;下标从 0 开始&#xff09;&#xff0c;否则返回 -1。 二、输入描述 第一行输入一个目标值target…

pullup和pulldown在verilog中的使用方法

0 前言 这段时间涉及到了IO-PAD&#xff0c;在IO-PAD的RTL的时候注意到了pullup和pulldown&#xff0c;对这个知识比较好奇&#xff0c;就研究了一下&#xff0c;顺便记录下来&#xff0c;IO-PAD的内容等我再研究研究再考虑记录吧 >_< 1 pullup和pulldown的介绍 pullu…

springboot3错误处理机制源码分析

ErrorMvcAutoConfiguration 在springboot启动时会自动装配默认的错误处理机制 ErrorMvcAutoConfiguration springboot正在运行&#xff0c;此时发生了404的错误。&#xff08;业务错误场景&#xff09;分析底层处理流程。 1.如果在对应的controller层中设置了对应的错误处理器…

【裸机开发】链接脚本(.lds文件)的基本语法

目录 一、什么是链接脚本&#xff1f; 二、链接脚本的基本语法格式 1、常用命令 2、内置变量 三、链接脚本的简单案例 一、什么是链接脚本&#xff1f; 一段程序的编译需要经历四个阶段&#xff08;预处理—编译—汇编—链接&#xff09;&#xff0c;而链接脚本管理的就是…

专业实习报告范本4篇

专业实习报告范本1 一、实习起止日期&#xff1a; 二、实习单位及部门&#xff08;岗位&#xff09;&#xff1a; 三、主要实习内容&#xff1a; 对基础知识和专业理论知识的掌握及运用情况&#xff1a; 通过两年半的学习和两个月的紧张培训&#xff0c;让我学会了电路图的分析…