BERT、RoBERTa已經在文本語義相似度任務(semantic textual similarity ,STS)上達到了sota。然而,BERT要求句子對拼接到一起再傳入模型中,這會導致巨大的計算開銷——例如,在10000條句子中尋找最相似的兩條,則需要約5*10^7次計算,如果使用BERT,則需要約65小時,這導致許多涉及篇章向量的任務,如相似度計算、聚類等無從開展。
基於此,我們提出了sentence-BERT(SBERT),它使用基於預訓練過的BERT的孿生網絡,獲得在語義上有足夠意義的篇章向量。該方法在保持BERT的效果的同時,可以將計算時間從65小時降低到約5秒。
介紹和相關工作
面對BERT在線上部署時的計算開銷問題,Humeau et al. (2019)提出過一種解決方案(即poly-encoder),該方法利用Attention機制計算m個上下文向量,然後再計算它們和預先計算好的候選embedding之間的得分。然而poly-encoder也存在不足——首先,它的打分函數並不對稱;其次,它的計算開銷對於聚類這樣的任務而言還是太大(O(N^2))。
模型
總的來說,作者在模型方面採取了以下幾種新的嘗試:
- 得到定長Embedding的不同方式:
- 直接取[CLS];
- 對得到的每個Embedding取mean-pooling;
- 對得到的每個Embedding取max-pooling。
- 針對不同的任務,建立了三種不同的目標函數:
(1)Classification Objective Function
如圖1左側所示,我們分別獲得兩句話的句子向量 u 和 v ,並將 u 、v 和二者按位求差向量 進行拼接,再將拼接好的向量乘上一個可訓練的權重 :
其中, 爲句子向量維度, 爲類別數。
圖1
(2)Regression Objective Function
如圖1右側所示,目標函數是MSE-loss,直接對兩句話的句子向量 和 計算餘弦相似度,然後計算。
(3)Triplet Objective Function
在這個目標函數下,將模型框架進行修改,將原來的兩個輸入,變成三個句子輸入。給定一個錨定句 a ,一個肯定句 p和一個否定句 n ,模型通過使 a 的距離小於 a 的距離,來優化模型。使其目標函數o最小,即:
其中|| · ||代表的是兩個樣本的距離,本文采用的是歐氏距離,而S_a、S_p、S_n均爲對應樣本的sentence-Embedding。實驗時,作者將超參數epsilon設爲1.
實驗結果
實驗一
圖2
如圖2,以上爲各個方法將輸入句子轉爲sentence-vector後計算相似度,再計算相似度和實際結果之間的斯皮爾曼係數(結果乘以100)。從圖中可見,SBERT的效果優於直接輸入BERT。
實驗二 遷移實驗
如圖3,本實驗選取了新的數據集Argument Facet Similarity (AFS)(Misra et al.)。該數據集主要包含三個話題的數據,因而可以進行話題遷移性測試。具體的測試方式爲——使用任意三個話題中的兩個作爲訓練集,剩下的一個作爲測試集,對語義相似度進行試驗。最終結果表明,sentence-BERT的遷移性較差。由於傳統的BERT的cross-encoder做法,可以直接在兩個句子上做Attention,而SBERT不行,他要先將一個未知topic的句子映射到向量空間才能做比較。作者認爲可能需要更多的訓練以滿足“遷移”的性能。
圖3
實驗三 消融實驗
圖4
如圖4所示,本實驗檢測了不同pooling方法和不同特徵concat手段對結果的影響。最終發現,特徵concat方式對結果有較大的影響,而pooling方法影響不大。特別的是,加上u*v這個特徵後,效果反而會有所下降。
實驗四 計算開銷試驗
圖5
如圖5所示,該實驗衡量了不同的句子Embedding生成方法的速度。從圖中可以看出,在CPU上運行時,InferSent的速度比SBERT大約快65%;但切換到可並行的GPU後,transformer可並行的優勢就顯現出來,當SBERT採用聰明的batch size時,它的速度比InferSent快~9%。
總結
總的來說,本文是一篇BERT工程實踐方面的論文。本文所提到的sentence-BERT的方法,可以快速生成大量無限複用的效果不錯的sentence Embedding,得以進行聚類、相似度計算等任務。它的存在,可以讓BERT在生產環境中的使用得以實現。