读SBERT论文的一些报告
其次,在计算上,有与BERT是做NSP任务上是两个句子投入到BERT里面算,那么总共需要计算次数就是n*(n-1)/2次,1w的句子需要49995000次运算,作者用V100GPU上花了65h。原文是这样描述:
而作者在文章中夹带用SBERT计算1w个句子向量只需要5s,然后就散cosine相似度约0.01秒,原文描述如下:
从bert和Sbert结构上看
原生bert的计算句子向量结构图:
而SBERT分开两个网络,彼此独立计算句子向量,也就是它的复杂度是O((lenA)2 +(lenB)2),计算完后句子向量,可以直接计算cosine相似度。
而这种结构就是使用孪生的网络,下图两个bert网络共享权重,即这两个编码器都是一样的。
关于孪生网络和sentence bert这个介绍,老师您可以看看这个知乎解释(https://zhuanlan.zhihu.com/p/346782812),里面介绍了孪生网络做文本匹配以及SBERT的说明,有点意思。
下面是关于文章作者借鉴孪生网络实现的SBERT模型:
作者这里用到spearman rank correlation(斯皮尔曼相关系数),将计算句子相似度划分0-5个等级。0表示完全不同,5表示完全等价
作者实验出来的结果对比图:
句子相似度任务上得到的结果:
文本匹配得到的结果:
另外知乎上有些帖子说明SBERT为什么比较BERT快以及SBERT的不足,我觉得挺有道理的,自己还没发现这些: