【文献翻译】Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks

Sentence-BERT:使用 Siamese BERT 网络的句子嵌入

【摘要】虽然BERT和RoBERTa在语义文本相似性(STS)句对回归任务上取得了最新的性能,但是它需要将两个句子都输入网络,这会导致巨大的计算开销:在10,000句子的集合中找到最相似的对需要使用BERT进行大约5000万次推理计算(约65小时)。BERT的构造使其不适用于语义相似性搜索以及聚类等无监督任务。
在该论文中,介绍了Sentence-BERT(简称SBERT),这是对预训练BERT网络的一种修改,它使用孪生网络和三重网络结构来导出语义上有意义的句子嵌入,可以使用余弦相似度进行比较。这将寻找最相似对的工作量从使用BERT/RoBERTa的65小时减少到使用SBERT的大约5秒,同时保持了BERT的准确性。
我们在常见的STS任务和迁移学习任务上评估了SBERT和SRoBERTa,它优于其他最先进的句子嵌入方法。

1介绍

在本论文中,我们介绍了Sentence-BERT(SBERT),它是使用孪生网络和三元组网络对BERT网络进行的修改,能够导出具有语义意义的句子嵌入。这使得BERT可以用于某些新任务,而这些任务迄今为止不适用于BERT。这些任务包括大规模语义相似性比较、聚类和通过语义搜索进行信息检索。
BERT在各种句子分类和句子对回归任务上设置了新的最先进的性能。BERT使用交叉编码器:将两个句子传递到transformer网络并预测目标值。但是,由于可能的组合太多,此设置不适用于各种对回归任务。在n = 10000个句子的集合中找到具有最高相似度的句子对需要BERT n*(n-1)/2 = 49 995 000 次推理计算。在现代 V100 GPU 上,这需要大约 65 小时。类似地,找到Quora超过4000万个现有问题中的哪些问题与新问题最相似可以建模为与BERT的成对比较,但是,回答单个查询需要50多个小时。
解决聚类和语义搜索的一种常用方法是将每个句子映射到一个向量空间,使得语义相似的句子很接近。研究人员已经开始将单个句子输入BERT并导出固定大小的句子嵌入。最常用的方法是平均BERT输出层(称为BERT嵌入)或使用第一个标记([CLS]标记)的输出。正如我们将展示的那样,这种常见做法会产生相当糟糕的句子嵌入,通常比平均GloVe嵌入更糟糕。
为了缓解这个问题,我们开发了SBERT。孪生网络架构使得可以导出输入句子的固定大小的向量。使用余弦相似度或曼哈顿/欧几里德距离等相似性度量,可以找到语义相似的句子。这些相似性度量可以在现代硬件上高效地执行,从而允许SBERT用于语义相似性搜索和聚类。在10,000个句子的集合中找到最相似的句子对的复杂性从使用BERT的65小时减少到计算10,000个句子嵌入(使用SBERT约5秒)和计算余弦相似度(约0.01秒)。通过使用优化的索引结构,找到最相似的Quora问题可以从50小时减少到几毫秒。
我们对NLI数据的SBERT进行了微调,它创建的句子嵌入明显优于其他最先进的句子嵌入方法,如InferSent和Universal Sentence Encoder。在七个语义文本相似性(STS)任务上,SBERT与InferSent相比提高了11.7分,与Universal Sentence Encoder 相比提高了5.5分。在句子嵌入的评估工具包SentEval上,我们分别实现了2.1和2.6的改进。
SBERT可以适应特定的任务。它在具有挑战性的参数相似性数据集和三元组数据集上有了新的最先进的性能,以区分来自维基百科文章不同部分的句子。
本论文的结构如下:第3节介绍SBERT,第4节评估SBERT在常见的STS任务和具有挑战性的Argument Facet Similarity (AFS)语料库上的表现。第5节在SentEval上评估SBERT。在第6节中,我们执行消融研究以测试SBERT的某些设计方面。在第7节中,我们比较了SBERT句子嵌入与其他最先进的句子嵌入方法的计算效率。

2相关工作

