在文本語義類似度等句子對的迴歸任務上,BERT , RoBERTa 拿到sota。html
可是,它要求兩個句子都被輸入到網絡中,從而致使巨大開銷:從10000個句子集合中找到最類似的sentence-pair須要進行大約5000萬個推理計算(約65小時)。網絡
BERT不適合語義類似度搜索,也不適合非監督任務,好比聚類。ide
解決聚類和語義搜索的一種常見方法是將每一個句子映射到一個向量空間,使得語義類似的句子很接近。函數
因而,也有人嘗試向BERT輸入單句,獲得固定大小的sentene embedding。最經常使用的方法是,平均BERT輸出層或使用第一個token([CLS]的token)的輸出。但這卻產生了很是很差的sentence embedding,經常還不如averaging GloVe embeddings。學習
本文提出:Sentence-BERT(SBERT),對預訓練的BERT進行修改:使用Siamese和三級(triplet)網絡結構來得到語義上有意義的句子embedding->能夠生成定長的sentence embedding,使用餘弦類似度或Manhatten/Euclidean距離等進行比較找到語義類似的句子。idea
SBERT保證準確性的同時,可將上述提到的BERT/RoBERTa的65小時減小到5s。(計算餘弦類似度大概0.01s)spa
除了語義類似度搜索,也可用來clustering搜索。htm
做者在NLI data中fine-tune SBERT,用時不到20分鐘。blog
pooling策略:token
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策略影響小,鏈接方式影響大。
原文出處:https://www.cnblogs.com/shona/p/12026349.html