“達觀杯”文字智慧處理挑戰賽心得體會
記錄一下參賽的過程和體會
比賽地址
比賽回顧
這是我第一次參加與NLP相關的比賽,所以就是在實踐中學習,哪裡不會點哪裡,經過大約10天的努力跑出的成績如下: 記錄下我的比賽提交記錄 回顧比賽,在整理自己的特徵資料、結果對比的時候還是有些不夠規範,有點混亂,以後要改正!
特徵分析 提取
感謝Jian老師提供的Github。我是jian老師的Github 首先,應該是分析資料得到其中的特徵,但比賽資料是經過脫敏後的資料,所以就沒分析~~,哈哈哈。 直接提取了tf(詞頻)、hash(雜湊)、tfidf(term frequency–inverse document frequency)詞頻逆文字頻率、lsa(潛在語義特徵)、Doc2vec等特徵。還有一個特徵是LDA(線性判別式分析),由於要生成這個特徵的時間太長所以放棄了,即使把tf特徵篩選之後生成LDA特徵,時間也是不能接受。 Tfidf特徵代表的是詞的重要程度,直覺上這個特徵一定比tf特徵要好,所以最開始使用的這個特徵。之前常聽Word2vec。所以當時查了一下Word2vec 和Doc2vec的區別(忘了··)
實驗
lsa單特徵
lsa特徵可以把tfidf特徵降維,可以找到詞在句子中的含義(具體作用有點忘了),因為不用詞在不同句子中的意思也不一樣。降維也可以提高執行速度。下面是lsa特徵在不同模型中的對比。
特徵 | 模型 | 分數 | 耗時(min) |
---|---|---|---|
lsa | SVM | 0.7227 | 0.88 |
lsa | lr | 0.7038 | 1.85 |
lsa | bagging | 0.7227 | 52 |
lsa | rf | 0.6428 | 0.74 |
lsa | adaboost | 0.7227 | 2.7 |
lsa | gbdt | 0.7026 | 164.88 |
可見SVM的得分最高,而且速度更快,比一些模型融合的方法更好,可能是因為特徵較少吧。 之後看見比賽討論中一個老哥的分享 “帶你進前10dadada”
特徵 | 模型 | 分數 | 耗時(min) |
---|---|---|---|
lsa | SVM | 0.7803 | 7.77 |
lsa | lgb | 0.75多點 | 383.88 |
las | adaboost | 0.77多點 | ~~ |
發現分數有所提高,調參挺有用 ,但是時間消耗很多,(有待分析)
特徵融合
由於生成多個特徵所以考慮了特徵融合。回頭看資料,資料中把文章分成“詞”表示和“字”表示,之前的實驗都是建立在“詞”表示文章的基礎上,所以接下來也把“字”表示文章加入實驗中。
特徵 | 模型 | 驗證集分數 | 耗時(min) | 比賽A榜得分 |
---|---|---|---|---|
lsa + vec2vec + tf.idf | SVM | 0.7789 | 173.31 | 0.775902 |
tfidf + tfidf_article | SVM | 0.7800 | 25.19 | 0.7760 (best) |
tfidf_article + lsa +vec2vec +tf.idf | SVM | 0.7800 | 363.96 | 0.77***6 |
Dec2vec+ tfidf | lgb | 0.7698 | 2456.92 | ~~ |
可見加入 “字” 後即使是兩個tfidf特徵融合也能得到很好的效果,接下來使用這個融合後的特徵。得到不錯的特徵後,決定調一調引數。
調參
調整了SVM 的引數C 。C值越大,擬合非線性的能力越強。
C | 分數 |
---|---|
1 | 0.7800 |
2 | 0.7798 |
~ | ~ |
10 | 0.7780 |
發現差不多,就不寫全了。迷茫一陣 不知所措。想嘗試交叉驗證,應該還能有所提升,無奈時不我待。
Finally
最終,我把所有能用的特徵全部融合,之後做了一個特徵篩選,使用LightGBM得到最終的成績。
總結
- 實驗很耗時,最好做實驗之前有個良好的規劃,多問為什麼要做這個實驗?接下來要怎麼實驗?並對實驗的結果有序進行記錄。
- 不熟練理論基礎,有關NLP的知識都是遇到不懂的現查現用,導致很多知識記得不牢固,過段時間就忘記了。
- 接下來會完善上面不會的知識,弄懂程式碼背後的理論依據才是正確的道路。
- 展望一下未來的實驗,可能會先學一下多種模型融合,在Top10的PPT展示中幾乎都是多種深度學習和機器學習的模型融合,這可能是未來的一個方向。
- 再次感謝Jian老師提供的Github。感謝@範晶晶同學的督促,要不我可能就太懶了就不寫了~~
- 不能懶 不能懶!!