文章地址:https://arxiv.org/abs/1908.10084
BERT和RoBERTa在一些任务中已经取得了不错的结果,但是在处理句子对相关的任务时,它们要求将2个句子一起输入到网络当中训练,而这又会导致高昂的计算代价。因此这篇论文的作者提出了Sentence-BERT(SBERT),其使孪生或三生网络架构(siamese and triplet network)生成有意义的句子嵌入,然后可用余弦相似度进行比较,由于上述网络架构是可以并行对句子进行编码的,因此可以极大地缩减句子对任务的处理时间。
SBERT在BERT模型的基础上添加了一个池化操作,其实这里作者总共尝试了三种方式,分别是:[CLS]、MEAN-strategy、MAX-strategy,通过实验后最好的方式为MEAN-strategy。
作者一共设置了3种结构和目标函数。
Classification Objective Function:分类目标函数
分类架构如上所示,这里作者为了更好的学习到2个句子之间的交互,运用了以下策略:
损失就是常见的交叉损失熵。当然作者这里也测试了几种交互或特征融合方式的策略,结果见下图:
Regression Objective Function:回归目标函数:
这个就是简单地计算2个句子之间的余弦相似度,其实作者也尝试过欧式距离或者曼哈顿距离,但余弦相似度的表现结果最好。利用均方误差作为损失函数。
Triplet Objective Function.:三生网络:这个就是给定锚点句a,正例p,负例句n,训练方式就是让a和p的距离尽可能的进,让a和n的距离尽可能的远,公式如下所示,作者这里就是简单的用欧氏距离。
对于实验和训练(维基百科、句子对分类任务)的细节不再多说,感觉这篇文章最值得借鉴的地方就是这个句子间的交互性,分类网络的那几种方式,以及回归网络的余弦相似度、各种距离等,也许可以用到其他任务当中,而且通过2个相同的编码器并行编码句子可以充分硬件,节约时间。