Advertisement

译文:Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks

阅读量:

摘要

BERT (Devlin et al., 2018)和RoBERTa (Liuet al., 2019)已经在句子对回归任务上取得了最新最好的效果,比如语义文本相似任务(STS)。然而,这需要将两个句子的都喂给网络,这就引起大量的计算消耗:从你1万个句子中找相思对,就需要用BERT进行5千万推力计算(耗时约65小时)。BERT的结构不合适语义相似搜索,同样也不适用于类似聚类的无监督任务。
在本论文中,我将呈现预训练BERT的改进版–Sentence-BERT (SBERT),使用二元或者三元网络结构来获得有语义意义的句向量,该向量可用于预选相似度计算。这能使寻找相思对的工作从BERT/RoBERTa的65小时减少到SBERT的5秒,同时保证BERT的正确率。
我们在常见的STS任务和迁移学习任务上评估SBERT和RoBERTa,它们优于其他最好(获取)句向量的方法。

1 简介

本论文提出Sentence-BERT(SBERT),使用二元或者三元网络结构的BERT改进版,可以生成有语义的句向量。这就使得BERT可以用于那些目前为止BERT还不适用的新任务。这些任务包括大规模语义相似比较、聚类以及语义信息检索。
BERT在各种句分类和句子对回归任务中创造了新的最优的成绩。BERT使用交叉编码器:将两个句子输入到transformer网络中,对目标值进行预测。然后这种不适合多对回归任务,因为有太多的可能组合。在n=10000个句子中找相似对,BERT最多需要 n·(n 1)/2 = 49995000次推力计算。在现代V100 GPU上操作,这需要大约65小时。类似的,在果壳网的4千万已存在问题中找到和新问题最相似的任务可以建模为用BERT成对比较,然而回答一个单一的问题则需要50个小时。
解决聚类和语义搜索常用的方法就是将句子映射到向量空间,这样语义相似的句子就会离的很近。研究人员已经开始将单个句子输入到BERT中,然后生成固定大小的句向量。最常见的方法就是将BERT的输出层(被认为是BERT的向量)平均化或者通过使用第一个token([CLS] token)作为句向量。我们即将展示,这种常见的方法会产生效果很差的句向量,通常比GloVe向量(Pennington et al., 2014)的平均更差。
为了解决这个问题,我们开发了SBERT。二元网络结构能够生成输入句子的固定长度向量。使用一个相似度量,比如预选相似度、曼哈度距离/欧式距离等,语义相似句子就能找到。在现代硬件基础上这些距离度量能被有效的使用,是的SBERT应用于语义相似搜索和聚类。在10000个句子集合中找最相似句子对的复杂性能从使用BERT的65小时减少到10000句子向量的计算量(SBERT用大约5秒)和计算预选相似度(大于0.01秒)。通过使用优化的索引结构,在果壳网中找最相似问题的任务从50小时减低到几毫秒(Johnson et al., 2017)。
我们在NLI数据集上做微调生成的句向量,显著优于其他方法生成的效果很好的句向量,比如InferSent(Conneau et al., 2017)和 通用句子编码器(Cer et al., 2018)。在7个STS任务上,SBERT取得了很大的提升,相较于InferSent提升11.7%,相较于通用句子编码器提升5.5%。(使用)句向量评价工具SentEval (Conneau and Kiela, 2018),我们分别取得了2.1%和2.6%的提升。
SBERT也适用于特定的任务。它在具有挑战性的论证相似数据集上(Misra et al.,2016)和区分维基百科文章中不同句子的三元数据集上(Dor et al., 2018)取得了最好的效果。
本文结构如下:第3小节介绍SBERT,第4小节在极具挑战的AFS语料集上评估SBERT,第5小节在SentEval上评估SBERT,第6小节进行消融研究来测试SBERT的一些设计问题,第7小节,我们与其他效果好的句向量方法对比SBERT句向量计算的高效性。

2 相关研究

我们首先探讨了BERT这一先进的自然语言处理技术(Devlin et al., 2018)。该技术基于预训练transformer架构(Vaswani et al., 2017),已在多种复杂任务中展现出卓越表现能力,在问答系统、文本分类以及语义信息提取等方面取得了显著成效

