Sentence-BERT 论文阅读
BERT、RoBERTa已经在文本语义相似度任务(semantic textual similarity ,STS)上达到了sota。然而,BERT要求句子对拼接到一起再传入模型中,这会导致巨大的计算开销——例如,在10000条句子中寻找最相似的两条,则需要约5*10^7次计算,如果使用BERT,则需要约65小时,这导致许多涉及篇章向量的任务,如相似度计算、聚类等无从开展。
基于此,我们提出了sentence-BERT(SBERT),它使用基于预训练过的BERT的孪生网络,获得在语义上有足够意义的篇章向量。该方法在保持BERT的效果的同时,可以将计算时间从65小时降低到约5秒。
- 论文地址:https://arxiv.org/abs/1908.10084
- 代码地址:https://github.com/UKPLab/sentence-transformers
介绍和相关工作
面对BERT在线上部署时的计算开销问题,Humeau et al. (2019)提出过一种解决方案(即poly-encoder),该方法利用Attention机制计算m个上下文向量,然后再计算它们和预先计算好的候选embedding之间的得分。然而poly-encoder也存在不足——首先,它的打分函数并不对称;其次,它的计算开销对于聚类这样的任务而言还是太大(O(N^2))。
模型
总的来说,作者在模型方面采取了以下几种新的尝试:
得到定长Embedding的不同方式:
- 直接取[CLS];
- 对得到的每个Embedding取mean-pooling;
- 对得到的每个Embedding取max-pooling。
针对不同的任务,建立了三种不同的目标函数:
(1)Classification Objective Function
如图1左侧所示,我们分别获得两句话的句子向量 u 和 v ,并将 u 、v 和二者按位求差向量 进行拼接,再将拼接好的向量乘上一个可训练的权重 :
其中, 为句子向量维度, 为类别数。
图1
(2)Regression Objective Function
如图1右侧所示,目标函数是MSE-loss,直接对两句话的句子向量 和 计算余弦相似度,然后计算。
(3)Triplet Objective Function
在这个目标函数下,将模型框架进行修改,将原来的两个输入,变成三个句子输入。给定一个锚定句 a ,一个肯定句 p和一个否定句 n ,模型通过使 p和a 的距离小于 n和a 的距离,来优化模型。使其目标函数o最小,即:
其中|| · ||代表的是两个样本的距离,本文采用的是欧氏距离,而S_a、S_p、S_n均为对应样本的sentence-Embedding。实验时,作者将超参数epsilon设为1.
实验结果
实验一
图2
如图2,以上为各个方法将输入句子转为sentence-vector后计算相似度,再计算相似度和实际结果之间的斯皮尔曼系数(结果乘以100)。从图中可见,SBERT的效果优于直接输入BERT。
实验二 迁移实验
如图3,本实验选取了新的数据集Argument Facet Similarity (AFS)(Misra et al.)。该数据集主要包含三个话题的数据,因而可以进行话题迁移性测试。具体的测试方式为——使用任意三个话题中的两个作为训练集,剩下的一个作为测试集,对语义相似度进行试验。最终结果表明,sentence-BERT的迁移性较差。由于传统的BERT的cross-encoder做法,可以直接在两个句子上做Attention,而SBERT不行,他要先将一个未知topic的句子映射到向量空间才能做比较。作者认为可能需要更多的训练以满足“迁移”的性能。
图3
实验三 消融实验
图4
如图4所示,本实验检测了不同pooling方法和不同特征concat手段对结果的影响。最终发现,特征concat方式对结果有较大的影响,而pooling方法影响不大。特别的是,加上u*v这个特征后,效果反而会有所下降。
实验四 计算开销试验
图5
如图5所示,该实验衡量了不同的句子Embedding生成方法的速度。从图中可以看出,在CPU上运行时,InferSent的速度比SBERT大约快65%;但切换到可并行的GPU后,transformer可并行的优势就显现出来,当SBERT采用聪明的batch size时,它的速度比InferSent快~9%。
总结
总的来说,本文是一篇BERT工程实践方面的论文。本文所提到的sentence-BERT的方法,可以快速生成大量无限复用的效果不错的sentence Embedding,得以进行聚类、相似度计算等任务。它的存在,可以让BERT在生产环境中的使用得以实现。
Sentence-BERT 论文阅读相关推荐
- BERT论文阅读(一): Pre-training of Deep Bidirectional Transformers for Language Understanding
BERT三大核心: pre-training bidirectional==>alleviates the unidirectionality constriant of fine-tuning ...
- Google BERT 论文阅读
BERT: Bidirectional Encoder Representations from Transformers. 摘要 论文引入了一种称为BERT的语言表征新模型,它支持transform ...
- bert 论文阅读笔记
论文:https://arxiv.org/pdf/1810.04805.pdf 1.每个序列的第一个标签为[CLS].句子中间用[SEP]来分割 用A.B 来表示前后两个句子 Masked LM(Ma ...
- BERT论文阅读(二): CG-BERT:Conditional Text Generation with BERT for Generalized Few-shot Intent Detection
目录 The proposed method Input Representation The Encoder The Decoder fine-tuning discriminate a joint ...
- 谷歌AI论文BERT双向编码器表征模型:机器阅读理解NLP基准11种最优(公号回复“谷歌BERT论文”下载彩标PDF论文)
谷歌AI论文BERT双向编码器表征模型:机器阅读理解NLP基准11种最优(公号回复"谷歌BERT论文"下载彩标PDF论文) 原创: 秦陇纪 数据简化DataSimp 今天 数据简化 ...
- 《论文阅读》RoBERTa: A Robustly Optimized BERT Pretraining Approach
<论文阅读>RoBERTa: A Robustly Optimized BERT Pretraining Approach 简介 想法来源 数据集的选择 创新点 总结 期刊:arxiv 2 ...
- 【论文阅读翻译】A STRUCTURED SELF - ATTENTIVE SENTENCE EMBEDDING
[论文阅读翻译]A STRUCTURED SELF - ATTENTIVE SENTENCE EMBEDDING Abstruct 1. Introducion 2. Approach 2.1 Mod ...
- 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](7)
[论文阅读]A Gentle Introduction to Graph Neural Networks [图神经网络入门](7) Into the Weeds Other types of grap ...
- Learning Span-Level Interactions for Aspect Sentiment Triplet Extraction 论文阅读 ACL2021
目录 摘要 针对问题: 解决方法: 2 Span-based ASTE 2.1 Task Formulation 2.2 Model Architecture 2.2.1 Sentence Encod ...
- [论文阅读笔记53]2021深度神经方法的关系三元组抽取综述
1. 题目 Deep Neural Approaches to Relation Triplets Extraction: A Comprehensive Survey Tapas Nayak†, N ...
最新文章
- 3-runtime 之 Tagged Pointer
- oracle-ords
- php session 回收,关于php session gc回收的问题
- Leetcode题库 125.验证回文串(双指针 C实现)
- zune linux_快速提示:在出售Zune HD之前,先擦除所有内容
- 在VS2015中使用SDL2.0
- MySQL高可用性分析
- 【月径流预测】基于matlab人工生态系统算法优化BP神经网络月径流预测【含Matlab源码 2000期】
- 数据结构实验5-递归
- java 高级工程师要求
- AWVS12-Windows
- 【VUE】vue安装教程
- 均匀裁剪图片(3000X3000到1000X1000)
- python输入名字配对情侣网名_输入名字自动取情侣网名,输入名字自动取网名
- 【铁矿石期货怎么开通】11月22日午盘基本面资讯整理
- 海康威视工业相机MAC地址
- Python Windows发出警报声、蜂鸣器、声音报警
- 网页跳转(APP内/浏览器)
- javaScript数组操作--有道笔记整理
- 【Java】AWT和Swing概述