0
雷鋒網(wǎng) AI 研習(xí)社按:今天要介紹的比賽是 Quora Question Pairs,該比賽的目的是將具有相同意圖的問題正確配對。最近本次競賽的冠軍在 Kaggle 社區(qū)分享了競賽經(jīng)驗,雷鋒網(wǎng) AI 研習(xí)社進行了編譯。
Quora 是一個獲取和分享知識的問答平臺,它能夠促進人們互相學(xué)習(xí),以更好地認識這個世界。每個月有超過 1 億的人訪問 Quora,所以有許多人可能提出相似的問題。然而這些具有相似意圖的問題可能會使得尋求者需要花費更多的時間,才能找到所需的最佳答案,而答題者可能也會覺得很多問題存在重復(fù)。
為了更好地發(fā)掘那些具有相似意圖的問題,以幫助用戶更快地找到問題的高質(zhì)量答案,提高用戶使用體驗,Quora 在 Kaggle 上舉辦了本次競賽: Quora Question Pairs。下文是比賽冠軍的經(jīng)驗分享,正文如下。
1、特征
我們將特征區(qū)分為三種:嵌入特征(Embedding features)、經(jīng)典文本挖掘特征(Classical text mining features)和結(jié)構(gòu)化特征(Structural features)。
嵌入特征
詞嵌入(Word embeddings),例如 Word2Vec
句子嵌入(Sentence embeddings),例如 Doc2Vec、Sent2Vec
使用在 SNLI 上訓(xùn)練的 ESIM 模型的密集層來編碼問題對(Question pair)
備注:與 Word2Vec 相比,句子嵌入的挑戰(zhàn)更為艱巨,因為它擁有更少的有效信息。
經(jīng)典文本挖掘特征
LDA 和 LSI 嵌入的相似性度量
字符袋 n 元模型(Bag of character n-grams,n 取 1 到 8)的相似性度量(TFIDF 重加權(quán)或者不重加權(quán))
網(wǎng)友 Abhishek 和 owl 分享的特征
當(dāng)問題的開始或結(jié)束相同時,編輯和排序匹配距離
問題長度各異
大寫字母、標(biāo)簽等的數(shù)量
以 "Are"、"Can"、"How"等開頭的句子占問題的 1/2,所有相應(yīng)的數(shù)學(xué)工程
我們還使用斯坦福大學(xué)的 corenlp 來標(biāo)記詞匯,利用 postagger 和 ner 來預(yù)處理一些深度學(xué)習(xí)模型的文本輸入。
結(jié)構(gòu)化特征
我們從訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)集串起的多個問題對的邊(edge)來構(gòu)建圖,進而構(gòu)建密度特征。當(dāng)切割主邊時,我們會統(tǒng)計附件的問題 1、問題 2、最小、最大、交叉、聯(lián)合、最短路徑長度。
我們進一步建立了密度特征,一次又一次計算鄰問題的鄰問題......(嵌套循環(huán))。我們還計算了前面的問題,它也挨著后面的問題(循環(huán))。
我們嘗試了不同的圖結(jié)構(gòu):我們構(gòu)建了無向圖和有向圖(邊從問題 1 指向問題 2),我們也試圖將問題 1 的密度特征從問題 2 的特征中分離出來,除了可交換的特征之外還產(chǎn)生了不可交換特征。
我們還建立了描述問題對連通子圖的特征:邊數(shù)、節(jié)點數(shù)、訓(xùn)練的邊的百分比。
我們還計算了問題對的鏈接子圖中的相同特征,這些子圖來自于出現(xiàn)超過一次的問題對。我們想要做的是通過改變結(jié)構(gòu)來消除那些我們認為會破壞圖特征的捏造問題。
最后,和其它團隊一樣,我們使用一些初始模型對圖進行加權(quán)。我們嘗試了 logit ,重新調(diào)整了預(yù)測,但是原始預(yù)測效果最好。我們還使用相似特征之一對圖進行加權(quán)。
2、模型
我們的 NNets 主要在兩個架構(gòu)上進行工作:孿生神經(jīng)網(wǎng)絡(luò)(Siamese neural networks)和注意力神經(jīng)網(wǎng)絡(luò)(Attention neural networks)。
帶有預(yù)訓(xùn)練 Glove 嵌入的孿生 LSTM
具有預(yù)訓(xùn)練 FastText 嵌入的可分解注意力機制(https://arxiv.org/abs/1606.01933),這個模型在 cv 上取得了 ~0.3 。
具有預(yù)訓(xùn)練 FastText 嵌入的 ESIM(https://arxiv.org/abs/1609.06038),這是我們最好的純深度學(xué)習(xí)的 NLP 模型,它在 cv 上取得了 ~0.27。但是這個模型運行時間太長,我們只在第一個堆疊層中使用過一次。
我們注意到深度學(xué)習(xí)(DL) 在第一個堆疊層中具有很好的效果,但是在第二層上卻不如簡單的多層感知機(MLP)。
其中一個關(guān)鍵問題是選擇我們的一些傳統(tǒng)特征并將其納入這些網(wǎng)絡(luò)。我們使用預(yù)訓(xùn)練的 FastText 和 Glove 嵌入,并設(shè)置 trainable=False,因為我們曾經(jīng)嘗試過微調(diào)模型參數(shù),但并沒有獲得任何性能提高。
最終,我們證明了在文本序列和我們的圖/文本挖掘特征上訓(xùn)練的神經(jīng)網(wǎng)絡(luò)是性能最好的單一模型。我們還嘗試在字符層級上訓(xùn)練孿生模型,以進一步提高堆疊的多樣性,但是很難判斷它是否真的有用。
然后我們嘗試了更多的經(jīng)典算法以利用圖結(jié)構(gòu)特征,比如像常用算法 XGB/LGBM。
3、再縮放(Rescaling)
為了平衡訓(xùn)練和測試數(shù)據(jù)之間目標(biāo)分布(Target distribution)的差異,我們在 sweezyjeezy 分析(再次感謝他的貢獻,它幾乎幫助了所有的參賽者)的基礎(chǔ)上做了更細致的研究,鏈接是:
https://www.kaggle.com/c/quora-question-pairs/discussion/31179
我們意識到可以通過優(yōu)化再縮放來減少 Log loss。雖然我們沒有找到一個更好的假設(shè)來模擬測試數(shù)據(jù)集中數(shù)據(jù)的分布,但是通過在數(shù)據(jù)的本地子樣本上使用該方案,成功增加了算法的準(zhǔn)確性。
我們發(fā)現(xiàn)訓(xùn)練/測試數(shù)據(jù)偏差在三個方面非常不同:
qid1_count = qid2_count = 1
min_qid_count = 1 & max_qid_count > 1
min_qid_count > 1
我們嘗試了公共縮放(Public rescale)和外圍縮放(Perimeter rescale)。對于第一層模型來說兩者的效果都非常好,但是隨著堆疊的深入,我們發(fā)現(xiàn)公共縮放不夠強大,而外圍縮放卻有點過頭。我們優(yōu)化了縮放,使它的效果在這兩種方法之間,與公共縮放相比,最終提高了 ~0.001。
4、堆疊(Stacking)
我們采用了四層的堆疊:
層 1:大約 300 個模型,Paul 和 Lam 的神經(jīng)網(wǎng)絡(luò),以及像 XGB、LGBM 這樣效果出眾的經(jīng)典算法,以及大量的 Scikit-learn 分類算法(ET、RF、KNN等等)
層 2:大約使用了 150 個模型:
所有輸入特征
以上所有算法的預(yù)測結(jié)果
我們添加了最好的 L1 純文本 ESIM 模型的隱藏層
層 3:2 個線性模型
以最小的 3 個 Spearman 相關(guān)性 L2 預(yù)測為基礎(chǔ)進行嶺回歸(Ridge)(基于最大/最小值,創(chuàng)建了 3 個邊界)
采用 LASSO(回歸模型)對所有的 L1 和 L2 預(yù)測進行 logit 預(yù)處理
層 4:混合
55/45,基于公共 LB 得分(最佳的提交成績)
Via Quora Question Pairs,由雷鋒網(wǎng) AI 研習(xí)社進行編譯。
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。