Sentence-BERT 论文阅读

BERT、RoBERTa已经在文本语义相似度任务(semantic textual similarity ,STS)上达到了sota。然而,BERT要求句子对拼接到一起再传入模型中,这会导致巨大的计算开销——例如,在10000条句子中寻找最相似的两条,则需要约5*10^7次计算,如果使用BERT,则需要约65小时,这导致许多涉及篇章向量的任务,如相似度计算、聚类等无从开展。

基于此,我们提出了sentence-BERT(SBERT),它使用基于预训练过的BERT的孪生网络,获得在语义上有足够意义的篇章向量。该方法在保持BERT的效果的同时,可以将计算时间从65小时降低到约5秒。

  • 论文地址:https://arxiv.org/abs/1908.10084
  • 代码地址:https://github.com/UKPLab/sentence-transformers

介绍和相关工作

面对BERT在线上部署时的计算开销问题,Humeau et al. (2019)提出过一种解决方案(即poly-encoder),该方法利用Attention机制计算m个上下文向量,然后再计算它们和预先计算好的候选embedding之间的得分。然而poly-encoder也存在不足——首先,它的打分函数并不对称;其次,它的计算开销对于聚类这样的任务而言还是太大(O(N^2))。

模型

总的来说,作者在模型方面采取了以下几种新的尝试:

  • 得到定长Embedding的不同方式:

    1. 直接取[CLS];
    2. 对得到的每个Embedding取mean-pooling;
    3. 对得到的每个Embedding取max-pooling。
  • 针对不同的任务,建立了三种不同的目标函数:

(1)Classification Objective Function

如图1左侧所示,我们分别获得两句话的句子向量 u 和 v ,并将 u  、v 和二者按位求差向量   进行拼接,再将拼接好的向量乘上一个可训练的权重   :

其中,   为句子向量维度,   为类别数。

                                                                                                        图1

(2)Regression Objective Function

如图1右侧所示,目标函数是MSE-loss,直接对两句话的句子向量 和 计算余弦相似度,然后计算。

(3)Triplet Objective Function

在这个目标函数下,将模型框架进行修改,将原来的两个输入,变成三个句子输入。给定一个锚定句 a ,一个肯定句 p和一个否定句 n ,模型通过使 p和a 的距离小于 n和a 的距离,来优化模型。使其目标函数o最小,即:

其中|| · ||代表的是两个样本的距离,本文采用的是欧氏距离,而S_a、S_p、S_n均为对应样本的sentence-Embedding。实验时,作者将超参数epsilon设为1.

实验结果

实验一

                                                                                                        图2

如图2,以上为各个方法将输入句子转为sentence-vector后计算相似度,再计算相似度和实际结果之间的斯皮尔曼系数(结果乘以100)。从图中可见,SBERT的效果优于直接输入BERT。

实验二 迁移实验

如图3,本实验选取了新的数据集Argument Facet Similarity (AFS)(Misra et al.)。该数据集主要包含三个话题的数据,因而可以进行话题迁移性测试。具体的测试方式为——使用任意三个话题中的两个作为训练集,剩下的一个作为测试集,对语义相似度进行试验。最终结果表明,sentence-BERT的迁移性较差。由于传统的BERT的cross-encoder做法,可以直接在两个句子上做Attention,而SBERT不行,他要先将一个未知topic的句子映射到向量空间才能做比较。作者认为可能需要更多的训练以满足“迁移”的性能。

 

                                                                                                        图3

实验三 消融实验

                                                                                                        图4

如图4所示,本实验检测了不同pooling方法和不同特征concat手段对结果的影响。最终发现,特征concat方式对结果有较大的影响,而pooling方法影响不大。特别的是,加上u*v这个特征后,效果反而会有所下降。

实验四 计算开销试验

                                                                                                        图5

如图5所示,该实验衡量了不同的句子Embedding生成方法的速度。从图中可以看出,在CPU上运行时,InferSent的速度比SBERT大约快65%;但切换到可并行的GPU后,transformer可并行的优势就显现出来,当SBERT采用聪明的batch size时,它的速度比InferSent快~9%。

总结

总的来说,本文是一篇BERT工程实践方面的论文。本文所提到的sentence-BERT的方法,可以快速生成大量无限复用的效果不错的sentence Embedding,得以进行聚类、相似度计算等任务。它的存在,可以让BERT在生产环境中的使用得以实现。

你可能感兴趣的:(#,BERT,NLP)