《Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks》2019
摘要
- Bert和Roberta在语义文本相似性(STS)等句子对回归任务上表现突出,但需要将两个句子都反馈到网络中,导致巨大的计算开销:使用Bert在1万个句子的集合中找到最相似的对需要大约5000万次推理计算
- BERT的构造使其不适用于语义相似度搜索,也不适合于聚类等无监督任务
- 提出sentence-BERT(SBERT),使用SIAMES和三元组网络结构来推导出语义上有意义的句子嵌入
- 句子嵌入可使用余弦相似度进行比较,使得查找最相似的配对的工作量从使用BERT/Roberta的65小时减少到使用SBERT的大约5秒,保持了BERT的准确性
- 在常见的STS任务和迁移学习任务上对SBERT和SRoBERTa进行评估,SBERT和SRoBERTa的性能优于其他最先进的句子嵌入方法
介绍
- SBERT使用siamese和三元组网络(或者称孪生网络和三胞胎网络),能够推导出有语义意义的句子嵌入(sentence embeddings),使得BERT可以用于某些新任务——大规模语义近似性比较、聚类和信息检索
- BERT使用cross-encoder:将句子对送入transformer以预测目标
- 解决聚类和语义搜索的一种常见方法是将每个句子映射到向量空间,语义相似的句子距离更近
- 将单个句子送入BERT获得句子嵌入的最常用方法,是取BERT输出层的平均值或使用[cls]token的输出——此方法产生相当差的句子嵌入,比GloVe嵌入还差
- SBERT:
- siamese网络结构可以输出给定句子的固定长度向量
- 使用余弦相似性或Manhatten/Euclide距离等相似性度量,找到语义相似的句子
模型
SBERT将池化操作添加到Bert/Roberta的输出,以输出固定大小的句子嵌入
实验了三种池化策略:
使用CLS-Token的输出
计算所有输出向量的平均值(MEAN策略)
计算所有token输出向量各个维度的最大值(Max-Strategy)
默认配置为MEAN
为了微调Bert/Roberta,创建siamese网络和三元组网络来更新权重,以使产生的句子嵌入在语义上有意义,并可以与余弦相似性进行比较。网络结构取决于可用的训练数据:
Classification Objective Function:连接两个句子嵌入和嵌入的按位求差向量$|u-v|$,与一个参数矩阵相乘,下式n为句子嵌入维度,k为标签数目,优化函数为交叉熵损失,如图1
Regression Objective Function:计算两个句子嵌入u和v的余弦相似度,以均方误差损失为目标函数,如图2
Triplet Objective Function:给定锚定句a,一个正向句子p,一个负向句子n,Triplet loss使得a和p之间的距离小于a和n的距离,其中$s_x$为句子嵌入,$||||$为一个距离metric,$\epsilon$确保$s_p$与$s_a$的距离至少比$s_a$和$s_n$的距离小$\epsilon$,实验中设置为1,距离度量为欧几里得距离
训练细节
- SNLI是一个由57万个句子对组成的集合,句子有矛盾、依附和中性的标签
- MultiNLI包含430,000个句子对,涵盖了一系列的口语和书面语
- 使用一个3-way softmax分类器(类别为3)对SBERT微调
- batchsize为16;Adam:2e−5;线性学习率预热超过10%的训练数据;默认的池化策略:MEAN
评估:文本语义相似性
无监督STS
有监督STS
- 平均池化策略最优,效果没有BERT输入两句话的效果好,但优于其他方法,速度快
- Pooling 策略影响较小,向量组合策略影响较大