[NLP] Sentence-BERT模型
2022-01-06 本文已影响0人
nlpming
1. 简介
- 对于句对的分类或回归任务,BERT模型需要将两个句子作为输入,从而预测一个目标值拟合真实值。但是这种方式非常的耗时,比如在10000个句子中找最相似的句对需要花费很差的时间大约65小时。通过BERT得到句子向量,最常用的两种方式就是:token级别的平均,或者[CLS]的输出向量。 bert-as-service 工具已经实现了上述功能。对于语义相似句子搜索,或者句子聚类任务BERT模型不太适合。为了解决BERT模型在语义相似句子搜索计算量大的问题,本文提出了Sentence-BERT模型。Sentence-BERT使用孪生网络(siamese network)或者triplet network结构生成句子向量,使得可以通过cosine相似度衡量句子相似性。
2. Sentence-BERT模型
- 本文创新之处:提出了一种Sentence-BERT模型可以获取到句子向量,并且可以通过句子向量cosine相似度衡量文本相似度。方便后续进行句子语义相似度搜索、或者聚类任务。 在句对分类、回归任务效果上,相比BERT并没有提升,只是提出了一种方便获取句子向量的方法。

2.1 目标函数
- 针对不同的任务,论文中设计了三种目标函数;
- 分类任务,目标函数如下:
- 回归任务目标函数,比较简单直接计算cosine相似度然后使用MSE损失函数;
- Triplet目标函数如下:
2.2 实验结果
- 论文使用SNLI和Multi-NLI自然语言推理数据集,对BERT模型进行微调;最终通过cosine计算句子相似度,与数据集STS中的label计算spearman相关系数结果如下。感觉这个地方有点耍赖皮,使用了另外的自然语言推理数据集对BERT进行微调,然后再计算句子cosine相似度比较

- 在STS数据集上的表现如下,尝试了两种方案。从效果上来看,在STS数据集上的结果并没有超过BERT,只是通过SBERT能够得到句子向量。
(1)直接使用STS数据集对SBERT模型进行微调;
(2)先使用NLI数据集对SBERT进行微调,然后使用STS数据集对SBERT进行微调。

参考论文
- [Sentence BERT] Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
https://arxiv.org/pdf/1908.10084.pdf - [Augmented SBERT] Augmented SBERT: Data Augmentation Method for Improving
Bi-Encoders for Pairwise Sentence Scoring Tasks 【数据增强】 -
Learning Thematic Similarity Metric from Article Sections Using Triplet Networks
【简介:Triplet Network网络学习句子来自不同的章节】
https://research.ibm.com/haifa/dept/vst/debating_data.shtml#Download 【数据集】
上述论文中使用的数据集.png
参考资料
- Sentence Transformers文档:https://www.sbert.net/
代码:https://github.com/UKPLab/sentence-transformers