• 《Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks》论文阅读


    文章地址:https://arxiv.org/abs/1908.10084

    文章内容

      BERT和RoBERTa在一些任务中已经取得了不错的结果,但是在处理句子对相关的任务时,它们要求将2个句子一起输入到网络当中训练,而这又会导致高昂的计算代价。因此这篇论文的作者提出了Sentence-BERT(SBERT),其使孪生或三生网络架构(siamese and triplet network)生成有意义的句子嵌入,然后可用余弦相似度进行比较,由于上述网络架构是可以并行对句子进行编码的,因此可以极大地缩减句子对任务的处理时间。

    文章模型

      SBERT在BERT模型的基础上添加了一个池化操作,其实这里作者总共尝试了三种方式,分别是:[CLS]、MEAN-strategy、MAX-strategy,通过实验后最好的方式为MEAN-strategy。
      作者一共设置了3种结构和目标函数。
      Classification Objective Function:分类目标函数
    在这里插入图片描述
      分类架构如上所示,这里作者为了更好的学习到2个句子之间的交互,运用了以下策略:
    在这里插入图片描述
    损失就是常见的交叉损失熵。当然作者这里也测试了几种交互或特征融合方式的策略,结果见下图:
    在这里插入图片描述

      Regression Objective Function:回归目标函数:
    在这里插入图片描述
      这个就是简单地计算2个句子之间的余弦相似度,其实作者也尝试过欧式距离或者曼哈顿距离,但余弦相似度的表现结果最好。利用均方误差作为损失函数。
      Triplet Objective Function.:三生网络:这个就是给定锚点句a,正例p,负例句n,训练方式就是让a和p的距离尽可能的进,让a和n的距离尽可能的远,公式如下所示,作者这里就是简单的用欧氏距离。
    在这里插入图片描述

    文章总结

      对于实验和训练(维基百科、句子对分类任务)的细节不再多说,感觉这篇文章最值得借鉴的地方就是这个句子间的交互性,分类网络的那几种方式,以及回归网络的余弦相似度、各种距离等,也许可以用到其他任务当中,而且通过2个相同的编码器并行编码句子可以充分硬件,节约时间。

  • 相关阅读:
    mapbox鼠标滑过高亮要素
    LangChain的函数,工具和代理(一):OpenAI的函数调用
    https和http的区别及安全性
    hbuildx mac离线安装插件
    倍福XTS | 磁驱柔性输送系统环形线Ethercat DSP+FPGA控制器
    ScheduledExecutorService与ExecutorService区别
    【了解一下,单例模式的实现方法--Java】
    leetcode热题100学习计划-链表-反转链表
    QCC51XX---Task list分析
    2022-10洛谷
  • 原文地址:https://blog.csdn.net/jst100/article/details/125264507