针对语义信息提取的关键任务——句子对回归(Sentence Similarity Task, STS),该技术采用两个句子作为输入,在经过特定标记分割后([SEP] token),运用多头注意力机制于12层或14层架构中(BertBaseSmall/BertBaseLarge),并通过简单的回归模型输出最终评价结果

Bert 建模在STS基准集(Cer et al., 2017)上实现了最佳性能表现,在此基准集上首次突破现有记录

3 模型

SBERT通过在BERT和RoBERTa输出层中的池化操作来生成固定大小的句向量。针对不同场景下的文本表示需求,在实验中采用了三种池化策略:一是使用CLS token输出;二是计算所有输出向量的算术平均(均值策略);三是取随时间推移而增大最大的输出向量(最大值策略)。其中,默认采用的是均值策略作为默认配置。为了进行微调训练,在Schroff等人的研究基础上(2015),我们构建了二元与三元网络结构来更新模型权重。这些网络结构建立在已获取训练数据的基础之上,并基于以下设计与目标函数展开实验验证:输入包括两个句子及其长度差异特征(u,v,|u-v|),经过可训练参数Wt作用后得到概率分布o=softmax(Wt∈ℝ³nk): (u,v,|u-v))

在这里插入图片描述

其中n是句向量维度,k是类别数。我们优化交叉熵损失函数。如图1结构所示。

在这里插入图片描述

回归任务的目标。如图所示,在图2中展示了如何计算两个句子u和v之间的余弦相似度。为了实现这一目标,在我们的模型中采用了均方差损失作为回归任务的目标。
对于三元(triplet)目标函数而言,在给定一个锚点句子(a, anchor sentence)a、一个正例句子p以及一个负例句子n的情况下,在网络中施加一种约束关系:即让锚点与正例之间的距离小于锚点与负例之间的距离。
数学上,

\text{loss} = \max(||s_a - s_p|| - ||s_a - s_n|| + \gamma, 0)

其中,
s_x表示a/p/n对应的句向量,
||.||表示欧氏距离,
\gamma为边界参数,
并且设置\gamma=1

3.1 训练详情

基于联合数据集对模型进行了训练

4 评估 - 语义文本相似

考察SBERT在常见语义文本相似任务中的性能表现

4.1 非监督的STS

我们不采用任何专门针对STS领域设计的训练数据来进行SBERT在STS领域性能的评测。具体而言,在评测过程中我们采用了STS任务(Agirre et al., 2012至2016年)、STS基准(Cer et al., 2017)以及SICK-Relatedness数据集(Marelli et al., 2014)。这些数据集均包含表示句子对之间语义关联度的标签信息,并且该关联度范围为从零到五的不同等级。Reimers等人(2016)的研究表明皮尔森相关系数并不适用于此类任务。相反地,在我们的实验中我们采用了斯皮尔曼相关性系数作为度量指标,并基于排序算法计算了各候选句向量与目标标签的相关性;其他研究中使用的句向量方法则遵循相同的基本假设与计算流程;最终实验结果如表所示

在这里插入图片描述

研究表明仅直接采用BERT输出层效果较为有限。经过均值化的处理后其相关系数仅为54.18分。采用CLStoken输出机制则仅能达到29.19分相较而言这两者的性能表现都不及均值化GloVe向量的技术水平

4.2 有监督的STS

该基准集合提供了广泛适用的监督学习体系的数据资源。该基准集合包括了总共8628对句子对比样本,并涵盖标题类、新闻类及讨论形式三类。这些数据分别划分为训练数据集大小为5749条、验证集合为1500条以及测试集合仅为1379条。基于此数据资源的实验表明,在当前领域中BERT模型表现最佳。为了优化SBERT模型的性能指标,在实验阶段我们采用了基于训练集合的数据微调策略。在实际应用中,则采用两个文本向量之间的余弦相似度作为衡量标准。为了减少结果偏差的影响,在实验过程中所有参与模型均采用了十个独立重复运行策略。

在这里插入图片描述

