基於深度學習的短文本類似度學習與行業測評

文本類似度計算做爲NLP的熱點研究方向之一,在搜索推薦、智能客服、閒聊等領域獲得的普遍的應用。在不一樣的應用領域,也存在着必定的差別,例如在搜索領域大可能是計算query與document的類似度;而在智能客服、聊天領域更注重的是query與query之間的匹配,即短文本之間的類似度計算。
git

不一樣的文本長度,類似度的計算方案也存在差別,長文本匹配更多注重文本的關鍵詞或者主題的匹配,業界使用的較多的算法如:TF-IDF、LSA、LDA;而短文本匹配更多的是句子總體的語義一致性,業界較爲主流的算法有:word2vec、esim、abcnn、bert等深度模型。web

相比於長文本的類似度計算,短文本的類似度計算存在更大的挑戰。其一,短文本能夠利用的上下文信息有限,語義刻畫不夠全面;其二,短文本一般狀況下,口語化程度更高,存在缺省的可能性更大;第三,短文本更注重文本總體語義的匹配,對文本的語序、句式等更爲敏感。算法

query1
query2
我要打給你 我要打你
你叫什麼
你叫我什麼
我叫小布
我不叫小布
你有男票嗎
你是單身狗嗎
你真搞笑
你是個逗比啊
我喜歡看動漫
你不知道我喜歡看動漫嗎

不一樣文本類似度算法的得分分佈不一致,沒法經過評分來對算法進行評估。所以對於不一樣的算法方案,能夠設定特定的得分門限,得分高於門限,可判斷爲語義相同;不然,判斷爲語義不一樣。對於一個給定標籤的數據集,能夠經過準確率來衡量類似度計算的效果。經常使用的中文評估語料有:LCQMC、BQ Corpus、PAWS-X (中文)、afqmc等。微信

1. 主流方案

業界經常使用的短文本類似度計算方案大體能夠分爲兩類:監督學習與無監督學習,一般狀況下,監督學習效果相對較好。在沒有足夠的訓練數據須要冷啓動的狀況下,可優先考慮使用無監督學習來進行上線。網絡

1.1 無監督學習

最簡單有效的無監督學習方案就是預訓練的方式,使用word2vec或者bert等預訓練模型,對任務領域內的無標籤數據進行預訓練。使用獲得的預訓練模型,獲取每一個詞以及句子的語義表示,用於類似度的計算。架構

Word2vec是nlp領域一個劃時代的產物,將word的表徵從離散的one-hot的方式轉化成連續的embedding的形式,不只下降了計算維度,各個任務上的效果也取得了質的飛躍。Word2vec經過對大規模語料來進行語言模型(language model)的建模,使得語義相近的word,在embedding的表示上,也具備很強的相關性。app

經過cbow或者max-pooling的方式,使用句子中每一個詞的word embedding計算獲得sentence embedding,可使得語義類似的句子在sentence embedding的表示上也具有較高的相關性,相比於傳統的TF-IDF等類似度計算具備更好的泛化性。可是cbow的方式來計算sentence embedding,句子中全部word使用相同的權重,沒法準確獲取句子中的keyword,致使語義計算的準確率有限,難以達到上線標準。框架

雖然Word2vec提供了必定的泛化性,但其最大的弱點是在不一樣的語境下,同一個word的表徵徹底相同,沒法知足豐富的語言變化。gpt、bert等大規模預訓練模型的出現,完全解決了這個問題,作到了word的表徵與上下文相關,同時也不斷刷新了各個領域任務的榜單。異步

但實驗證實直接使用bert輸出的token embedding來計算句子的sentence embedding,不管使用cbow的方式對全部token embedding求平均或者直接使用[CLS] token的embedding來表示,語義計算的效果都不佳,甚至不如GloVe。究其緣由,在bert的預訓練過程當中,高頻詞之間共現機率更大,MLM任務訓練使得它們之間語義表徵更加接近,而低頻詞之間的分佈更爲稀疏。語義空間分佈的不均勻,致使低頻詞周圍中存在不少語義的「hole」,因爲這些「hole」的存在,致使語義計算的類似度存在誤差。編輯器

