?一、背景介紹
BERT和RoBERTa在文本語義相似度等句子對的回歸任務上,已經達到了SOTA的結果。但是,它們都需要把兩個句子同時喂到網絡中,這樣會導致巨大的計算開銷:從10000個句子中找出最相似的句子對,大概需要5000萬(C100002=49,995,000)個推理計算,在V100GPU上耗時約65個小時。這種結構使得BERT不適合語義相似度搜索,同樣也不適合無監督任務(例如:聚類)。
本文基于BERT網絡做了修改,提出了Sentence-BERT(SBERT)網絡結構,該網絡結構利用孿生網絡和三胞胎網絡結構生成具有語義意義的句子embedding向量,語義相近的句子其embedding向量距離就比較近,從而可以用來進行相似度計算(余弦相似度、曼哈頓距離、歐式距離)。該網絡結構在查找最相似的句子對,從上述的65小時大幅降低到5秒(計算余弦相似度大概0.01s),精度能夠依然保持不變。這樣SBERT可以完成某些新的特定任務,例如相似度對比、聚類、基于語義的信息檢索。
二、模型介紹
1)pooling策略
SBERT在BERT/RoBERTa的輸出結果上增加了一個pooling操作,從而生成一個固定大小的句子embedding向量。實驗中采取了三種pooling策略做對比:
直接采用CLS位置的輸出向量代表整個句子的向量表示
MEAN策略,計算各個token輸出向量的平均值代表句子向量
MAX策略,取所有輸出向量各個維度的最大值代表句子向量
三個策略的實驗對比效果如下:
可見三個策略中,MEAN策略是效果最好的,所以后面實驗默認采用的是MEAN策略。
2)模型結構
為了能夠fine-tune BERT/RoBERTa,文章采用了孿生網絡和三胞胎網絡來更新權重參數,以達到生成的句子向量具有語義意義。該網絡結構依賴于具體的訓練數據,文中實驗了下面幾種結構和目標函數:
Classification Objective Function:
這里將embedding向量u和v以及它們之間的差向量拼接在一起,組成一個新的向量,乘以權重參數Wt∈R3n*k,n表示向量的維度,k是分類標簽數量。
優化的時候采用交叉熵損失函數。
Regression Objective Function:
兩個句子嵌入向量u和v的相似度計算結構如下:
采取MAE(mean squared error)損失作為優化的目標函數。
Triplet Objective Function:
給定一個主句a、一個正面句子p和一個負面句子n,三元組損失調整網絡,使得a和p之間的距離小于a和n之間的距離。數學上,我們最小化以下損失函數:
s表示a、p、n的句子嵌入向量,||·||表示距離,邊緣參數ε表示sp與sa的距離至少比sn近ε。
3)模型訓練
文中訓練結合了SNLI(Stanford Natural Language Inference)和Multi-Genre NLI兩種數據集。SNLI有570,000個人工標注的句子對,標簽分為矛盾、蘊含、中立三種;MultiNLI是SNLI的升級版,格式和標簽都一樣,有430,000個句子對,主要是一系列口語和書面語文本。文本蘊含關系描述的是兩個文本之間的推理關系,其中一個文本作為前提(premise),另一個文本作為假設(hypothesis),如果根據前提P能夠推理得出假設H,那么就說P蘊含H,記做P->H。參考樣例如下:
實驗時,每個epoch作者用3-way softmax分類目標函數對SBERT進行fine-tune,batch_size=16,采用Adam優化器,learning rate=2e-5,pooling策略是MEAN。
三、評測-語義文本相似度(Semantic Textual Similarity-STS)
在評測的時候,這里采用余弦相似度來比較兩個句子向量的相似度。
1)無監督STS
本次評測采用的是STS 2012-2016 五年的任務數據、STS benchmark數據(2017年構建)、SICK-Relatedness數據,這些數據集都是標好label的句子對,label表示句子之間的相互關系,范圍為0~5,樣例如下:
無監督評測不采用這些數據集的任何訓練數據,直接用上述訓練好的模型來計算句子間的相似度,然后通過斯皮爾曼等級相關系數來衡量模型的優劣。結果如下:
結果顯示直接采用BERT的輸出結果,效果挺差的,甚至不如直接計算GloVe嵌入向量的平均值效果好;采用本文的孿生網絡在NLI數據集上fine-tuning后的模型效果明顯要好很多,SBERT和SRoBERTa差異不大。
2)有監督STS
有監督STS數據集采用的是STS benchmark(簡稱STSb)數據集,就是上面提到的2017年抽取構建的,是當前比較流行的有監督STS數據集。它主要來自三個方面:字幕、新聞、論壇,包含8,628個句子對,訓練集5,749,驗證集1,500,測試集1,379。BERT將句子對同時輸入網絡,最后再接一個簡單的回歸模型作為輸出,目前在此數據集上取得了SOTA的效果。
上述實驗結果分為三塊:
not trained for STS:表示直接采用的是跟上面無監督評測一樣的模型,結果也一樣;
Trained on STS benchmark:表示沒有使用NLI數據集,直接在STSb訓練數據集上利用孿生網絡結構構建回歸模型fine-tuning;
Trained on NLI data+STS benchmark:表示利用孿生網絡先在NLI數據集上訓練分類模型學習句子向量表示,然后在STSb訓練集上再利用回歸模型再次學習句子embedding,相當于利用兩種數據集進行了兩次fine-tuning。
評測的時候都是采用的STSb的測試集進行評測。可以看到,最后一種訓練方式表現最好,尤其單純的BERT架構有較大的提升幅度。
四、評測-SentEval
SentEval是一個當前流行的用來評測句子embedding質量的工具,這里句子embedding可以作為邏輯回歸模型的特征,從而構建一個分類器,并在test集上計算其精度。這里利用SentEval工具在下面幾個遷移任務上對比SBERT與其它生成句子embedding的方法:
MR(movie review):電影評論片段的情感預測,二分類
CR(product review):顧客產品評論的情感預測,二分類
SUBJ(subjectivity status):電影評論和情節摘要中句子的主觀性預測,二分類
MPQA(opinion-polarity):來自新聞網的短語級意見極性分類,二分類
SST(Stanford sentiment analysis):斯坦福情感樹庫,二分類
TREC(question-type classification):來自TREC的細粒度問題類型分類,多分類
MRPC:Microsoft Research Paraphrase Corpus from parallel news sources,釋義檢測。
實驗結果顯示,SBERT生成的句子向量似乎能夠很好捕獲情感信息,在MR、CR、SST上都有較大的提升;BERT在之前的STS數據集上表現比較差,但是在SentEval上卻有了不錯的效果表現,這是因為STS數據集上利用余弦相似度衡量句子向量,余弦相似度對于向量的每一個維度都是同等的,然而SentEval是利用邏輯回歸分類器來評測,這樣某些維度會對最終的分類結果產生影響。
所以,BERT的直接輸出結果無論是CLS位置的還是平均embedding都不適合用來計算余弦相似度、曼哈頓距離和歐式距離。雖然BERT在SentEval上面表現稍微好一些,但是基于NLI數據集的SBERT還是達到了SOTA的效果。
五、消融研究
為了對SBERT的不同方面進行消融研究,以便更好地了解它們的相對重要性,我們在SNLI和Multi-NLI數據集上構建了分類模型,在STSb數據集上構建了回歸模型。在pooling策略上,對比了MEAN、MAX、CLS三種策略;在分類目標函數中,對比了不同的向量組合方式。結果如下:
在pooling策略上,MEAN效果最好;在向量組合模式上,只有在分類訓練的時候才使用,結果顯示element-wise的|u-v|影響最大。
責任編輯:xj
原文標題:Sentence-BERT: 一種能快速計算句子相似度的孿生網絡
文章出處:【微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
-
深度學習
+關注
關注
73文章
5504瀏覽量
121244 -
自然語言
+關注
關注
1文章
288瀏覽量
13357
原文標題:Sentence-BERT: 一種能快速計算句子相似度的孿生網絡
文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論