深度本文匹配發展總結
來自專欄 AI notes17 人贊了文章
?1、背景介紹
文本匹配是自然語言處理中的一個核心問題,很多自然語言處理的任務都可以抽象成文本匹配問題,例如信息檢索可以歸結成查詢項和文檔的匹配,問答系統可以歸結為問題和候選答案的匹配,對話系統可以歸結為對話和回復的匹配。針對不同的任務選取合適的匹配模型,提高匹配的準確率成為自然語言處理任務的重要挑戰。
2、數據集介紹
論文中經常用到的數據集:
- SNLI:570K條人工標註的英文句子對,label有三個:矛盾、中立和支持
- MultiNLI:433K個句子對,與SNLI相似,但是SNLI中對應的句子都用同一種表達方式,但是MultiNLI涵蓋了口頭和書面語表達,可能表示形式會不同(Mismatched)
- Quora 400k個問題對,每個問題和答案有一個二值的label表示他們是否匹配
- WikiQA是問題是相對應的句子的數據集,相對比較小。
3、模型發展過程
深度學習應用在文本匹配上可以總結為以下四個階段:1、單語義模型,單語義模型只是簡單的用全連接、CNN類或RNN類的神經網路編碼兩個句子然後計算句子之間的匹配度,沒有考慮到句子中短語的局部結構。2、多語義模型,多語義模型從多顆粒的角度解讀句子,考慮到和句子的局部結構。3、匹配矩陣模型,匹配矩陣模型更多的考慮待匹配的句子間不同單詞的交互,計算兩兩之間的匹配度,再用深度網路提取特徵,更精細的處理句子中的聯繫。4、深層次的句子間模型,這是近幾年state of the art的模型,隨著attention等交互機制論文的發表,最新的論文用更精細的結構去挖掘句子內和句子間不同單詞之間的聯繫,得到更好的效果。
- 1、單語義模型
- 2、多語義模型
- 3、匹配矩陣模型
- 4、深層次的句間交互模型
前3類模型只簡單挑選一篇作介紹,了解發展過程,重點介紹第4類最新的論文。
3.1 單語義模型
單語義模型最經典是DSSM,這是一篇2013年的文章,它有兩個創新點,一個是用一種3個字母word hashing代替詞袋模型,降低了單詞向量的維度(由於當時word2vec論文還未發表),第二個是用全連接的神經網路處理句子,揭開深度文本匹配的篇章。
論文:Learning Deep Structured Semantic Models for Web Search using Clickthrough Data所謂的3個字母的word hashing就是先在單詞上加上#表示符標記開頭和結尾,例如#good#,然後每3個符號進行拆分,即變成#goo, goo, ood, od#,然後用multi-hot的形式表示這個單詞,數據集的英語辭彙可能會有很多(論文中的數據集有500K),而3個英語字元的組合相對數量比較少,可以窮盡。
這是模型的結構圖,輸入Q是一個查詢,D是各個候選文檔,可以看到用詞袋模型維度是500k,用word hashing 的方法可以將維度壓縮到30k,然後通過全連接的神經網路對向量進行降維到128,接著兩兩計算餘弦相似度得到匹配結果。
這個模型的缺陷在於:1、沒有考慮到單詞之間的時序聯繫,2、相似度匹配用的餘弦相似度是一個無參的匹配公式。
3.2 多語義模型
多語義論文比較多,這裡挑選一篇MV-LSTM作介紹。
論文:A Deep Architecture for Semantic Matching with Multiple Positional Sentence Representations這篇論文採用雙向LSTM處理兩個句子,然後對LSTM隱藏層的輸出進行兩兩計算匹配度,作者認為這是一個Multi-View(MV)的過程,能夠考察每個單詞在不同語境下的含義。同時用雙向LSTM處理句子,相當於用變長的窗口逐步的解讀句子,實現多顆粒度考察句子的效果。這篇論文有3個創新點:1、使用了當時比較新型的雙向LSTM模型,這種模型能考慮到句子的時序關係,能捕捉到長距離的單詞依賴,而且採用雙向的模型,能夠減輕這種有順序的模型權重偏向句末的問題。2、用Interaction tensor計算句子之間的兩兩匹配度,從多個角度解讀句子。3、匹配計算公式採用了帶參數的計算公式。
這是模型的結構圖,用Bi-LSTM同時處理兩個句子,每個單詞節點會對應兩個隱藏層的輸出,用每個單詞的輸出進行單詞間兩兩的相似度匹配計算,形成一個匹配矩陣,這裡的相似度計算採用了帶參數的公式: ,因為語言的表示有多樣性,帶參數的公式比不帶參數的公式顯得更加合理,然後對匹配矩陣進行K-Max的動態池化操作,也就是挑選K個最大的特徵,最後採用全連接層進行維度壓縮和分類。
3.3 匹配矩陣模型
匹配矩陣模型挑選論文:Text Matching as Image Recognition
這篇論文從3個角度構建匹配矩陣,更精細的考慮句子間單詞的兩兩關係,構建出3個矩陣進行疊加,把這些矩陣看作是圖片,用卷積神經網路對矩陣進行特徵提取。論文中一共有3種方式構建匹配矩陣,文中展示的是其中兩種,Indicator是一個這個句子的單詞是否在另一個句子中出現的指示矩陣,第二個是單詞之間的點積,第三個是餘弦相似度。三個匹配矩陣疊加再用CNN在矩陣上進行特徵提取是這篇整體的思想。
3.4 深層次的句間交互模型
背景知識介紹:這些深層次的模型每個單詞都是採用glove的預訓練和characters卷積拼接作為單詞的embedding輸入。glove是類似於word2vec的詞向量訓練模型,word2vec是考慮單詞上下文的局部信息,而glove用了全局的共現矩陣,同時考慮到了局部和整體的信息,characters卷積是對每個字母隨機賦予一個向量,對單詞的所有字母卷積得出特徵作為單詞的補充特徵,這些特徵是為了緩解OOV的問題,OOV就是訓練集中出現了語料庫中沒出現過的單詞。另外模型可能還會用到EM特徵和POS特徵,EM特徵是excat match特徵,就是這個單詞在另一個句子中是否出現。POS是詞性的特徵,每個單詞的詞性作獨熱表示後納入模型考慮。
3.4.1 BiMPM
Bilateral Multi-Perspective Matching for Natural Language Sentences
雙邊多角度句子匹配,這篇文章的創新點在於:1、雙邊,認為句子不應該僅僅考慮一個方向,從問句出發到答句,也應該從答句去反推問句。2、多角度,在考慮句子間的交互關係時採用了4種不同的方式。這篇文章發表在2017年的ijcai,模型取得了很好的效果,但是缺點在於參數很多,運算速度比較慢。(d) Max-Attentive,與Attentive相似,先計算出attention的權重,取其中權重最大的,做相似度匹配。
從這個實驗結果可以看出,雙邊的操作,和4種匹配方式都分別起到了作用,他們組合在一起得到最好的實驗效果。3.4.2 DIIN
Natural Language Inference over Interaction Space
這篇論文的創新點在於考慮到了同句間不同單詞之間的交互關係,另外就是模型中採用了2016年CVPR的best paper的model DenseNet。DenseNet可以在經過複雜的深度神經網路之後,還可以很大程度上保留原始特徵的信息。這是模型的整體框架圖,可以看到模型的輸入有4個部分的特徵,就是背景介紹中的4個。然後用highway network對特徵進行編碼,這個編碼的輸出構造一個句子內的attention,具體就是裡面的公式 ,對單詞a和單詞b的向量和它們的點積進行拼接,再做一個線性的映射得到一個權重參數,經過softmax歸一化後成為句內attention的權重參數,然後是參考了LSTM的設計,對highway出來的向量和帶了句內交互的attention項的向量用門機制進行了過濾,得到每個單詞的向量表示,然後將向量表示兩兩之間做一個匹配形成匹配矩陣,最後用DenseNet對匹配矩陣進行特徵提取。3.4.3 DRCN
Semantic Sentence Matching with Densely-connected Recurrent and Co-attentive Information
這篇論文的創新點在於:1、採用了固定的glove embedding和可變的glove embedding拼接並提升了模型效果。2、採用stack層級結構的LSTM,在層級結構上加入了DenseNet的思想,將上一層的參數拼接到下一層,一定程度上在長距離的模型中保留了前面的特徵信息。3、由於不斷的拼接導致參數增多,用autoencoder進行降維,並起到了正則化效果,提升了模型準確率。模型的輸入是可變的glove向量和非可變的glove向量,chars卷積特徵和一些標示特徵(例如EM特徵),然後經過BiLSTM對每個單詞的特徵編碼,同時這裡會加入attention機制考慮兩個句子間的交互關係,計算隱藏層輸出餘弦相似度,softmax歸一化成attention權重,加權求和後得到attention的向量,當前的單詞特徵向量、attention的向量、上一層的LSTM該step隱藏層輸出向量同時作為當前step的輸入,然後採用stack LSTM的結構疊加多層LSTM,論文中一個疊加了5層,隨著層數的增加,每一層step的輸入會越來越大,所以在最後兩層加入了autoencoder對參數進行降維,最後用全連接網路進行預測。這個實驗可以看到各個部件起到的作用。4、DIIN在中文數據集上測試
https://github.com/xiayto/DIIN_for_ccks
這裡是用wiki的中文語料庫用word2vec訓練字向量,然後進行匹配,同時進行了附近中文字的卷積操作補充了局部結構的特徵,對char卷積特徵和EM特徵的加入效果作了比較,但是由於POS詞性特徵需要分詞和重新訓練語料庫,沒有加入,有興趣的朋友可以分詞之後再對句子進行編碼,加入POS特徵可能可以取得更好的效果。附:從pdf中提取文字,訓練中文word2vec小工具https://github.com/xiayto/word2vec5、工程應用上的思考
- 1、雖然深度學習能夠很大的提高匹配的準確率,但是同時也需要很長的計算時間,對話過程中長時間的等待會很大的降低用戶體驗,根據任務場景選擇模型顯得比較重要。
- 2、不是所有的數據集都有大量標註好的句子讓模型訓練,如何用遷移學習的方法,用大數據集的模型提升小數據集的模型效果,或者用半監督、無監督的方法提升模型效果、或者對數據集進行數據增強是後面要接著研究的方向。
參考文獻:
1、DSSM : Learning deep structured semantic models for web search using clickthrough data, PS Huang et al.2、ARC:Convolutional Neural Network Architectures for Matching Natural Language Sentences, B Hu et al.
3、MV-LSTM : A Deep Architecture for Semantic Matching with Multiple Positional Sentence Representations, S Wan et al
4、MatchPyramid:Text Matching as Image Recognition, L pang et al.
5、BiMPM:Bilateral Multi-Perspective Matching for Natural Language Sentences, Z Wang et al.
6、DIIN:Natural Language Infefence Over Interaction space, Y Gong et al.
7、DRCN:Semantic Sentence Matching with Densely-connected Recurrent and Co-attentive Information, S Kim et al.?
推薦閱讀:
※論文筆記 - Making Neural QA as Simple as Possible but not Simpler
※隱馬爾科夫模型學習總結之Viterbi演算法應用
※[論文筆記]Relational inductive biases, deep learning, and graph network
※「變形金剛」Google Tensor2Tensor系統