我们首先介绍 BERT,然后讨论最先进的句子嵌入方法。
BERT是一个预训练的transformer网络,它为各种NLP任务设定了新的最先进的结果,包括问答、句子分类和句子对回归。用于句子对回归的BERT输入由两个句子组成,由特殊的[SEP]标记分隔。应用超过12(基本模型)或24层(大型模型)的多头注意力机制,并将输出传递给简单的回归函数以导出最终标签。使用此设置,BERT在语义文本相似度(STS)基准测试中设置了新的最先进性能。RoBERTa表明,BERT的性能可以通过对预训练过程进行小的调整来进一步提高。我们还测试了XLNet,但它通常产生比BERT更差的结果。
BERT网络结构的一个很大的缺点是没有计算独立的句子嵌入,这使得很难从BERT中推导出句子嵌入。为了绕过这个限制,研究人员通过BERT传递单个句子,然后通过平均输出(类似于平均词嵌入)或使用特殊CLS标记的输出。这两个选项也由流行的bert-as-a-service-repository提供。据我们所知,目前还没有评估这些方法是否会导致有用的句子嵌入。
句子嵌入是一个研究得很好的领域,提出了数十种方法。 Skip-Thought训练了encoder-decoder架构来预测周围的句子。InferSent使用斯坦福自然语言推理数据集和MultiGenre NLI 数据集的标记数据来训练对输出进行最大池化的孪生BiLSTM网络.Conneau等人表明,InferSent始终优于SkipThought等无监督方法。Universal Sentence Encoder训练一个变换器网络并通过 SNLI训练增强无监督学习。Hill等人表明,训练句子嵌入的任务会显着影响它们的质量。之前的工作发现SNLI数据集适合训练句子嵌入。Yang等人提出了一种使用siamese DAN 和siamese transformer网络训练 Reddit对话的方法,该方法在STS基准数据集上取得了良好的效果。
Humeau等人解决了BERT交叉编码器的运行时开销,并提出了一种方法(多编码器)来计算 m 上下文向量和使用注意力的预计算候选嵌入之间的分数。这个想法适用于在更大的集合中找到得分最高的句子。然而,多编码器的缺点是得分函数不对称,并且计算开销对于像聚类这样的用例来说太大,这需要O(n^2)得分计算。
以前的神经句子嵌入方法从随机初始化开始训练。在本论文中,我们使用预训练的BERT和RoBERTa网络,并且仅对其进行微调以产生有用的句子嵌入。这显着减少了所需的训练时间:SBERT可以在不到20分钟的时间内进行调整,同时产生比同类句子嵌入方法更好的结果。

3模型

SBERT在BERT/RoBERTa的输出中添加了池化操作,以导出固定大小的句子嵌入。我们试验了三种池化策略:使用CLS-token的输出,计算所有输出向量的平均值(MEAN策略),以及计算输出向量的最大随时间推移(MAX策略)。默认配置是MEAN。
为了微调BERT/RoBERTa,我们创建了孪生网络和三重网络来更新权重,使生成的句子嵌入在语义上有意义,并且可以与余弦相似度进行比较。
网络结构取决于可用的训练数据。我们试验以下结构和目标函数。
**分类目标函数。**我们将句子嵌入u和v与元素差异| − | 连接起来并将其与可训练权重 ∈ R^(3n×k) 相乘:
o = softmax(Wt (u,v,|u - v|))
其中 n 是句子嵌入的维度,k是标签的数量。我们优化交叉熵损失。这种结构如图1所示。
**回归目标函数。**计算两个句子嵌入u和v之间的余弦相似度(图2)。我们使用均方误差损失作为目标函数。
三元组目标函数。给定一个锚点句a、一个肯定句和一个否定句,triplet loss 调整网络,使a和p之间的距离小于a和n之间的距离。在数学上,我们最小化以下损失函数:
max(||sa - sp|| - ||sa - sn|| + ϵ,0)
sx 是a/n/p 的句子嵌入,||∙||距离度量和边距。边距 确保至少是 ϵ比 sn 更接近 sa。作为度量,我们使用欧几里得距离并且我们设置 = 1 在我们的实验中。

3.1训练细节

我们在 SNLI和多类型 NLI 数据集的组合上训练 SBERT。SNLI是一个包含570,000个句子对的集合,这些句子对带有 contradiction、eintailment 和 neutral 标签注释。MultiNLI包含430,000个句子对,涵盖各种口头和书面文本类型。我们使用3-way softmaxclassifier 目标函数微调SBERT一个时期。我们使用了16的批量大小、学习率为2e-5的Adam优化器,以及超过10%训练数据的线性学习率作为准备。我们默认的池化策略是MEAN。

