论文笔记 | Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks

论文笔记 | Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks_第1张图片


作者:迪

单位:燕山大学


论文地址

代码地址

论文来源:EMNLP2019


前言

  虽然BERT和RoBERTa在诸如文本语义相似度等任务上达到了SOTA效果,但是它们还存在一些缺点:在这些任务中,它们需要将比较的两个句子都传入到模型中计算,计算开销过大。BERT模型在一个1W句子集合中,找出最相近的一个句子对,需要5千万次推断计算(约65小时)才能完成,所以BERT并不适合语义相似度搜索等任务。

  在该论文中,作者提出了一个新的模型,Sentence-BERT(简称SBERT)。SBERT采用双重(孪生)或三重BERT网络结构。通过SBERT模型获取到的句子embedding,可以直接通过余弦相似度计算两个句子的相似度,这样就大大减少了计算量。因为在使用BERT模型进行句子间相似度的判断时,需要从句子集合中,选出两个句子进行组合,传入BERT中进行计算,而使用SBERT模型,只需要将集合中每个句子单独传入到模型中,得到每个句子的embeding,计算相似度只需要使用cos函数计算两两embeding的cos距离即可。因此,使用BERT/RoBERTa模型需要65h才能完成的寻找最相似句子对任务,SBERT模型完成仅需5s。

  作者在一些STS(Semantic Textual Similarity)任务和迁移学习任务上评估SBERT模型,该模型达到了新的SOTA水平。

概述

  SBERT模型可以很好的从语义上表征一个句子,这使得语义越相似的句子在向量空间中的embeding向量距离越近。这使得SBERT模型可以很好的完成一些BERT不适合完成的任务,例如:大规模语义相似度比较、聚类、通过语义搜索的信息检索等任务。BERT判断两个句子语义是否相似,需要将两个句子拼起来传入到model里,不适合多句子相似度判断。如果从句子数量为n的集合中,找出最近似的两个句子,则需要n*(n-1)/2次比较,并且每次比较均需要传入到BERT模型中进行计算,这个开销是很大的。目前的一个通用的方法是将语义相近的句子,映射到同一向量空间中相近的位置,通过一个向量来表征整个句子。BERT惯用的表征一个句子的方式是取第一个[CLS] 的输出或所有token的输出值求和取平均来表示一个句子,经过试验证明,这些方式经常会产生质量很差的embedding。

  为了解决这些问题,作者提出了SBERT模型,SBERT模型输出的sentence embedding,可直接通过cos距离、欧式距离或曼哈顿距离就可计算出句子间相似度。与其他的句子表征模型相比,SBERT在很多任务上都取得了SOTA。

模型

  SBERT在BERT/RoBERTa的输出中添加了一个pooling操作,以导出一个固定大小的sentence embedding。本文实验了三种pooling策略:1.使用CLS令牌的输出,2.计算所有输出向量的平均值(平均值策略),3.计算输出向量的最大值(最大策略)。论文中默认采取的方式是计算均值。

  为了微调BERT/RoBERTa,该论文使用孪生网络来更新权重,使得生成的句子嵌入在语义上是有意义的,并且可以用余弦相似度进行比较。

回归任务函数

  本文使用两个句子嵌入相减代表两个句子的关系,将u,v,|u-v|进行拼接后再与可训练参数 W t ∈ R 3 n ∗ k W_t\in R^{3n*k} WtR3nk相乘,再经过softmax后计算交叉熵损失函数以调整模型权重。其中n代表了句子嵌入的维度,k表示lable的个数,模型结构如下图所示:
论文笔记 | Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks_第2张图片

分类任务函数

  计算两个句子嵌入u和v之间的相似性如下图所示。我们使用均方误差损失作为目标函数。
论文笔记 | Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks_第3张图片

训练细节

  我们在SNLI数据集和Multi-Genre NLI数据集的组合上训练SBERT。SNLI是570000个句子对的集合,标注了矛盾、不一致和中性。MultiNLI包含430000个句子对,涵盖了口语和书面语的一系列体裁。我们使用类别个数为3的分类器目标函数微调SBERT,使用的批量为16,Adam优化器的学习速率为2e-5,默认的池策略是MEAN。

实验结果

  本文的第一个实验采用的数据集是STS数据集,其中STS12-16是SemEval平台在2012-2016年发布的数据集,STSb是STSbenchmark,SICK-R是SICK相关的数据集。实验结果表明,BERT模型在该类任务上表现极差,结果比GloVe还低,也验证了前文所说的,BERT模型不适合应用于该类任务上。
论文笔记 | Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks_第4张图片

  第二个实验采用了SentEval工具包进行评测,采用了如下7个数据集。
论文笔记 | Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks_第5张图片
论文笔记 | Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks_第6张图片

思考

  这篇paper在bert的基础上使用自然语言推断任务进行微调得到本文提出的模型SBert,再使用其他数据集评测本文提出的模型SBert。从上面的实验可以看出SBert生成的句嵌入在某些任务上效果还不是太理想,生成更加具有语义的词/句嵌入仍然值得研究。

你可能感兴趣的:(自然语言处理,神经网络)