Sentence-BERT: 一种能快速计算句子相似度的孪生网络

2020 年 5 月 27 日 AINLP

作者:光彩照人

学校:北京邮电大学

原文地址:https://www.cnblogs.com/gczr/p/12874409.html


一、背景介绍

  BERT和RoBERTa在文本语义相似度等句子对的回归任务上,已经达到了SOTA的结果。但是,它们都需要把两个句子同时喂到网络中,这样会导致巨大的计算开销:从10000个句子中找出最相似的句子对,大概需要5000万(C100002=49,995,000)个推理计算,在V100GPU上耗时约65个小时。这种结构使得BERT不适合语义相似度搜索,同样也不适合无监督任务(例如:聚类)。

  本文基于BERT网络做了修改,提出了Sentence-BERT(SBERT)网络结构,该网络结构利用孪生网络和三胞胎网络结构生成具有语义意义的句子embedding向量,语义相近的句子其embedding向量距离就比较近,从而可以用来进行相似度计算(余弦相似度、曼哈顿距离、欧式距离)。该网络结构在查找最相似的句子对,从上述的65小时大幅降低到5秒(计算余弦相似度大概0.01s),精度能够依然保持不变。这样SBERT可以完成某些新的特定任务,例如相似度对比、聚类、基于语义的信息检索。

 

二、模型介绍

1)pooling策略

  SBERT在BERT/RoBERTa的输出结果上增加了一个pooling操作,从而生成一个固定大小的句子embedding向量。实验中采取了三种pooling策略做对比:

  • 直接采用CLS位置的输出向量代表整个句子的向量表示

  • MEAN策略,计算各个token输出向量的平均值代表句子向量

  • MAX策略,取所有输出向量各个维度的最大值代表句子向量

  三个策略的实验对比效果如下:

  可见三个策略中,MEAN策略是效果最好的,所以后面实验默认采用的是MEAN策略。

2)模型结构

  为了能够fine-tune  BERT/RoBERTa,文章采用了孪生网络和三胞胎网络来更新权重参数,以达到生成的句子向量具有语义意义。该网络结构依赖于具体的训练数据,文中实验了下面几种结构和目标函数:

Classification Objective Function:

  这里将embedding向量u和v以及它们之间的差向量拼接在一起,组成一个新的向量,乘以权重参数Wt∈R3n*k,n表示向量的维度,k是分类标签数量。

 

  优化的时候采用交叉熵损失函数。

 

Regression Objective Function:

  两个句子嵌入向量u和v的相似度计算结构如下:

采取MAE(mean squared error)损失作为优化的目标函数。

 

Triplet Objective Function:

 给定一个主句a、一个正面句子p和一个负面句子n,三元组损失调整网络,使得a和p之间的距离小于a和n之间的距离。数学上,我们最小化以下损失函数:

 

s表示a、p、n的句子嵌入向量,||·||表示距离,边缘参数ε表示sp与sa的距离至少比sn近ε。

3)模型训练

  文中训练结合了SNLI(Stanford Natural Language Inference)和Multi-Genre NLI两种数据集。SNLI有570,000个人工标注的句子对,标签分为矛盾、蕴含、中立三种;MultiNLI是SNLI的升级版,格式和标签都一样,有430,000个句子对,主要是一系列口语和书面语文本。文本蕴含关系描述的是两个文本之间的推理关系,其中一个文本作为前提(premise),另一个文本作为假设(hypothesis),如果根据前提P能够推理得出假设H,那么就说P蕴含H,记做P->H。参考样例如下:

  实验时,每个epoch作者用3-way softmax分类目标函数对SBERT进行fine-tune,batch_size=16,采用Adam优化器,learning rate=2e-5,pooling策略是MEAN。

 

三、评测-语义文本相似度(Semantic Textual Similarity-STS)

 在评测的时候,这里采用余弦相似度来比较两个句子向量的相似度。

