第一次參加數據應用比賽,比勝過程中付出了不少精力, 常常寫代碼,檢查代碼帶凌晨一兩點。前期查閱了許多資料, 試了四五個模型。單模型最好的結果是0.28左右。離進入複賽只有一步之遙。初賽結束前兩天,恰好遇上了期末考試,沒有時間進行stacking。我以爲作一下模型集成,進入複賽仍是由但願的。git
這篇博客旨在總結參賽經歷,將參勝過程當中學到的知識,模型,技巧整理一下,達到鞏固的做用。github
這個比賽是天然語言處理類的。智能客服聊天機器人場景中,待客戶提出問題後,每每須要先計算客戶提出問題與知識庫問題的類似度,進而定位最類似問題,再對問題給出答案。本次比賽的題目即是問題類似度算法設計。算法
爲保護用戶隱私並保證比賽的公平公正,全部原始文本信息都被編碼成單字ID序列和詞語ID序列。單字包含單個漢字、英文字母、標點及空格等;詞語包含切詞後的中文詞語、英文單詞、標點及空格等。單字ID和詞語ID存在於兩個不一樣的命名空間,即詞語中的單字詞或者標點,和單字中的相同字符及相同標點不必定有同一個ID。工具
以「彩虹年華多少?」爲例子,用單字爲單位劃分獲得:彩,虹,年,化,多,少,?。以詞語爲單位劃分獲得:彩虹,年華,多少,?。分別用單字級別的詞向量和詞語級別的詞向量來表示。ui
給定兩個句子question1和question2的基於詞向量的表達,將它們做爲模型的輸入,通過模型的運算之後,模型輸入兩個類似的機率([0, 1])。編碼
通過一番搜索後,發現這屬於text match類的問題。因而,在Github上面以text matching 爲關鍵字進行搜索,匹配到的star最多的是matchzoo。matchzoo是中科院作的一個文本匹配的開源工具,裏面有8個左右的模型,我試了其中的matchsrnn, matchpyramid, asci, ascii, 效果都很差,多是我沒有仔細調參數的緣由。另外我還試了siamese LSTM + manhantan distance。siamese LSTM + manhantan的結果不錯, 沒有用CV的時候,線上能達到0.29左右。(爲何沒有CV? 第一次參賽,好多騷操做都不知道。。。)。想着要用stacking,而LSTM的訓練比較慢,由於LSTM不能並行計算。因此我又嘗試了siamese CNN, 用到了dialated convolution。siamese CNN沒有CV的時候效果能達到0.28左右。在這個模型上使勁地調了參數,也沒有獲得一個更好的結果。以後我又試了最新出的論文裏面的模型DIIN,這個模型很複雜,準確率高可是loss卻不理想,甚至比不上siamese LSTM.。這個模型的參數也難調,稍不注意,模型就不收斂了。spa
總結起來,此次參加比賽,沒有作太多事情,基本上就是嘗試了幾個模型,而後知道了參加這類比賽特徵工程和模型集成很重要。設計
後期,我準備白賽中用到的代碼整理一下,發佈到個人Github上面。blog