SBert算法
一、背景
这种结构使得 BERT 不适合语义相似度搜索,同样也不适合无监督任务,例如聚类
解决聚类和语义搜索的一种常见方法是将每个句子映射到一个向量空间,使得语义相似的句子很接近
ERT和RoBERTa在文本语义相似度(Semantic Textual Similarity)等句子对的回归任务上,已经达到了SOTA的结果。但是,它们都需要把两个句子同时送入网络,这样会导致巨大的计算开销:从10000个句子中找出最相似的句子对,大概需要5000万
)个推理计算,在V100GPU上耗时约65个小时。这种结构使得BERT不适合语义相似度搜索,同样也不适合无监督任务,例如聚类
解决聚类和语义搜索的一种常见方法是将每个句子映射到一个向量空间,使得语义相似的句子很接近。通常获得句子向量的方法有两种:
(1)计算所有Token输出向量的平均值
(2)使用[CLS]位置输出的向量
Sentence-BERT(SBERT) 的作者对预训练的 BERT 进行修改:使用 Siamese and Triplet Network(孪生网络和三胞胎网络)生成具有语义的句子 Embedding 向量。语义相近的句子,其 Embedding 向量距离就比较近,从而可以使用余弦相似度、曼哈顿距离、欧氏距离等找出语义相似的句子。SBERT 在保证准确性的同时,可将上述提到 BERT/RoBERTa 的 65 小时降低到 5 秒(计算余弦相似度大概 0.01 秒)。这样 SBERT 可以完成某些新的特定任务,比如聚类、基于语义的信息检索等