SimCSE简介以及核⼼代码详解——⽆监督⽂本向量抽取
今年NLP 领域出现了⼀个⽐较⽕的模型叫SimCSE,⽂章的全称是Simple Contrastive Learning of Sentence Embeddings。直译过来就是:通过⼀种简单的对⽐学习去做句⼦嵌⼊。⽽且在可以不要监督数据的情况下,⽣成质量较好的句⼦向量。以往⽆论是word2vec词向量做平均,还是预训练的bert⽣成的句⼦向量等⽆监督的⽅式⽣成的句⼦向量都是太好。SimSCE可以算在⽆监督句向量的抽取领域⼜往前迈了⼀步。
对⽐学习
在介绍SimCSE之前,我们先来了解⼀个叫对⽐学习的东西。对⽐学习顾名思义就是需要通过对⽐来学习,这⾥笔者拿图像领域的特征抽取来介绍⼀下对⽐学习的整个过程,如下图所⽰:
(1)将⼀只猫的图X,数据增强的⽅式⽣成另⼀张猫的图⽚作为正例X+,构建正例样本对,选择⼀只狗作为负例X-。
(2)将这个正负例样本组(X,X+,X-)同时输⼊到⼀个模型中进⾏特征抽取。
(3)优化对⽐损失,将X和X+的在特征空间⾥⾯的距离拉近,同时将X和X-在特征空间中的距离拉远。
这样整个对⽐学习的过程就介绍完了,通过对⽐学习我们就可以得到⾼质量的特征表⽰。⾄于如何构建正负例样本组(X,X+,X-),如何两个样本在衡量样本空间距离等,都是值得探索和思考的问题。
姓名关系测试对⽐学习桂花怎么画
通过对⽐学习⽅式,可以达到下⾯两个⽬的:
(1)相似图⽚早特征空间靠的很近,这就实现了相似图⽚,它们的特征也⽐较相近甚至英文
(2)⽽不相似的图⽚在特征空间中距离会⾮常⼤,导致这些具有差异性得图⽚会⽐较分散的分布在特征空间中,
从另⼀个⾓度上来思考,就是特征空间的信息会尽可能的多。
特征空间
从对⽐学习的整个流程来看,我们可以发现在没有标注数据的时候,只需要做⼀下数据增强构建正例样本对,就可以很⽅便的使⽤对⽐学习抽取出⽐较有⽤的特征向量。
五四青年节SimSCE的设计思路
爱和自由读书心得
⽽SimSCE 就是⼀个采⽤对⽐学习框架进⾏句⼦嵌⼊的⽅法,SimCES提出了有监督和⽆监督这两种对⽐学习⽅式来进⾏句⼦嵌⼊。只不过SimSCE 构建正例样本的⽅法⾮常的简单,但是却能够产⽣奇效。那我们就来看看SimCSE 到底是如何构建正样本对的。
SimCSE
⽆监督的Sim SC E:采⽤d r op out做数据增强,来构建正例
如上图所⽰,过程如下:
歌曲鸿雁歌词(1) 将同⼀个句⼦输⼊到模型两次,得到两个不同的特征向量。(这⾥就有⼈会疑问了,为什么⼀个句⼦输⼊到模型两次会得到不同的向量呢,这是由于模型中存在dropout 层,神经元随机失活会导致同⼀个句⼦在训练阶段输⼊到模型中得到的输出都会不⼀样).
(2) 在⼀个batch中,将同⼀个句⼦在模型中的两次输出当作正例,将其他句⼦的输出全部当作负例。
(3) 优化对⽐损失,增加正例之间的相似度,减⼩负例之间的相似度。
有监督的Sim SC E:数据集中存在相似句⼦对(X,X+)这样的正例样本对
如上图所⽰,过程如下:
(1) 由于数据集中存在标注好的相似数据,这⾥只需要做⼀个简单的负采样,构造(X,X+,X-)三元组。
(2) 然后将这个(X,X+,X-)同时输⼊到⽂本向量抽取的模型中进⾏特征抽取。
(3) 优化对⽐损失,增加正例之间的相似度,减⼩负例之间的相似度。
SimCSE 对⽐Loss的代码详解
一句话的故事
红尾鸲