论文阅读 | Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
简述
在文本语义相似度等句子对的回归任务上,BERT , RoBERTa 拿到sota。
但是,它要求两个句子都被输入到网络中,从而导致巨大开销:从10000个句子集合中找到最相似的sentence-pair需要进行大约5000万个推理计算(约65小时)。
BERT不适合语义相似度搜索,也不适合非监督任务,比如聚类。
解决聚类和语义搜索的一种常见方法是将每个句子映射到一个向量空间,使得语义相似的句子很接近。
于是,也有人尝试向BERT输入单句,得到固定大小的sentene embedding。最常用的方法是,平均BERT输出层或使用第一个token([CLS]的token)的输出。但这却产生了非常不好的sentence embedding,常常还不如averaging GloVe embeddings。
本文提出:Sentence-BERT(SBERT),对预训练的BERT进行修改:使用Siamese和三级(triplet)网络结构来获得语义上有意义的句子embedding->可以生成定长的sentence embedding,使用余弦相似度或Manhatten/Euclidean距离等进行比较找到语义相似的句子。
SBERT保证准确性的同时,可将上述提到的BERT/RoBERTa的65小时减少到5s。(计算余弦相似度大概0.01s)
除了语义相似度搜索,也可用来clustering搜索。
作者在NLI data中fine-tune SBERT,用时不到20分钟。
SBERT
pooling策略:
MEAN策略:使用CLS-token的输出,对所有输出向量取mean。
MAX策略:使用CLS-token的输出,对所有输出向量计算max-over-time。
C
目标函数:
分类:
计算sentence embeedings u 和 v的element-wise差值并乘以权重:
其中,n是sentence embedding的纬度,k是label的数量。
loss:交叉熵
如图1:
回归:
计算两个sentence embedding(u & v)的余弦相似度。
loss:均方误差
如图2:
Triplet:
输入:anchor sentence a,positive sentence p, negative sentence n
loss的目的是让a和p之间的距离小于a和n之间的距离:
Sa Sp Sn 分别是 a p n 的sentence embedding。|| · || 是距离测度,ε是margin。对于距离测度,可以用Euclidean距离。实验时,作者将ε设置为1。
实验时,作者用3-way softmax分类目标函数fine-tune SBERT了一个epoch。pooling策略为MEAN。
接下来就是一系列的实验结果表格,结论是效果不错。
消融学习:
pooling策略影响小,连接方式影响大。
论文阅读 | Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks的更多相关文章
- [论文阅读笔记] metapath2vec: Scalable Representation Learning for Heterogeneous Networks
[论文阅读笔记] metapath2vec: Scalable Representation Learning for Heterogeneous Networks 本文结构 解决问题 主要贡献 算法 ...
- 论文阅读笔记六:FCN:Fully Convolutional Networks for Semantic Segmentation(CVPR2015)
今天来看一看一个比较经典的语义分割网络,那就是FCN,全称如题,原英文论文网址:https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn ...
- 深度学习论文翻译解析(五):Siamese Neural Networks for One-shot Image Recognition
论文标题:Siamese Neural Networks for One-shot Image Recognition 论文作者: Gregory Koch Richard Zemel Rusla ...
- 论文阅读笔记: Multi-Perspective Sentence Similarity Modeling with Convolution Neural Networks
论文概况 Multi-Perspective Sentence Similarity Modeling with Convolution Neural Networks是处理比较两个句子相似度的问题, ...
- 论文阅读 Continuous-Time Dynamic Network Embeddings
1 Continuous-Time Dynamic Network Embeddings Abstract 描述一种将时间信息纳入网络嵌入的通用框架,该框架提出了从CTDG中学习时间相关嵌入 Co ...
- 论文阅读:Learning Attention-based Embeddings for Relation Prediction in Knowledge Graphs(2019 ACL)
基于Attention的知识图谱关系预测 论文地址 Abstract 关于知识库完成的研究(也称为关系预测)的任务越来越受关注.多项最新研究表明,基于卷积神经网络(CNN)的模型会生成更丰富,更具表达 ...
- 论文阅读 Predicting Dynamic Embedding Trajectory in Temporal Interaction Networks
6 Predicting Dynamic Embedding Trajectory in Temporal Interaction Networks link:https://arxiv.org/ab ...
- 论文阅读笔记四十一:Very Deep Convolutional Networks For Large-Scale Image Recongnition(VGG ICLR2015)
论文原址:https://arxiv.org/abs/1409.1556 代码原址:https://github.com/machrisaa/tensorflow-vgg 摘要 本文主要分析卷积网络的 ...
- 论文阅读笔记三十八:Deformable Convolutional Networks(ECCV2017)
论文源址:https://arxiv.org/abs/1703.06211 开源项目:https://github.com/msracver/Deformable-ConvNets 摘要 卷积神经网络 ...
- 论文阅读笔记六十五:Enhanced Deep Residual Networks for Single Image Super-Resolution(CVPR2017)
论文原址:https://arxiv.org/abs/1707.02921 代码: https://github.com/LimBee/NTIRE2017 摘要 以DNN进行超分辨的研究比较流行,其中 ...
随机推荐
- Python实现群聊天小程序代码
群聊服务端 服务端Server.py代码如下: # -*- coding: utf-8 -*- #!/usr/bin/env python # @Time : 2018/5/18 16:05 # @D ...
- nuxt.js 部署静态页面[dist]到gh-pages
一. 1.添加package.json { "name": "nuxtweb001", "version": "1.0.0&quo ...
- python经典面试算法题1.1:如何实现链表的逆序
本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 1.1 如何实现链表的逆序 [腾讯笔试题] 难度系数:⭐⭐⭐ ...
- SSE图像算法优化系列三十:GIMP中的Noise Reduction算法原理及快速实现。
GIMP源代码链接:https://gitlab.gnome.org/GNOME/gimp/-/archive/master/gimp-master.zip GEGL相关代码链接:https://gi ...
- VS2019打包WPF安装程序最新教程
VS2019打包WPF安装程序最新教程,使用Visual Studio 2019开发的WPF程序如果想要打包为安装程序,除了在VS2019找到WPF项目类库直接右键发布之外,更常用的还是将其打包为ex ...
- python 抓取youtube教程
前言: 相信大家很多人都看过youtube网站上的视频,网站上有很多的优质视频,清晰度也非常的高,看到喜欢的想要下载到本地,虽然也有很多方法,但是肯定没有python 来的快, 废话不多说,上代码: ...
- setState何时同步,何时异步,为什么?
setState何时同步,何时异步,为什么 答案:在React库控制时,异步:否则同步. 示例代码如下: constructor(props){ super(porps); this.state = ...
- InfluxDB 聚合函数实用案例
InfluxDB 聚合函数实用案例 文章大纲 InfluxDB 简介 InfluxDB是GO语言编写的分布式时间序列化数据库,非常适合对数据(跟随时间变化而变化的数据)的跟踪.监控和分析.在我们的项目 ...
- 更新centos7的kernel
现在安装的centos7 的内核是3.10的, 机器已经联网,可以直接利用包管理工具更新,需要注意的是现在3.0以上的内核引入了签名机制,需要导入签名的key,参考步骤如下: 1.导入keyrpm - ...
- postgresql12 b-tree v4空间上和性能上的优化
在 pg v11 和 v12 上 常见测试用例 CREATE TABLE rel ( a bigint NOT NULL, b bigint NOT NULL ); ALTER TABLE rel A ...