Sentence Embeddings using Siamese BERT-Networks

《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

      image-20211126004100213

  • 为了微调Bert/Roberta,创建siamese网络和三元组网络来更新权重,以使产生的句子嵌入在语义上有意义,并可以与余弦相似性进行比较。网络结构取决于可用的训练数据:

    • Classification Objective Function:连接两个句子嵌入和嵌入的按位求差向量$|u-v|$,与一个参数矩阵相乘,下式n为句子嵌入维度,k为标签数目,优化函数为交叉熵损失,如图1

      image-20211125235126970

    • 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,距离度量为欧几里得距离

      image-20211126003307902

image-20211125222953172

训练细节

  • SNLI是一个由57万个句子对组成的集合,句子有矛盾、依附和中性的标签
  • MultiNLI包含430,000个句子对,涵盖了一系列的口语和书面语
  • 使用一个3-way softmax分类器(类别为3)对SBERT微调
  • batchsize为16;Adam:2e−5;线性学习率预热超过10%的训练数据;默认的池化策略:MEAN

评估:文本语义相似性

无监督STS

image-20211125222732489

有监督STS

image-20211126003739337

  • 平均池化策略最优,效果没有BERT输入两句话的效果好,但优于其他方法,速度快
  • Pooling 策略影响较小,向量组合策略影响较大