论文介绍
发表:2019,EMNLP
论文题目:《Sentence-BERT:sentence embeddings using siaese BERT-networks》
论文地址:https://arxiv.org/abs/1908.10084
Github:https://github.com/UKPLab/sentence-transformers
适用领域:
- 句向量生成
- 语义相似度计算
- 语义搜索
- 无监督任务(聚类)
1 概述
在20年之前的各种预训练模型中,比如bert,XLNet,Albert等等,这些都不适合用作语义相似度以及无监督任务中。通常这类问题的解决方式是计算出句向量,然后计算距离(余弦相似度,曼哈顿距离等)来表示语义距离。
1.1 交互型模型(单塔模型)
在以Bert为代表的预训练模型,其语义相似度的计算的处理方式是构造句子对[CLS]sen1[SEP]sen2 输入到模型中,通过各种句子间的特征交互完成相似度计算。这就是所谓的交互式模型。这样来看,效果一般来说表现都不错,但是更多的在计算速度上面存在很大的问题。
以10000个句子对为例,如果需要匹配每个句子的相似度最大的句子,则需要进行两两交互,10000个句子之间的计算量为10000*(10000-1)/2,约等于5000w次推理计算,在V100gpu上面大概需要65h。
所以交互型学习可以捕获到更深层的结构信息,当然带来的主要问题就是计算速度很慢。
1.2 表示型模型(双塔模型)
概括说来就是分别针对单个句子计算句向量表示,在对两个句向量进行距离计算,在这里形成交互。
表示型匹配模型的共同特点是:对将要匹配的两个句子分别进行编码与特征提取,最后进行相似度交互计算。其优点是:
- 将文本映射为一个简洁的表达,便于储存。
- 匹配的计算速度快。
- 模型在表示层可以用大量无监督的数据进行预训练。因此非常适合于信息检索这种对存储和速度要求都比较高的任务。
但缺点是:
- 匹配不仅仅是一一对应的,而且是有层次、 有结构的 ,分别从两个对象单独提取特征,很难捕获匹配中的结构信息。
本文就是这样的一个表示型双塔模型。
2 Bert进行单句Sentence Embedding
上文提到,可以通过对单个句