1)无监督STS

  本次评测采用的是STS 2012-2016 五年的任务数据、STS benchmark数据(2017年构建)、SICK-Relatedness数据,这些数据集都是标好label的句子对,label表示句子之间的相互关系,范围为0~5,样例如下:

无监督评测不采用这些数据集的任何训练数据,直接用上述训练好的模型来计算句子间的相似度,然后通过斯皮尔曼等级相关系数来衡量模型的优劣。结果如下:

  结果显示直接采用BERT的输出结果,效果挺差的,甚至不如直接计算GloVe嵌入向量的平均值效果好;采用本文的孪生网络在NLI数据集上fine-tuning后的模型效果明显要好很多,SBERT和SRoBERTa差异不大。

 2)有监督STS

  有监督STS数据集采用的是STS  benchmark(简称STSb)数据集,就是上面提到的2017年抽取构建的,是当前比较流行的有监督STS数据集。它主要来自三个方面:字幕、新闻、论坛,包含8,628个句子对,训练集5,749,验证集1,500,测试集1,379。BERT将句子对同时输入网络,最后再接一个简单的回归模型作为输出,目前在此数据集上取得了SOTA的效果。

 上述实验结果分为三块:

  • not trained for STS:表示直接采用的是跟上面无监督评测一样的模型,结果也一样;

  • Trained on STS benchmark :表示没有使用NLI数据集,直接在STSb训练数据集上利用孪生网络结构构建回归模型fine-tuning;

  • Trained on NLI data+STS benchmark :表示利用孪生网络先在NLI数据集上训练分类模型学习句子向量表示,然后在STSb训练集上再利用回归模型再次学习句子embedding,相当于利用两种数据集进行了两次fine-tuning。

评测的时候都是采用的STSb的测试集进行评测。可以看到,最后一种训练方式表现最好,尤其单纯的BERT架构有较大的提升幅度。

 

四、评测-SentEval

  SentEval是一个当前流行的用来评测句子embedding质量的工具,这里句子embedding可以作为逻辑回归模型的特征,从而构建一个分类器,并在test集上计算其精度。这里利用SentEval工具在下面几个迁移任务上对比SBERT与其它生成句子embedding的方法:

  • MR(movie review):电影评论片段的情感预测,二分类

  • CR(product review):顾客产品评论的情感预测,二分类

  • SUBJ(subjectivity status):电影评论和情节摘要中句子的主观性预测,二分类

  • MPQA(opinion-polarity):来自新闻网的短语级意见极性分类,二分类

  • SST(Stanford sentiment analysis):斯坦福情感树库,二分类

  • TREC(question-type classification):来自TREC的细粒度问题类型分类,多分类

  • MRPC:Microsoft Research Paraphrase Corpus from parallel news sources,释义检测。

  实验结果显示,SBERT生成的句子向量似乎能够很好捕获情感信息,在MR、CR、SST上都有较大的提升;BERT在之前的STS数据集上表现比较差,但是在SentEval上却有了不错的效果表现,这是因为STS数据集上利用余弦相似度衡量句子向量,余弦相似度对于向量的每一个维度都是同等的,然而SentEval是利用逻辑回归分类器来评测,这样某些维度会对最终的分类结果产生影响。

  所以,BERT的直接输出结果无论是CLS位置的还是平均embedding都不适合用来计算余弦相似度、曼哈顿距离和欧式距离。虽然BERT在SentEval上面表现稍微好一些,但是基于NLI数据集的SBERT还是达到了SOTA的效果。

 

五、消融研究

  为了对SBERT的不同方面进行消融研究,以便更好地了解它们的相对重要性,我们在SNLI和Multi-NLI数据集上构建了分类模型,在STSb数据集上构建了回归模型。在pooling策略上,对比了MEAN、MAX、CLS三种策略;在分类目标函数中,对比了不同的向量组合方式。结果如下:

  在pooling策略上,MEAN效果最好;在向量组合模式上,只有在分类训练的时候才使用,结果显示element-wise的|u-v|影响最大。


