1 简介
BERT在语义文本相似任务上需要输入句子对(两个句子),这会引起巨大的计算开销。如在n=10000个句子中找到相似的句子对,BERT要进行n*(n-1)/2=49995000次预测计算,在单个V100 GPU上,需要运行65小时。即BERT的这种结构使其在不适合语义相似搜索任务上,以及聚类这种非监督任务上。
本文提出2019年 Sentence-BERT(SBERT),预训练BERT的一个修改版本,使用联体或者三元网络结构来获得语义上有意义的sentence embeddings,可以使用cosine-similarity进行比较。在上述寻找相似句子对任务上,用SBERT,只需要5秒钟。
BERT网络结构的另一个大的缺点是其没有计算独立的sentence embeddings。为了克服这个限制,研究者将单个语句输入BERT,然后通过平均各输出来获得一个固定大小的向量,或者只是采用CLS token的输出。
而Sentence-BERT的sentence embeddings效果也很好。
2 模型
2.1 Classification Objective Function
如下图,将两个BERT链接起来(联体结构,siamese network structure)。
2.2 Regression Objective Function
计算两个sentence embeddings(u和v)的相似性(cosine-similarity)。如下图,
2.3 Triplet Objective Function
三元。给定一个句子a,及其相应正的句子p,负的句子n。如下公式所示,三元损失是使a与p的距离比a与n的距离小,最小化下面的损失函数:
3 实验结果
3.1 Unsupervised STS
采用斯皮尔曼等级相关(Spearman rank correlation)评价。如下表,可以看到SBERT相关最好。
3.2 Sentence embeddings
虽然SBERT的目的不是迁移学习,但他的Sentence embedding表现很好。如下表,
4 Ablation Study
如下表所示,在 NLI data上,pooling strategy的作用影响较小,而concatenation的作用较大。链接方式中|u-v|的作用明显。