簡述
在文本語義相似度等句子對的回歸任務上,BERT , RoBERTa 拿到sota。
但是,它要求兩個句子都被輸入到網絡中,從而導致巨大開銷:從10000個句子集合中找到最相似的sentence-pair需要進行大約5000萬個推理計算(約65小時)。
BERT不適合語義相似度搜索,也不適合非監督任務,比如聚類。
解決聚類和語義搜索的一種常見方法是將每個句子映射到一個向量空間,使得語義相似的句子很接近。
於是,也有人嘗試向BERT輸入單句,得到固定大小的sentene embedding。最常用的方法是,平均BERT輸出層或使用第一個token([CLS]的token)的輸出。但這卻產生了非常不好的sentence embedding,常常還不如averaging GloVe embeddings。
本文提出:Sentence-BERT(SBERT),對預訓練的BERT進行修改:使用Siamese和三級(triplet)網絡結構來獲得語義上有意義的句子embedding->可以生成定長的sentence embedding,使用余弦相似度或Manhatten/Euclidean距離等進行比較找到語義相似的句子。
SBERT保證准確性的同時,可將上述提到的BERT/RoBERTa的65小時減少到5s。(計算余弦相似度大概0.01s)
除了語義相似度搜索,也可用來clustering搜索。
作者在NLI data中fine-tune SBERT,用時不到20分鍾。
SBERT
pooling策略:
MEAN策略:使用CLS-token的輸出,對所有輸出向量取mean。
MAX策略:使用CLS-token的輸出,對所有輸出向量計算max-over-time。
目標函數:
分類:
計算sentence embeedings u 和 v的element-wise差值並乘以權重:
其中,n是sentence embedding的緯度,k是label的數量。
loss:交叉熵
如圖1:
回歸:
計算兩個sentence embedding(u & v)的余弦相似度。
loss:均方誤差
如圖2:
Triplet:
輸入:anchor sentence a,positive sentence p, negative sentence n
loss的目的是讓a和p之間的距離小於a和n之間的距離:
Sa Sp Sn 分別是 a p n 的sentence embedding。|| · || 是距離測度,ε是margin。對於距離測度,可以用Euclidean距離。實驗時,作者將ε設置為1。
實驗時,作者用3-way softmax分類目標函數fine-tune SBERT了一個epoch。pooling策略為MEAN。
接下來就是一系列的實驗結果表格,結論是效果不錯。
消融學習:
pooling策略影響小,連接方式影響大。