原文题目:《Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks》




推荐阅读

AINLP年度阅读收藏清单

薅当当羊毛的机会又!双!!叒!!!叕!!!来了

中文命名实体识别工具(NER)哪家强?

学自然语言处理,其实更应该学好英语

斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

太赞了!Springer面向公众开放电子书籍,附65本数学、编程、机器学习、深度学习、数据挖掘、数据科学等书籍链接及打包下载

数学之美中盛赞的 Michael Collins 教授,他的NLP课程要不要收藏?

自动作诗机&藏头诗生成器:五言、七言、绝句、律诗全了

模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法

这门斯坦福大学自然语言处理经典入门课,我放到B站了

征稿启示 | 稿费+GPU算力+星球嘉宾一个都不少

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。


登录查看更多
5

相关内容

【知识图谱@ACL2020】Knowledge Graphs in Natural Language Processing
专知会员服务
64+阅读 · 2020年7月12日
[ICML-Google]先宽后窄:对深度薄网络的有效训练
专知会员服务
33+阅读 · 2020年7月5日
【ICML 2020 】小样本学习即领域迁移
专知会员服务
77+阅读 · 2020年6月26日
注意力图神经网络的多标签文本分类
专知会员服务
111+阅读 · 2020年3月28日
【Google论文】ALBERT:自我监督学习语言表达的精简BERT
专知会员服务
22+阅读 · 2019年11月4日
论文浅尝 | 使用孪生BERT网络生成句子的嵌入表示
开放知识图谱
25+阅读 · 2019年10月31日
基于知识蒸馏的BERT模型压缩
大数据文摘
18+阅读 · 2019年10月14日
几种句子表示方法的比较
AINLP
15+阅读 · 2019年9月21日
站在BERT肩膀上的NLP新秀们(PART III)
AINLP
11+阅读 · 2019年6月18日
3分钟看懂史上最强NLP模型BERT
机器学习算法与Python学习
7+阅读 · 2019年2月27日
论文浅尝 | 基于RNN与相似矩阵CNN的知识库问答
开放知识图谱
8+阅读 · 2018年5月29日
基于 Doc2vec 训练句子向量
AI研习社
6+阅读 · 2018年5月16日
用CNN做在NLP句子分类
数据挖掘入门与实战
7+阅读 · 2018年5月9日
用线性规划去计算句子之间的相似度
AI研习社
9+阅读 · 2017年12月27日
Arxiv
20+阅读 · 2019年9月7日
Arxiv
5+阅读 · 2019年4月21日
Arxiv
21+阅读 · 2019年3月25日
Arxiv
3+阅读 · 2019年3月1日
VIP会员
相关VIP内容
相关资讯
论文浅尝 | 使用孪生BERT网络生成句子的嵌入表示
开放知识图谱
25+阅读 · 2019年10月31日
基于知识蒸馏的BERT模型压缩
大数据文摘
18+阅读 · 2019年10月14日
几种句子表示方法的比较
AINLP
15+阅读 · 2019年9月21日
站在BERT肩膀上的NLP新秀们(PART III)
AINLP
11+阅读 · 2019年6月18日
3分钟看懂史上最强NLP模型BERT
机器学习算法与Python学习
7+阅读 · 2019年2月27日
论文浅尝 | 基于RNN与相似矩阵CNN的知识库问答
开放知识图谱
8+阅读 · 2018年5月29日
基于 Doc2vec 训练句子向量
AI研习社
6+阅读 · 2018年5月16日
用CNN做在NLP句子分类
数据挖掘入门与实战
7+阅读 · 2018年5月9日
用线性规划去计算句子之间的相似度
AI研习社
9+阅读 · 2017年12月27日
Top
微信扫码咨询专知VIP会员