爲了解決bert語義空間不均勻的問題,CMU與字節跳動合做的bert-flow提出將bert的語義空間映射到一個標準的高斯隱空間,因爲標準高斯分佈知足各向同性,區域內不存在「hole」,不會破壞語義空間的連續性。

Bert-flow的訓練過程就是學習一個可逆的映射f,把服從高斯分佈的變量z映射到BERT編碼的u,那就能夠把u映射到均勻的高斯分佈,這時咱們最大化從高斯分佈中產生BERT表示的機率,就學習到了這個映射:

實驗代表,經過bert-flow的方式來進行語義表徵與類似度計算的效果,要遠遠優於word2vec以及直接使用bert的方式。

1.2 監督學習

Bert-flow的出現使得無監督學習在文本類似度計算方面取得了較大進步,可是在特定任務上相比於監督學習,效果還存在必定的差距。監督學習經常使用的類似度計算模型大體能夠分爲兩類:語義表徵模型,語義交互式模型。語義表徵模型經常使用於海量query召回,交互式模型更多使用於語義排序階段。

DSSM是搜索領域最經常使用的語義表徵模型之一,而在短文本匹配領域,使用最多的網絡結構是孿生網絡,經常使用的孿生網絡包括:siamese cbow,siamese cnn,siamese lstm等。孿生網絡訓練時,全部query使用相同模型來進行語義表徵,經過餘弦類似度等方式來計算query間的類似度,不斷最大化正樣本之間的相關性,抑制負樣本之間的相關性。預測時,每一個query經過語義模型單獨獲取語義向量,用來計算query之間的類似度得分。因爲query 語義表徵僅與自己有關,所以在進行query檢索時,能夠提早對語料庫中query構建語義索引,大大提高系統的檢索效率。

相比於語義表徵模型,交互式語義模型具備更好的匹配效果,模型結構每每也更加複雜,經常使用的交互式語義模型有ABCNN、ESIM等。交互式模型在計算query之間的語義類似度時,不只對單個query的語義特徵進行建模,還須要query之間的交互特徵。交互式模型一般使用二分類的任務來進行訓練,當模型輸入的兩個query語義一致,label爲「1」,反之,label爲「0」。在預測時,可經過logits來做爲置信度判斷。

大規模預訓練模型的出現,也橫掃了文本類似度任務的各項榜單。Bert將lcqmc數據集的SOTA帶到了86%的水平。隨後,Roberta、albert、ernie等新的預訓練模型層出不窮,也不斷刷新着匹配準確率的SOTA水平。

2. 業務應用

在語義問答的業務中,一般會使用召回+排序的算法架構,在咱們的閒聊業務中,咱們也使用了相似的架構。使用siamese cnn語義表徵模型來進行語義召回,用蒸餾後的transformer語義交互模型來作排序。

在語義表徵模型的loss構建上,咱們參考了人臉識別領域的損失函數設計。這個兩個任務在本質上是類似的,人臉識別是將人臉圖片用向量表示,而文本檢索式將文本用向量來進行表示,都指望正樣本之間有足夠高的相關性,負樣本之間足夠好區分。

在使用Siamese cnn進行語義建模時,咱們使用了1個標準query,1個正樣本,5個負樣本(嘗試過其餘負樣本數量,在咱們的數據上效果不如5個負樣本),訓練過程實際上是在這6個樣本中,識別出對應正樣本的位置,所以可將其轉化爲分類任務來進行訓練,每一個正負樣本分別對應一個類別。使用每一個樣本與標準query之間的類似度,來做爲對應類別的logits,對logits進行歸一化並構建loss函數。傳統的softmax歸一化構建的分類邊界使得類別之間可分,爲了更好的語義表徵效果,須要使得類內更加匯聚,類間更加分散。ASoftmax、AMSoftmax、ArcFace等歸一化方式,提出將全部query映射到一個球面,query之間的類似度經過他們之間的夾角來計算,夾角越小類似度越高,經過在角度域添加margin的方式,使得類內更匯聚,類間更可分,達到更好的語義表徵效果。

