论文信息
题目
Sentence Embeddings using Siamese BERT-Networks
使用孪生BERT网络结构的句子嵌入
作者
Nils Reimers, Iryna Gurevych
论文水平
EMNLP 2019
其它
论文下载地址:https://arxiv.org/abs/1908.10084
该论文的相关代码已开源,github链接:sentence-transformers,sentenc-tansformers文档:官方文档
sentenc-tansformers非常好用,封装的很好,使用简单
Abstract
虽然BERT和RoBERTa在很多句子对形式的回归任务(例如文本语义相似度)上达到了SOTA效果,但是它们还存在一些缺点:在这些任务中,它们均需要将比较的两个句子都传入到模型中计算,计算开销过大。BERT模型在一个1W句子集合中,找出最相近的一个句子对,需要5千万次推断计算(约65小时)才能完成,所以BERT并不适合语义相似度搜索等任务。
在该论文中,作者提出了一个新的模型,Sentence-BERT(简称SBERT)。SBERT采用双重或三重BERT网络结构,具体结构介绍会在后文中详细介绍。如果使用的是基于RoBERTa模型,则改造后的模型简称为SRoBERTa。
通过SBERT模型获取到的句子embedding,可以直接通过cos相似度计算两个句子的相似度,这样就大大减少了计算量。因为在使用BERT模型进行句子间相似度的判断时,需要从句子集合中,选出两个句子进行组合,传入BERT中进行计算,而使用SBERT模型,只需要将集合中每个句子单独传入到模型中,得到每个句子的embeding,计算相似度只需要使用cos函数计算两两embeding的cos距离即可。因此,使用BERT/RoBERTa模型需要65h才能完成的寻找最相似句子对任务,SBERT模型完成仅需5s。
作者在一些STS任务和迁移学习任务上评估SBERT模型,该模型达到了新的SOTA水平。
Introduction
SBERT模型可以很好的从语义上表征一个句子,这使得语义越相似的句子在向量空间中的embeding向量距离越近。
这使得SBERT模型可以很好的完成一些BERT不适合完成的任务,例如:大规模语义相似度比较、聚类、通过语义搜索的信息检索等任务。
我们上面提到过,BERT判断两个句子语义是否相似,需要将两个句子拼起来传入到model里,不适合多句子相似度判断。如果从句子数量为n的集合中,找出最近似的两个句子,则需要n*(n-1)/2次比较,并且每次比较均需要传入到BERT模型中进行计算,这个开销是很大的。
目前的一个通用的方法是将语义相近的句子,映射到同一向量空间中相近的位置,通过一个向量来表征整个句子。
BERT惯用的表征一个句子的方式是取第一个[CLS] token的输出或所有输出取平均来表示一个句子,经过试验证明,这些方式经常会产生质量很差的embedding。
为了解决问题,作者提出了SBERT模型,SBERT模型输出的sentence embedding,可直接通过cos距离、欧式距离或曼哈顿距离就可计算出句子间相似度。
与其他的句子表征模型相比,SBERT在很多任务上都取得了SOTA。
Related Work
首先介绍了BERT,然后讨论了一些其他的句子表征模型,例如InferSent、 SkipThought、Universal Sentence
Encoder等,在后面的实验部分,也会与这些模型进行比较。
SBERT基于预训练的BERT改进后的模型,大大减少了训练所需的时间,SBERT经过不到20分钟的微调后,就已超越了很多其他的sentence embedding模型。
Model
SBERT模型采用三种pooling策略:CLS
、MEAN
、MAX
,默认SBERT采用MEAN pooling 。
采用双重或三重网络结构对BERT/RoBERTa进行微调,更新模型参数,使得调整后的模型,产生的句子embedding可直接通过cos计算相似度。
实验的结构和目标函数:
- 分类目标函数Classification Objective Function:
将句子向量 u u u、 v v v、 ∣ u − v ∣ |u-v| ∣u−v∣拼接起来并乘以训练得到的权重 w t ∈ R 3 n × k w_t∈R^{3n×k} wt∈R3n×k。