SimCse论文详解
背景
句向量表征技术」一直都是NLP领域的热门话题,粗略来看分了几个时代:
(1)在BERT前时代,一般都采用word2vec训练出的word-embedding结合pooling策略进行句向量表征,
(2)在有训练数据情况下,采用TextCNN/BiLSTM结合Siamese network策略进行句向量表征。
(3)在BERT时代,人们借助预训练语言模型的固有优势,一般采用BERT模型的[CLS]向量作为句向量表征;
(4)现在:Sentence-Bert诠释了在存在训练数据的情况下,如何在BERT模型上获取更好的句向量表征。后面又有了「BERT-Flow」、「BERT-Whitenning」、「ConSERT」、「SimCSE」、「R-Drop」、「ESimCSE」等方法。
主要贡献:
从前段时间的BERT-Flow, BERT-whitening到最近的这个SimCSE。BERT-Flow以及BERT-whitenning其实像是后处理,将bert的输出进行一定的处理来解决各向异性的问题。本篇的这个工作则是采用了自监督来提升模型的句子表示能力,说到自监督最关键的问题应该就是如何构建正负例了。
今天在这里带着自己的理解,跟大家一起精读下「SimCSE」论文,被收录在EMNLP2021,希望对大家有所帮助。
paper地址:https://arxiv.org/pdf/2104.08821.pdf
code地址:https://github.com/princeton-nlp/SimCSE
一、介绍
SimCSE(simple contrastive sentence embedding framework),即「简单的对比句向量表征框架」。SimCSE共包含了无监督和有监督的两种方法。
1.「无监督方法」:
采用dropout技术,对原始文本进行数据增强,从而构造出正样本,用于后续对比学习训练;
2.「监督学习方法」:
借助于文本蕴含(自然语言推理)数据集,将蕴涵-pair作为正例,矛盾-pair作为难负例,用于后续对比学习训练。并且通过对比学习解决了预训练Embedding的各向异性问题,使其空间分布更均匀,当有监督数据可用时,可以使正样本直接更紧密。模型结构如下图所示:
二、无监督
结果比较
三、有监督
在我们的有监督的SimCSE中,我们成功利用了基于自然语言推理(NLI)数据集进行句子嵌入学习,并将受监督的句子对纳入对比学习中。
数据集中已经包含相似文本对。
四、缺点:SimCSE遗留的两个问题:
1、SimCSE通过dropout构建的正例对包含相同长度的信息(原因:Transformer的Position Embedding),会使模型倾向于认为相同或相似长度的句子在语义上更相似(insight很合理);
2、更大的batch size会导致SimCSE性能下降(这点确实很困扰)