结果如表2所示。我们采用了两种不同的方法:第一种仅在STSb上进行模型训练;第二种则基于NLI任务进行预训练后,在STSb上进一步优化。实验结果显示,在逐步优化策略中获得的性能提升幅度为1-2%。值得注意的是,逐步优化策略对于BERT交叉编码器的表现提升较为显著。

在这里插入图片描述

非监督方法方面,如TF-IDF、平均GloVe向量以及InferSent等,在该数据集上的分类准确率较低表现不佳。基于10折交叉验证的SBERT模型在性能上与BERT相当。然而,在交叉主题验证实验中发现SBERT性能下降了7%的皮尔森相关系数值。为了保证论证的一致性论证句子应具有相同的观点和论据支持。BERT通过注意力机制能够逐词直接比较句子(例如一个词一个词地进行对比),而SBERT则需要将未知主题的单一句子映射到向量空间中使得具有相同观点和论据支持的论证句子之间的距离较小这是一项极具挑战性的任务需要在多个主题上进行训练才能达到与BERT相当的效果

4.4 维基百科片段区分

Dor等人于2018年使用维基百科针对句向量方法创建了一个细粒度主题训练、验证和测试集。维基百科的文章分布在不同的部分,每个部分的文章集中在某一领域。Dor等人假设同一部分下的句子比不同部分之间的句子在主题方面更接近。他们使用这个假设创建了一个弱标记的三元句子组的大数据集:主题和正样例来自同一个部分,而负样例来自同一篇文章的不同部分。例如,摘自Alice Arnold文章,主题:Arnold 1988年加入英国广播公司,正样例:Arnold 2012年5月获得媒体关注,负样例:Balding和Arnold都是业余高尔夫爱好者。
我们使用Dor等人的这个数据集。使用三元组目标,每次迭代在180万三元组训练集上训练SBERT,然后再222957三元组测试集上评估它。三元组测试集数据源自一组不同的维基百科文章。我们使用准确率来做评估:是不是正样例比负样例更接近主题?

在这里插入图片描述

实验结果参考表4. 研究者们采用三元组损失函数对BiLSTM架构进行了微调,并进而生成该数据集的句子向量表示。从表中可见,在性能上SBERT显著优于Dor等人所采用的BiLSTM模型。

5 评估- SentEval

SentEval (Conneau and Kiela, 2018) 是一种广泛使用的句向量质量评估工具。这些向量被用作逻辑回归分类器的特征输入,在10-折交叉验证设置下对其进行训练,并在测试集上计算预测准确率。然而,在迁移学习方面,SBERT 句向量的目标并非是为其他任务提供预训练模型。相比之下,在微调BERT网络方面更具优势。尽管如此,在多个任务中 SentEval 的表现仍然令人印象深刻。我们通过以下七个迁移任务来比较 SBERT 和其他方法:
• MR 任务旨在基于影评片段预测其语义(Pang and Lee, 2005)。
• CR 任务则专注于顾客产品评价语义的预测(Hu and Liu, 2004)。
• SUBJ 任务涉及根据影评片段推断主题(Pang and Lee, 2004)。
• MPQA 任务涉及新闻专线段落级别的观点分类(Wiebe et al., 2005)。
• SST 任务涉及斯坦福情感树图库二分类情感分析(Socher et al., 2013)。
• TREC 任务则聚焦于细粒度的问题类型分类(Li and Roth, 2002)。
• 最后是 MRPC 任务,基于相似新闻数据构建释义语料库(Dolan et al., 2004)。

在这里插入图片描述

实验结果参考表5

6 消融研究(个人理解为简化模型)

对于SBERT向量性能的验证结果非常有力。在本节中,为了更好地理解SBERT相关的重要性权重,我们进行了消融分析。针对不同的池化策略(算术平均、最大值取样以及使用CLS表示),我们进行了系统评估。用于分类任务的目标函数,我们在均值池化与加权池化之间进行了实验比较,并测试了不同拼接方法的影响效果。对于各种可能的配置组合,我们采用了10组随机种子分别进行SBERT训练,并计算各组结果的平均表现指标作为最终评估依据。目标函数的选择依据数据集特点的不同而有所差异:在分类任务中,我们的模型基于SNLI和Multi-NLI数据集进行优化;而在回归任务中,则基于STS基准训练集来优化模型参数。通过划分验证集与测试集的方式对模型性能进行度量评估,具体效果数据已详细展示于表6中