4评价——语义文本相似度

我们评估SBERT在常见语义文本相似性(STS)任务中的性能。最先进的方法通常学习一个(复杂的)回归函数,该函数将句子嵌入映射到相似度分数。然而,这些回归函数成对工作,并且由于组合爆炸,如果句子集合达到一定大小,这些回归函数通常无法扩展。相反,我们总是使用余弦相似度来比较两个句子嵌入之间的相似度。我们还使用负曼哈顿距离和负欧几里得距离作为相似性度量来进行实验,但所有方法的结果大致相同。

4.1 无监督STS

我们在不使用任何STS特定训练数据的情况下评估SBERT对STS的性能。我们使用2012-2016年的STS任务、STS基准和SICK相关数据集。这些数据集在句子对的语义相关性上提供0到5之间的标签。我们在中表明Pearson相关性不适合STS。相反,我们计算句子嵌入的余弦相似度与黄金标签之间的Spearman等级相关性。其他句子嵌入方法的设置是等效的,相似度由余弦相似度计算。结果如表1所示。
结果表明,直接使用BERT的输出会导致相当差的性能。对BERT嵌入进行平均后,平均相关性仅为54.81,使用CLStoken输出的平均相关性仅为29.19。两者都比计算平均GloVe嵌入差。
使用所描述的孪生网络结构和微调机制可以显着提高相关性,显着优于InferSent和Universal Sentence Encoder。SBERT性能比Universal Sentence Encoder差的唯一数据集是SICK-R。Universal Sentence Encoder 在各种数据集上进行了训练,包括新闻、问答页面和论坛,这似乎更适合SICK-R的数据。相比之下,SBERT仅在维基百科(通过BERT)和NLI数据上进行了预训练。
虽然RoBERTa能够提高几个监督任务的性能,但我们只观察到SBERT和SRoBERTa在生成句子嵌入方面的微小差异。

4.2 Supervised STS

STS 基准(STSb)提供了一个流行的数据集来评估受监督的STS系统。数据包括captions,news,forums三个类别的8,628个句子对。分为train(5,749)、dev(1,500)和test(1,379)。BERT通过将两个句子传递给网络并对输出使用简单的回归方法,在此数据集上设置了一个新的最先进的性能。
我们使用训练集使用回归目标函数微调SBERT。在预测时,我们计算句子嵌入之间的余弦相似度。所有系统都使用10个随机种子进行训练以对抗方差。
结果如表2所示。我们尝试了两种设置:仅在STSb上进行训练,首先在NLI上进行训练,然后在STSb上进行训练。我们观察到后来的策略导致了1-2点的轻微改善。这种两步法对BERT交叉编码器产生了特别大的影响,将性能提高了3-4个百分点。我们没有观察到BERT和RoBERTa之间的显着差异。

4.3 参数方面的相似性

我们在Misra等人的Argument Facet Similarity (AFS)语料库上评估SBERT。AFS语料库注释了来自社交媒体对话的6,000个句子参数对,涉及三个有争议的话题:枪支管制(gun control)、同性婚姻(gay marriage)、死刑(death penalty)。数据按从 0(“不同主题”)到 5(“完全等同”)的等级进行注释。AFS语料库中的相似性概念与SemEval的STS数据集中的相似性概念完全不同。STS数据通常是描述性的,而AFS数据是对话的争论性摘录。要被认为是相似的,论证不仅要提出相似的主张,还要提供相似的推理。此外,AFS中句子之间的词汇差距要大得多。因此,简单的无监督方法以及最先进的STS系统在此数据集上表现不佳。
我们在两种情况下评估此数据集上的SBERT:1)正如Misra等人所提议的,我们使用10折交叉验证评估SBERT。这种评估设置的一个缺点是不清楚方法对不同主题的泛化能力如何。因此,2)我们在跨主题设置中评估SBERT。两个主题用于训练,该方法在遗漏的主题上进行评估。我们对所有三个主题重复此操作并对结果进行平均。
SBERT使用回归目标函数进行微调。相似度得分是使用基于句子嵌入的余弦相似度计算的。我们还提供了Pearson相关性r以使结果与Misra等人的结果相当。但是,我们表明Pearson相关性有一些严重的缺点,在比较STS系统时应该避免。结果如表3所示。
无监督方法,如tf-idf、平均GloVe嵌入或InferSent在此数据集上表现相当差,得分较低。在10折交叉验证设置中训练SBERT的性能几乎与BERT相当。
然而,在跨主题评估中,我们观察到SBERT的性能下降了大约7个点的Spearman相关性。要被认为是相似的,论点应该针对相同的主张并提供相同的推理。BERT能够使用注意力直接比较两个句子(例如逐字比较),而SBERT必须将单个句子从一个看不见的主题映射到一个向量空间,这样具有相似主张和理由的论点就很接近。这是一项更具挑战性的任务,似乎需要的不仅仅是两个主题的训练才能与BERT媲美。

4.4维基百科章节区分

Dor等人使用维基百科为句子嵌入方法创建主题细粒度的训练、开发和测试集。维基百科文章分为不同的部分,专注于某些方面。Dor等人假设同一部分中的句子在主题上比不同部分中的句子更接近。他们用它来创建一个大型的弱标记句子三元组数据集:锚点句和正例来自同一部分,而负例来自同一篇文章的不同部分。例如,来自Alice Arnold 的文章:
锚点:阿诺德于1988年加入BBC广播戏剧公司(Arnold joined the BBC Radio Drama Company in 1988.),
正:2012年5月,阿诺德获得了媒体的关注(Arnold gained media attention in May 2012.),
负:鲍尔丁和阿诺德都是业余高尔夫爱好者(Balding and Arnold are keen amateur golfers.)。
我们使用 Dor 等人的数据集 我们使用 Triplet Objective,在大约180万个训练三元组上训练SBERT一个时期,并在222,957个测试三元组上对其进行评估。测试三元组来自一组不同的维基百科文章。作为评估指标,我们使用准确性:正例是否比负例更接近锚点句?
结果如表4所示。Dor等人微调了具有三元组损失的BiLSTM架构,以导出该数据集的句子嵌入。如表所示,SBERT明显优于Dor等人的BiLSTM方法。

5评估——SentEval

SentEval是一种流行的工具包,用于评估句子嵌入的质量。句子嵌入用作逻辑回归分类器的特征。逻辑回归分类器在10折交叉验证设置中针对各种任务进行训练,并为测试折计算预测精度。
SBERT句子嵌入的目的不是用于其他任务的迁移学习。在这里,我们认为Devlin等人为新任务描述的微调BERT是更合适的方法,因为它更新了BERT网络的所有层。然而,SentEval仍然可以对我们针对各种任务的句子嵌入的质量给出一个印象。
我们在以下七个SentEval传输任务上将SBERT句子嵌入与其他句子嵌入方法进行了比较:
• MR:电影评论片段的情绪预测,基于五个起始量表。
• CR:客户产品评论的情绪预测。
• SUBJ:电影评论和情节摘要中句子的主观性预测。
• MPQA:来自新闻专线的短语级意见极性分类。
• SST:带有二进制标签的斯坦福情绪树库。
• TREC:来自 TREC 的细粒度问题类型分类。
• MRPC:来自平行新闻来源的 Microsoft Research Paraphrase Corpus。
结果见表 5。SBERT能够在7项任务中的5项中取得最佳性能。与InferSent和Universal Sentence Encoder 相比,平均性能提高了约2个百分点。尽管迁移学习不是SBERT的目的,但它在此任务上优于其他最先进的句子嵌入方法。
SBERT的句子嵌入似乎很好地捕获了情感信息:与InferSent和 Universal Sentence Encoder 相比,我们观察到 SentEval 的所有情感任务(MR、CR 和 SST)都有很大改进。

SBERT 明显比 Universal Sentence Encoder 差很多的数据集是 TREC 数据集。 Universal Sentence Encoder 在问答数据上进行了预训练,这似乎有利于 TREC 数据集的问题类型分类任务。
平均 BERT 嵌入或使用 BERT 网络的CLStoken输出在各种STS任务(表1)中取得了糟糕的结果,比平均GloVe嵌入差。然而,对于SentEval,平均BERT嵌入和BERT CLS-token 输出取得了不错的结果(表5),优于平均GloVe嵌入。
原因是不同的设置。对于STS任务,我们使用余弦相似度来估计句子嵌入之间的相似度。余弦相似性平等对待所有维度。相反,SentEval将逻辑回归分类器拟合到句子嵌入。这允许某些维度可以对分类结果产生更高或更低的影响。
我们得出结论,BERT的平均BERT嵌入/CLS-token输出返回的句子嵌入无法与余弦相似度或曼哈顿/欧氏距离一起使用。
对于迁移学习,它们产生的结果比InferSent或Universal Sentence Encoder 稍差。然而,在NLI数据集上使用所描述的具有孪生网络结构的微调设置会产生句子嵌入,从而实现SentEval工具包的最新技术水平。