咱們對比了softmax、Asoftmax、AMSoftmax、Arcface等不一樣歸一化方式,其中,Softmax沒有添加任何margin,ASoftmax經過倍角的方式在角度域添加margin,AMSoftmax則是在餘弦域添加margin,而Arcface則是直接在角度域添加固定margin。

咱們使用30W的語料庫來構建索引,使用12900條線上query(語料庫中不包含徹底相同的query)來進行召回測試,使用相同的向量索引工具,對比發現AMSoftmax、Arcface召回效果上有很大提高,在咱們的業務中獲得了應用。

在排序模型方面,咱們嘗試了ABCNN、ESIM、transformer等交互式語義模型,但效果相比於bert等預訓練模型,還存在必定的差距。咱們團隊自研的預訓練模型Xbert,在與Roberta large同規模的狀況下,融入了自研知識圖譜數據,添加了WWM(whole word MLM)、DAE、Entity MLM等任務,使用LAMB優化器進行優化。咱們使用XBert在業務數據上進行了測試,相比於同規模的Roberta large準確率有接近0.9%的提高。爲了知足上線需求,咱們參考tiny bert的方式,用Xbert蒸餾了一個4層的transformer model用於線上推斷。

咱們在內部的問答數據集上對不一樣排序方案作了的效果對比,使用12900條線上用戶真實query,進行全鏈路的效果對比測試。用語義召回top1的準確率來評估語義表徵模型的效果,而且經過消歧模塊進一步提高應答準確率;測試排序模型效果時,咱們使用了多路召回,共召回30個候選,使用排序模型對候選排序,選擇排序後的top1做爲最終答案。若通過消歧模塊,全部候選均被消歧掉,或排序後的top1候選排序得分不知足應答門限時,則該query系統無應答。所以,咱們使用應答率與應答準確率來做爲系統最終的評測指標,來評估不一樣方案的效果。

爲了測試自研的Xbert在公開的語義類似度數據集上的效果,在lcqmc數據集上,單模型準確率88.96%,較Roberta large單模型87.9%的準確率,提高了1%;經過使用正樣本之間的傳遞性以及負樣本採樣的方式,來進行數據加強以及FGM對抗訓練的方式,準確率提高至89.23%;經過ensemble的方式,將準確率進一步提高至90.47%。經過相同的方式,在bq_corpus上達到了87.17%,在paws-x任務上達到了88%,在afqmc數據集上也達到了77.234%,在百度舉辦的千言文本類似度比賽中完成登頂。

3. 總結與展望

短文本類似度在咱們的閒聊領域獲得了應用,使用語義表徵學習來進行召回+交互模型排序的算法架構,在保證系統性能的前提下,取得了不錯的業務效果。在語義表徵模型上,咱們使用人臉識別領域的loss來提高召回效果;在語義排序方面,咱們也利用了大規模預訓練模型以及模型蒸餾,來進一步提高業務效果。在大規模預訓練語言模型方面,咱們積極探索與改進,相比於現有開源預訓練模型,咱們的Xbert在業務上以及公開數據集上的評測效果,都有了進一步的提高。

在從此的工做中,咱們會利用好預訓練模型這個核武器,在咱們Xbert的基礎上努力優化突破,將文本的類似度匹配任務帶新的臺階。在解決單輪類似度匹配的狀況下,咱們也會繼續探索結合上下文的多輪匹配以及多輪生成等任務,來進一步提高咱們閒聊業務的體驗。


☆ END ☆


招聘信息

OPPO互聯網技術團隊招聘一大波崗位,涵蓋C++、Go、OpenJDK、Java、DevOps、Android、ElasticSearch等多個方向,請點擊這裏查看詳細信息及JD


你可能還喜歡

OPPO自研ESA DataFlow架構與實踐

數據同步一致性保障:OPPO自研JinS數據同步框架實踐

微服務全鏈路異步化實踐

Dubbo協議解析與ESA RPC實踐

雲原生Service Mesh探索與實踐

更多技術乾貨

掃碼關注

OPPO互聯網技術

 

我就知道你「在看」

本文分享自微信公衆號 - OPPO互聯網技術(OPPO_tech)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。