@inproceedings{reimers-2019-sentence-bert,
title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks",
author = "Reimers, Nils and Gurevych, Iryna",
booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing",
month = "11",
year = "2019",
publisher = "Association for Computational Linguistics",
url = "https://arxiv.org/abs/1908.10084",
}
BERT(2018) 和 RoBERTa(2019) 在 sentence-pair regression 类任务(如,semantic textual similarity, STS, 语义文本相似度任务)中取得了 SOTA,但计算效率低下,因为 BERT 的构造使其不适合 semantic similarity search 也不适合无监督任务,如聚类。
本文提出的 Sentence-BERT(SBERT) 使用了 Siamese 和 triplet network structures 对 BERT 网络进行修改生成 semantically meaningful sentence embedding 并可以通过余弦相似度进行比较。
本文在 STS 和常见的迁移学习任务中评估了 SBERT 和 SRoBERTa,并取得了 SOTA(2019年)。
解决聚类和语义搜索的一个通用思路是把每个句子映射到向量空间且语义相似的句子的嵌入表示在向量空间中是相近的。一种尝试是将句子输入到 BERT 中并获得固定长度的 sentence embeddings。最常见的方法是 average the BERT output layer(BERT embeddings) 或者使用 first token([CLS] token) 的输出。但这种方式产生的嵌入质量很低:甚至比 2014 年的 GloVe embeddings 的还差。本文提出的 SBERT 就是解决 BERT 用来产生语义感知 embedding 问题的解决方案。
本文在 NLI data 上 fine-tune 了 SBERT,获得了超越 InferSent(2017)、Universal Sentence Encoder(2018) 的嵌入。在 7 个 STS 任务上 SBERT 均超越了前述算法,在 SentEval (2018,一种用于评估 sentence embedding 的 toolkit) 上也实现了改进。
[SEP]
token 分割。应用了超过 12 层(base-model)或者 24 层(large-model)的 Multi-head attention。输出被传递给一个简单的回归函数以获得最终的 label。RoBERTa 对 BERT 的 pre-training 过程进行了细微调整获得了进一步的提升。但 BERT 一个严重缺点是没有独立计算 sentence embedding,因此很难直接从 BERT 获得句子的嵌入。一种尝试是将单个句子输入到 BERT 中并获得固定长度的 sentence embeddings,然后通过 average the BERT output layer(BERT embeddings)【类似 average word embedding】或者使用 first token([CLS] token) 的输出。这两种方式在 bert-as-a-service repo 中有提供。SBERT 在 BERT/RoBERTa 的输出中添加了 pooling 以获得固定大小的 sentence embedding。本文实验了三种 pooling 策略(默认策略是 MEAN):1)使用CLS-token
的输出;2)MEAN-strategy:计算所有输出向量的平均值;3)MAX-strategy:计算输出向量的 max-over-time。
网络结构取决于具体任务。如下所示:
Classification Objective Function:将 sentence embedding u、v 和 element-wise difference |u-v| 连接起来,并与可训练的权重 W t ∈ R 3 n ∗ k W_t\in{R^{3n*k}} Wt∈R3n∗k相乘。
Regression Objective Function:余弦相似度;loss选用MSE(mean-squared-error)。
Triplet Objective Function:anchor sentence a, positive sentence p, negative sentence n。triplet loss 目标是让 a 和 p 之间的距离比 a 和 n 之间的距离小。
本文在 SNLI 和 Multi-Genre NLI 的组合数据集上训练 SBERT。SNLI 是一个包含57万个句子对的集合,标注了 contradiction, eintailment 和 neutral 的 label。Multi-Genre NLI 包含43万个句子对,涵盖了一系列口语和书面语的体裁。本文每个 epoch 以一个 3-way softmax-classifier 目标函数微调 SBERT。
batch size 设置为 16;采用学习率为 2e-5 的 Adam 优化器;linear learning rate warm-up over 10% of the training data;
我们评估了 SBERT 在常见文本语义相似度(STS)任务中的性能。SOTA 的方法通常学习一个(复杂的)回归函数,然而,这些回归函数是 work pair-wise 且由于组合爆炸,如果句子集合达到一定规模,这些函数通常是不 scalable 的。相反,本文使用余弦相似度来比较两个句子嵌入之间的相似度。也用负的曼哈顿距离和负的欧氏距离作为相似性度量,但结果大致相同。
数据集:STS tasks 2012 - 2016、STS benchmark、SICK-Relatedness。
训练集提供 0-5 的标签,0 表示两个句完全无关,5 表示两个句子完全相同。
经过实验证明,Pearson 相关性很不适合于评估 STS 任务。因此,使用 Spearman 相关性来评估。
数据集:STS benchmark (STSb)
微调SBERT。在预测时,我们计算句子嵌入之间的余弦相似度。所有实验都用10个随机种子进行训练,以排除统计方差。
两种训练策略:1)只在STSb训练集上训练;2)在NLI训练集上预训练,再在STSb数据集上训练。
实验结果:在SBERT模型上,第二种训练策略表现更好,提高了1-2个点。在BERT模型上,两种策略的影响较大,第二种策略提高了3-4个点。
数据集:Argument Facet Similarity (AFS)
该数据集与STS数据集相比差异较大,STS数据通常是描述性的数据,而AFS数据是来自对话中的论据节选。由于 Argument数据集的特殊性,很多方法在该数据集上表现很多差。
训练集:Wikipedia section triplets dataset
经验认为,来自同一段落的句子间是比来自不同段落的句子更接近的,相似度更高。因此,Wikipedia 训练集将来自同一段的句子作为正例,来自不同段的句子作为负例。
在 SentEval 中 sentence embedding 被用于逻辑回归分类器的特征。逻辑回归分类器在 10-fold 交叉验证设置下的各种任务上进行训练,并计算 test-fold 的 accuracy。
SBERT Sentence Embedding 并不是为了便于 Transfer Learning 到其他任务上。本文认为对新的任务微调 SBERT 是更合适的方式(因为会更新 SBERT 所有层)。但 SentEval 还是可用来评估对不同任务下当前的 embedding 的质量。
比较任务(seven SentEval transfer tasks):
分类任务采用数据集:SNLI、Multi-NLI;回归任务采用数据集:STS benchmark。
如表所示,分类任务采用的 concatenation 方式对结果影响较大,pooling 策略影响很小。但在回归任务中 pooling 策略影响很大,concatenation 与回归任务无关。