Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks

原文链接:https://aclanthology.org/D19-1410.pdf

概述

        问题:

                BERT和RoBERT模型在进行语义匹配的时候,需要将每个可能的组合都输入到模型中,会带来大量的计算(因为BERT模型对于句子对的输入,使用[SEP]来标记句子间的分隔,然后作为一个句子输入模型)。比如在10000个句子中找到与每个句子最相似的句子对,需要进行5千万次运算,大约65个小时。因此,BERT就不太适合做语义相似查询和一些无监督的任务。

        IDEA:

                本文作者提出了Sentence-BERT(SBERT),使用孪生网络和三胞胎网络结构来对BERT进行修改,得到可用于计算余弦相似度的sentence embedding。在将相似度匹配精度不变的情况下将其运算时间由65h缩短到5s。(其实这里是因为提前将这10000个句子过完BERT后存储起来,匹配时再将query经过BERT后的向量和这些向量做比较得到相似的结果,可以看作一个离线的效果,实际上两者的运算都是一样的。)

介绍

        解决聚类和语义匹配的常见方法是将每个句子map到一个向量空间,使得语义相似的句子靠得更近。将输入句子输入到BERT中得到一个合适的sentence embedding,一般有两种方法:1)对BERT的输出层做一个average;2)使用CLS这个token的embedding。但作者后面实验表示,直接使用这样的结果作为sentence embedding ,效果会比平均GloVe embedding要差。

方法

        作者提出的SBERT结构如下,左部分是训练时的结构,右部分是在推理时的结构。

分类目标函数

        将sentence embedding u和v以及其差值|u-v|进行concatenate,然后和一个可学习的矩阵Wt进行相乘后进入softmax得到输出,如下所示。这里使用交叉墒损失函数进行优化。

回归目标函数

        如上图右部分所示,对sentence embedding u和v直接计算余弦相似度,这里使用均方误差作为目标函数进行优化。

三胞胎目标函数

        给定一个句子a(anchor sentence),正例p,负例n。使得a和p之间的距离小于a和n之间的距离,即正例之间的距离越小,负例之间的距离越大。在数学上等价于最小化以下损失函数:

                

        其中S表示sentence embedding,||.||表示距离公示,文中使用欧几里得距离并且偏移量为1    

实验

        STS上的无监督

        STS上的有监督

AFS任务 

 Wikipedia

使用SentEval进行提升

 

消融实验

总结 

        总的来说这个模型其实创新点不大,就是把BERT输出进入一个pooling后计算余弦相似度,文中提到的速度由50h减少到秒级别,也是因为离线的原因(这里其实我也是看别人博客知道的,好像论文正文里面没有提到这个问题?我就寻思明明都是过BERT,咋就快这么多),提前将那10000个句子的embedding存储好,用的时候只需要计算一个query的sentence embedding,然后和那10000个计算相似度,实际运算量并没有减少。(不过大家说这个模型在工业上用处还挺大?而且作者做了很多实验进行对比。)

        作者在文中提到一个smart batching strategy,就是将句子长度相似的放到一起,这样padding tokens就能更少一些,计算量就稍稍小一些。

参考文章

Sentence-Bert论文笔记 - 知乎

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值