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最好
网络结构见下图
左图目标函数为交叉熵,讲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)
argmaxwL=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?