预训练模型语义相似性计算(四)--SimCSE

         接着之前的句向量表示模型进行相似句计算的方法,这篇接着介绍一种新的方法-SimCSE。文章来自普林斯顿陈丹琦,引入了对比学习的思想进行sentence embedding的学习,刷爆了无监督与有监督语义相似度计算任务,成为SOTA,甚至本文的无监督方法超过了其他有监督方法的效果,还是很惊艳的。对比学习的思想是拉近相似样本,推开不相似的样本。相似样本的构造经过实验比较采用了dropout mask的方法。

         之前的sentence embedding的方法主要是前面介绍的SBERT(孪生网络的形式)和对生成的向量进行分布归整的方法:bert-flow等。对比学习的目标就是学习一个优质的语义表示空间,使用alignment(对齐)和uniformity(均匀)来衡量效果。对齐这个指标和句向量相似的衡量一致,而均匀这个指标就是bert-flow中向量均匀分布的要求一致。

论文:https://arxiv.org/abs/2104.08821

解读:SimCSE: Simple Contrastive Learning of Sentence Embeddings - 知乎

代码:GitHub - princeton-nlp/SimCSE: EMNLP'2021: SimCSE: Simple Contrastive Learning of Sentence Embeddings

        苏剑林也在中文任务上对SimCSE进行了实验:中文任务还是SOTA吗?我们给SimCSE补充了一些实验 - 科学空间|Scientific Spaces,而美团在ACL2021上也提出对比学习文本表示模型:思想方法和结论和SimCSE也是如出一辙。

ACL 2021|美团提出基于对比学习的文本表示模型,效果提升8%

        接下来就是我使用SimCSE在具体业务场景的一些实验了:

        在之前的相似句任务上再一次进行对比实验,对无监督的SimCSE的实验结果如下:

sbert

90.5% 

simcse(cls/mean)bert-base 768维

86.3%/87% 

simcse(cls/mean)roberta-base 768维

88.4%/88.8% 

simcse(cls/mean)electra-small 64维

86.6%/86.6% 

        SimCSE的效果对比有监督的sbert还是相差了至少2个点,在没有标注语料的场景或者冷启动阶段SimCSE确实是一种很好的方法。

        在具体的业务场景下,1.对于标注语料是必不可少的,可以在损失中加入对比损失,对比损失+分类损失的PariSupCon也证实了效果优于sbert,这是实验结果;2.使用poly_encoder的方法,加大两个query的交互计算,因为在错误分析中发现了:没有聚焦到正确的主体而导致的错误,这部分错误或许可以使用attention的方式捕获;或者是使用keyword-bert的方式训练。这方面的实验尝试后续给出结果。

poly-encoder介绍及具体实验效果。

keywordBERT介绍及具体实验效果。

你可能感兴趣的:(深度学习,自然语言处理,自然语言处理,深度学习)