查看原文
其他

【源头活水】文本相似:Sentence-BERT 原理与实践

“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。

来源:知乎—wangThr

地址:https://zhuanlan.zhihu.com/p/373253456

使用BERT或RoBERT本身就可以进行文本相似计算(BERT下游任务中句子对作为输入进行)。但是这种方法需要使用大量的计算资源,例如在10000条文本中找出最相似的两条文本,由于每对文本都需要输入BERT中进行计算,所以共计需要约500万次计算,耗时约65小时,因此BERT是不适合进行语义搜索匹配和无监督聚类这些任务。那么可不可以直接将每个句子转化为一个定长的Embeding再来比较呢?当然可以,Sentence-BERT(SBERT)就可以解决这个问题。
论文地址:https://arxiv.org/pdf/1908.10084v1.pdf
代码开源:https://github.com/UKPLab/sentence-transformers


01

 Sentence-BERT Model
由于输入的Sentence长度不一,而我们希望得到统一长度的Embeding,所以当Sentence从BERT输出后我们需要执行pooling操作,常用的Pooling操作有:
CLS-pooling:直接取[CLS]的Embedding
mean-pooling:取每个Token的平均Embedding
max-pooling:对得到的每个Embedding取max
同时针对不同的任务,可以设计出不同的结构和损失函数,这里给出了3个举例:
Classification Objective Function

Figure 1:SBERT architecture with classification objective function, e.g., for fine-tuning on SNLI dataset.The two BERT networks have tied weights (siamesenetwork structure).

如上图所示,在分别得到SentenceA、B的的的pooling 向量  和  之后,将  、  、  三者进行拼接,再乘权  重后输入至Softmax分类器:
其中  是将  和  按位相减的结果。
Regression Objective Function

Figure 2: SBERT architecture at inference, for example, to compute similarity scores. This architecture isalso used with the regression objective function.
如上图所示,对向量  和  计算余弦相似度,然后使用均方误差(mean squared-error ) 计算loss。
Triplet Objective Function
这种结构输入有三个:一个锚定句  、一个肯定句  ,和一个否定句  。模型训练中通过使  和  的距离尽可能小于  和  的距离,来优化模型。则其损失函数为:
通过最小化上述损失函数即可,其中  、  、  为对应句子的embeding,  代表距离,  代表Margin,确保  离  更近约  ,论文中设置为1。

02

结论
通过大量实验进行对比:
1. 在Unsupervised STS、Supervised STS、Argument Facet Similarity等任务多个数据集上均表现出明显优势。
2. 最好Pooling方式的是mean-pooling。

03

实践
1. 数据:
本文实验数据集来源:几个数据竞赛中文本相似计算中文赛题数据汇总20W条数据。详细格式如下:
sen_a sen_b label谁能告诉我这个是什么电视剧 谁能告诉我这是什么电视剧 1我还要写作业 我要写作业啦 0喜欢上一个女生,如何让她对我有好感 喜欢女孩如何让她对我有好感!1你好瘦啊 你咋这么瘦 1米歌手机上网速度怎么那么慢呢?请问你用的是米歌手机吗?质量怎么样?0

数据链接:https://pan.baidu.com/share/init?surl=UAmhHhNO9ih0h2s1UVKabg

提取码:LIKE
2. 代码:
链接:https://github.com/wanglke/SiameseNet
3. 结果:
第一列是Siamese Net的结果
可参考博客:https://zhuanlan.zhihu.com/p/337833300
第二列是使用的Albert接TextCNN模型的结果
可参考:https://zhuanlan.zhihu.com/p/158622992
第三列是本文方法Sentence-BERT的结果

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“源头活水”历史文章


更多源头活水专栏文章,

请点击文章底部“阅读原文”查看



分享、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存