當前位置:
首頁 > 知識 > Quora Question Pairs 競賽冠軍經驗分享:採用 4 層堆疊,經典模型比較給力

Quora Question Pairs 競賽冠軍經驗分享:採用 4 層堆疊,經典模型比較給力

AI 研習社按:今天要介紹的比賽是Quora Question Pairs,該比賽的目的是將具有相同意圖的問題正確配對。最近本次競賽的冠軍在 Kaggle 社區分享了競賽經驗, AI 研習社進行了編譯。

Quora 是一個獲取和分享知識的問答平台,它能夠促進人們互相學習,以更好地認識這個世界。每個月有超過 1 億的人訪問 Quora,所以有許多人可能提出相似的問題。然而這些具有相似意圖的問題可能會使得尋求者需要花費更多的時間,才能找到所需的最佳答案,而答題者可能也會覺得很多問題存在重複。

為了更好地發掘那些具有相似意圖的問題,以幫助用戶更快地找到問題的高質量答案,提高用戶使用體驗,Quora 在 Kaggle 上舉辦了本次競賽: Quora Question Pairs。下文是比賽冠軍的經驗分享,正文如下。


1、特徵

我們將特徵區分為三種:嵌入特徵(Embedding features)、經典文本挖掘特徵(Classical text mining features)和結構化特徵(Structural features)

嵌入特徵

詞嵌入(Word embeddings),例如 Word2Vec

句子嵌入(Sentence embeddings),例如 Doc2Vec、Sent2Vec

使用在 SNLI 上訓練的 ESIM 模型的密集層來編碼問題對(Question pair)

備註:與 Word2Vec 相比,句子嵌入的挑戰更為艱巨,因為它擁有更少的有效信息。

經典文本挖掘特徵

LDA 和 LSI 嵌入的相似性度量

字元袋 n 元模型(Bag of character n-grams,n 取 1 到 8)的相似性度量(TFIDF 重加權或者不重加權)

網友 Abhishek 和 owl 分享的特徵

當問題的開始或結束相同時,編輯和排序匹配距離

問題長度各異

大寫字母、標籤等的數量

以 "Are"、"Can"、"How"等開頭的句子占問題的 1/2,所有相應的數學工程

我們還使用斯坦福大學的 corenlp 來標記辭彙,利用 postagger 和 ner 來預處理一些深度學習模型的文本輸入。

結構化特徵

我們從訓練數據和測試數據集串起的多個問題對的邊(edge)來構建圖,進而構建密度特徵。當切割主邊時,我們會統計附件的問題 1、問題 2、最小、最大、交叉、聯合、最短路徑長度。

我們進一步建立了密度特徵,一次又一次計算鄰問題的鄰問題......(嵌套循環)。我們還計算了前面的問題,它也挨著後面的問題(循環)。

我們嘗試了不同的圖結構:我們構建了無向圖和有向圖(邊從問題 1 指向問題 2),我們也試圖將問題 1 的密度特徵從問題 2 的特徵中分離出來,除了可交換的特徵之外還產生了不可交換特徵。

我們還建立了描述問題對連通子圖的特徵:邊數、節點數、訓練的邊的百分比。

我們還計算了問題對的鏈接子圖中的相同特徵,這些子圖來自於出現超過一次的問題對。我們想要做的是通過改變結構來消除那些我們認為會破壞圖特徵的捏造問題。

最後,和其它團隊一樣,我們使用一些初始模型對圖進行加權。我們嘗試了 logit ,重新調整了預測,但是原始預測效果最好。我們還使用相似特徵之一對圖進行加權。

2、模型

我們的 NNets 主要在兩個架構上進行工作:孿生神經網路(Siamese neural networks)和注意力神經網路(Attention neural networks)

帶有預訓練 Glove 嵌入的孿生 LSTM

具有預訓練 FastText 嵌入的可分解注意力機制(https://arxiv.org/abs/1606.01933),這個模型在 cv 上取得了 ~0.3 。

具有預訓練 FastText 嵌入的 ESIM(https://arxiv.org/abs/1609.06038),這是我們最好的純深度學習的 NLP 模型,它在 cv 上取得了 ~0.27。但是這個模型運行時間太長,我們只在第一個堆疊層中使用過一次。

我們注意到深度學習(DL) 在第一個堆疊層中具有很好的效果,但是在第二層上卻不如簡單的多層感知機(MLP)。

其中一個關鍵問題是選擇我們的一些傳統特徵並將其納入這些網路。我們使用預訓練的 FastText 和 Glove 嵌入,並設置trainable=False,因為我們曾經嘗試過微調模型參數,但並沒有獲得任何性能提高。

最終,我們證明了在文本序列和我們的圖/文本挖掘特徵上訓練的神經網路是性能最好的單一模型。我們還嘗試在字元層級上訓練孿生模型,以進一步提高堆疊的多樣性,但是很難判斷它是否真的有用。

然後我們嘗試了更多的經典演算法以利用圖結構特徵,比如像常用演算法 XGB/LGBM。


3、再縮放(Rescaling)

為了平衡訓練和測試數據之間目標分布(Target distribution)的差異,我們在 sweezyjeezy 分析(再次感謝他的貢獻,它幾乎幫助了所有的參賽者)的基礎上做了更細緻的研究,鏈接是:

https://www.kaggle.com/c/quora-question-pairs/discussion/31179

我們意識到可以通過優化再縮放來減少 Log loss。雖然我們沒有找到一個更好的假設來模擬測試數據集中數據的分布,但是通過在數據的本地子樣本上使用該方案,成功增加了演算法的準確性。

我們發現訓練/測試數據偏差在三個方面非常不同:

qid1_count = qid2_count = 1

min_qid_count = 1 & max_qid_count > 1

min_qid_count > 1

我們嘗試了公共縮放(Public rescale)和外圍縮放(Perimeter rescale)。對於第一層模型來說兩者的效果都非常好,但是隨著堆疊的深入,我們發現公共縮放不夠強大,而外圍縮放卻有點過頭。我們優化了縮放,使它的效果在這兩種方法之間,與公共縮放相比,最終提高了 ~0.001。


4、堆疊(Stacking)

我們採用了四層的堆疊:

層 1:大約 300 個模型,Paul 和 Lam 的神經網路,以及像 XGB、LGBM 這樣效果出眾的經典演算法,以及大量的 Scikit-learn 分類演算法(ET、RF、KNN等等)

層 2:大約使用了 150 個模型:

所有輸入特徵

以上所有演算法的預測結果

我們添加了最好的 L1 純文本 ESIM 模型的隱藏層

層 3:2 個線性模型

以最小的 3 個 Spearman 相關性 L2 預測為基礎進行嶺回歸(Ridge)(基於最大/最小值,創建了 3 個邊界)

採用 LASSO(回歸模型)對所有的 L1 和 L2 預測進行 logit 預處理

層 4:混合

55/45,基於公共 LB 得分(最佳的提交成績)

ViaQuora Question Pairs,由 AI 研習社進行編譯。

春節 AI 學習狂歡,精品課程 豪華特輯

優惠折上折,福利搶不停!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI研習社 的精彩文章:

進入微軟亞洲研究院是一個怎麼樣的面試流程?需要做好哪些準備?
人工智慧從入門到實戰,這裡有一份1000+頁的指南

TAG:AI研習社 |