sentence-BERT

Abstract

朴素bert和roberta在句子分类和句子对回归表现好,但因为模型结构问题不适用于语义相似度检索和聚类。【朴素bert即是语言模型也是估计器,不能拿出单独的句向量】

作者改变了朴素Bert的结构为孪生和三胞网络,可以获得好的句向量,保证了精度的同时极大加快了速度。

Introduction

新的模型适用于大规模的语义检索。新的模型把孪生网络的特征提取层换成了bert

以往人们的做法是用所有token的输出向量的平均池化或者CLS token,这样产生的句向量甚至不如glove。

新的模型处理单句输入为固定长度向量,之后可以用余弦相似度、欧式距离、曼哈顿距离等度量可以提取高质量的句向量。

结果表明,照17和18sota提高了11和5个百分点。

Related work

旧的模型缺点就是句向量产生和计算不独立。

为了解决这个问题,人们尝试用单句输入得到的wam或cls vector做句向量,以及由word2vec派生的skip-thought/quick-thought.

作者使用预训练bert和roberta而非随机初始化,只做训练句向量的fine-ture,时间短见效快。

Model

为了得到固定长度的句向量,作者尝试了三种pooling策略,MEAN > CLS > MAX,结果显示MEAN最好。

向量组合u/v/u-v最好

网络结构见下图

sentence-BERT

左图目标函数为交叉熵,讲bert+pooling得到的u、v和|u-v|向量进行拼接,接输出层softmax,进行训练。

右图目标函数为MSE。

三胞网络不在图中,为三个同构同参bert接平均池化得到原句向量a,正句向量p和负句向量n,损失函数
a r g m a x w L = m a x ( ∣ a − p ∣ 2 − ∣ a − n ∣ 2 + 1 , 0 ) argmax_wL = max(|a-p|^2 - |a-n|^2+1, 0) argmaxw​L=max(∣a−p∣2−∣a−n∣2+1,0)

Evaluation

余弦相似度 曼哈度距离 欧式距离 三者结果差不多

Intel i7-5820K CPU @ 3.30GHz, Nvidia Tesla V100 GPU, CUDA 9.2 and cuDNN

Conclusion

提出了新的句向量生成方式——sentence-BERT,取得了很大提升

实验中用roberta替换bert,并没有取得显著效果

Supplement

朴素bert从n句子找最相近的两个需要做n**2次bert推理,sentence-bert只需要n次

Vocabulary

massive 大而重

derive 获取 得到

drawback 缺点

are depicted in 被展示在

Reference

https://mathor.blog.csdn.net/article/details/109057391

https://mathor.blog.csdn.net/article/details/109166024

https://www.sbert.net/index.html

https://roomylee.github.io/sentence-bert/

TODO

  • fine-ture
  • bert和roberta参数冻结吗?
  • sentence-bert和bert在v100单次推理只需要5ms?
上一篇:[POI2007]ZAP-Queries


下一篇:NLP自己动手构建一个简单的Dataset