在这里插入图片描述

当在NLI数据集上训练分类器目标函数时,池化策略影响很小。拼接模式的影响很大。InferSent(Conneau et al., 2017)和通用句子编码器(Cer et al., 2018)都使用(u, v, |u-v|, u v)作为softmax分类器的输入。然而,在我们的结构中增加u v反而减低了效果。
最重要的组成部分是|u-v|。注意,这种拼接模式之和训练softmax分类器相关。根据推断,预测STS基准数据集的相似性时,只有句向量u和v用于和余弦相似度联合。元素的差别度量两个句向量各维度之间的距离,确保相似对更近或者不相似的离得更远。
当训练回归目标函数时,我们观察到池化策略有很大影响。最大池化策略表现明显比均值池化策略或者CLS-token策略要差。这对比与2017年Conneau等人的研究,他们发现对于InferSent的BiLSTM层,最大值化要比均值池化策略更有益。

7 计算效率

为了生成百万级句子所需的潜在计算效果而发展出高效的语义表示技术(sentence embeddings),必须确保系统的运行效率能够满足实际应用需求。本节中我们将SBERT系统与均值化GloVe模型(Cer et al., 2018)、InferSent模型(Conneau et al., 2017)以及通用句子编码器(Cer et al., 2018)进行了系统对比实验。
实验采用STS基准数据集中的多对多语义匹配任务来进行评估,并利用Python lookups和NumPy库提供的高效运算框架来实现均值化GloVe模型的数据处理过程;而InferSent模型则通过PyTorch框架构建了深度学习模型结构;针对通用句子编码器,则采用了TensorFlow框架下的官方接口版本进行参数初始化与训练工作。
为了进一步提升系统的处理效率,在开发SBERT系统时我们实现了特殊的批处理策略:将长度相近的任务目标语义表示样本分组处理,并在每个小组中只对超出最长样本长度的部分进行填充操作;这种设计使得系统在减少无意义填充项的数量上取得了显著的效果。
从实验结果来看,在测试用例数量达到千级别时系统的平均推理速度仍能维持在每秒数百个样本的程度水平上。具体测试结果将在下文中的表格7中详细展示。

在这里插入图片描述

在CPU平台上,在线推理网络InferSent比Sentence-BERT快65%,这是因为其采用了更为简洁的网络架构设计。具体而言,在InferSent中仅使用了一个双层循环神经网络(BiLSTM)层来提取语义信息,而Sentence-BERT则采用了由12个Transformer层堆叠而成的复杂结构。值得注意的是,在GPU加速环境下,Transformer架构的优势得以充分展现。基于智能批处理技术的Sentence-BERT在网络处理速度上较InferSent提升了48%,而在通用句子编码器的基础上进一步提高了55%;相比之下,在CPU平台上利用智能批处理技术可以使GloVe算法实现89%的速度提升,并且均值化GloVe在计算句向量的速度方面表现最为出色。

8 总结

我们证明了BERT直接将句子映射到向量空间得到的向量,很不适合用于相似度量,比如余弦相似度。7个STS任务的结果均低于均值化GloVe。
为克服这一缺点,我们提出了SBERT。SBERT在二元、三元的网络结构上微调BERT。我们在多种通用基准数据机上评估SBERT效果,与最佳的句向量方法比较,它取得了显著的改进。用RoBERTa取代BERT,并不能在我们的试验中取得显著的提升。
SBERT计算高效,在GPU上,比InferSent快9%,比通用句子编码器快55%。 SBERT可用于计算上用BERT建模不可行的任务。比如,使用分层聚类需要BERT65小时的10000句子聚类,因为需要计算5千万句子组合。使用SBERT,我们能减少到5秒。

了解更多相关知识,欢迎关注“机器爱学习”公众号~

曼哈顿型的距离度量
BERT

全部评论 (0)

还没有任何评论哟~