6消融实验

我们已经证明了SBERT句子嵌入质量的强大实证结果。在本节中,我们对SBERT的不同方面进行消融研究,以便更好地了解它们的相对重要性。
我们评估了不同的合并策略(MEAN、MAX和CLS)。对于分类目标函数,我们评估了不同的连接方法。对于每种可能的配置,我们使用10个不同的随机种子训练SBERT,并对性能进行平均。
目标函数(分类与回归)取决于注释数据集。对于分类目标函数,我们在SNLI和Multi-NLI数据集上训练SBERT-base。对于回归目标函数,我们在STS基准数据集的训练集上进行训练。性能是根据STS基准数据集的开发拆分来衡量的。结果如表6所示。
当使用NLI数据的分类目标函数进行训练时,池化策略的影响相当小。级联模式的影响要大得多。InferSent和Universal Sentence Encoder都使用(u,v,|u - v|,u * v)作为softmax分类器的输入。然而,在我们的架构中,添加元素方面的 ∗ 会降低性能。
最重要的组成部分是元素差异| − |。请注意,串联模式仅与训练 softmax分类器相关。在推论中,当预测STS基准数据集的相似性时,仅将句子嵌入和与余弦相似性结合使用。逐元素差异测量两个句子嵌入的维度之间的距离,确保相似对更近,不同对更远。
当使用回归目标函数进行训练时,我们观察到池化策略有很大的影响。在那里,MAX策略的表现明显低于MEAN或CLS-token策略。这与形成对比,后者发现InferSent的BiLSTM层使用MAX而不是MEAN池是有益的。

7计算效率

可能需要为数百万个句子计算句子嵌入,因此需要很高的计算速度。在本节中,我们将SBERT与平均GloVe嵌入、InferSent和Universal Sentence Encoder进行比较。
为了进行比较,我们使用了STS基准中的句子。我们使用带有python字典查找和NumPy的简单for循环来计算平均GloVe嵌入。InferSent4基于PyTorch。对于Universal Sentence Encoder,我们使用基于TensorFlow的TensorFlow Hub version5。SBERT基于PyTorch。为了改进句子嵌入的计算,我们实施了一种智能批处理策略:具有相似长度的句子被组合在一起,并且只填充到小批量中最长的元素。这大大减少了填充令牌的计算开销。
性能是在配备Intel i7-5820K CPU @ 3.30GHz、Nvidia Tesla V100 GPU、CUDA 9.2 和 cuDNN 的服务器上测得的。结果如表 7 所示。
在CPU上,InferSent比SBERT快约65%。这是由于更简单的网络架构。InferSent使用单个BiLSTM层,而BERT使用12个堆叠变压器层。然而,Transformer网络的一个优势是GPU上的计算效率。在那里,具有智能批处理的SBER比InferSent快约9%,比Universal Sentence Encoder 快约55%。智能批处理在CPU上实现了89%的加速,在GPU上实现了48%的加速。平均GloVe嵌入显然是计算句子嵌入的最快方法。

8总结

我们展示了开箱即用的BERT将句子映射到一个向量空间,该向量空间相当不适合用于常见的相似性度量,如余弦相似性。七个STS任务的性能低于平均GloVe嵌入的性能。
为了克服这个缺点,我们提出了Sentence-BERT(SBERT)。SBERT在siamese/triplet网络架构中微调BERT。我们评估了各种常见基准的质量,在这些基准中,它可以比最先进的句子嵌入方法取得显着改进。用RoBERTa替换BERT并没有在我们的实验中产生显着的改进。
SBERT的计算效率很高。在GPU上,它比InferSent快约9%,比Universal Sentence Encoder快约55%。SBERT可用于在计算上无法用BERT建模的任务。例如,使用层次聚类对10,000个句子进行聚类需要BERT大约65小时,因为必须计算大约5000万个句子组合。借助SBERT,我们能够将工作量减少到大约5秒。

你可能感兴趣的:(文献,bert,自然语言处理,人工智能)