2017知乎看山杯 從入門到第二

2021-08-30 15:44:56 字數 2206 閱讀 7406

利用乙個暑假的時間,做了研究生生涯中的第乙個正式比賽,最終排名第二,有些小遺憾,但收穫更多的是成長和經驗。我們之前沒有參加過機器學習和文字相關的比賽,只是學過一些理論基礎知識,沒有付諸過實踐,看過的幾篇**也多虧前輩的分享(乙個是用深度學習(cnn rnn attention)解決大規模文字分類問題 - 綜述和實踐

,另乙個是brightmart的text_classification

,裡面用keras實現了很多文字分類的模型)。這些為我們的入門打下了良好的基礎,在比賽過程中也是反覆研讀和實踐,在此感謝兩位前輩的無私分享。

下面對在這次比賽中用到的方法和收穫的經驗,做乙個簡單的總結和分享。

用單模型探索資料的極限

比賽提供的資料是300萬問題和話題的標題(下稱title)及描述(下稱desc),分別有對應的字序列(下稱char)和詞序列(下稱word),全部是以id的形式給出。這意味著我們是看不到原始文字的,所以對於badcase的分析也很困難,但好在其資料量夠大(2億多詞,4億多字),還是可以用深度學習來做。知乎官方也提供了訓練好的embedding(維度256),字級別和詞級別的都有,但是是分開訓練,不屬於同乙個語義向量空間。

坊間常說:資料和特徵決定了機器學習的上限,而模型和演算法知識逼近這個上限而已。對於深度學習,因為不存在特徵工程,所以資料處理就至關重要了。而良好且合理的資料處理離不開系統詳細的資料分析,要知道資料是什麼樣,資料怎麼分布,才能更好地選擇模型和訓練方式。

這裡主要是對問題的title和desc做長度分析,更為詳細的分析見資料分析

首先是問題title的字詞長度分布:

其次是問題desc的字詞長度分布:

參照brightmart的github開源,我們嘗試了前5種模型,分別是fasttext

、textcnn

、textrnn、rcnn

、han

其中,han的原始**中用的是詞和句子兩層attention,而資料中是看不出句子的,所以這個方法我只用了一層word,效果不好。而rcnn因為同時用到了rnn和cnn的思想,所以整個網路的訓練時間很長,且其效果與單獨的rnn和cnn差不多,因此後期沒有使用此模型。最終用到的模型有:

因為沒有花很多時間在單模型調參訓練上,所以最終單model的分數普遍偏低,約比別的隊伍低0.5~1個百分點。

通過用這種方法,單模型score有了質的飛躍,平均提公升都在1.5個百分點(fasttext因模型過於簡單,提公升空間有限),而10層的rnn則更是在用全部訓練集finetune之後,分數直接從0.413飆公升到0.42978,可謂真是用單模型探索資料的極限了。

這種方法的優勢在於,一般只要不斷加深訓練層數,效果就會提公升,但缺點卻在於它抹平了模型的差異性,對於模型融合效果不友好。

模型融合依靠差異性,而我們模型的差異性在前面已經近乎被抹平,所以又另尋他路,用了另外兩個方法:

最終模型主要是5個10層模型的概率加權融合,分數在0.43506。

這次比賽收穫很大,總結起來就是:

最後,還是要感謝知乎等組織舉辦的這次比賽,也感謝北郵模式識別實驗室的大力支援!

2017 知乎看山杯從入門到第二

利用乙個暑假的時間,做了研究生生涯中的第乙個正式比賽,最終排名第二,有些小遺憾,但收穫更多的是成長和經驗。我們之前沒有參加過機器學習和文字相關的比賽,只是學過一些理論基礎知識,沒有付諸過實踐,看過的幾篇 也多虧前輩的分享 乙個是用深度學習 cnn rnn attention 解決大規模文字分類問題 ...

C 從入門到工作 第二節 20180708

1.a 5 a a 5 其他的計算相近,這裡有的人說區分不開放在前面和放在後面的意義,其實這個單純地看做乙個符號是最好的。和 無關,和 無關,和兩者的組合有關。2.判斷語句if if word else 如果僅為一條結果語句也可以省略花括號 if word std cout it is a word...

Python從入門到精通第二章習題

1,2,3,4四個數字組成無重複數字的3位數 def 21 for a in range 1 5 for b in range 1 5 for c in range 1 5 if a b and b c and a c print a,b,c 21 根據利潤分級獎金 def 22 profit ev...