1. 程式人生 > >“達觀杯”文字智慧處理挑戰賽心得體會

“達觀杯”文字智慧處理挑戰賽心得體會

記錄一下參賽的過程和體會

比賽地址

比賽回顧

這是我第一次參加與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”

把提取tfidf特徵的程式碼修改如下: 在這裡插入圖片描述 具體細節真忘了(有時間具體說)。重新生成了tfidf特徵,實驗結果如下:

特徵 模型 分數 耗時(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 的引數CC值越大,擬合非線性的能力越強。

C 分數
1 0.7800
2 0.7798
~ ~
10 0.7780

發現差不多,就不寫全了。迷茫一陣 不知所措。想嘗試交叉驗證,應該還能有所提升,無奈時不我待。

Finally

最終,我把所有能用的特徵全部融合,之後做了一個特徵篩選,使用LightGBM得到最終的成績。

總結

  1. 實驗很耗時,最好做實驗之前有個良好的規劃,多問為什麼要做這個實驗?接下來要怎麼實驗?並對實驗的結果有序進行記錄。
  2. 不熟練理論基礎,有關NLP的知識都是遇到不懂的現查現用,導致很多知識記得不牢固,過段時間就忘記了。
  3. 接下來會完善上面不會的知識,弄懂程式碼背後的理論依據才是正確的道路。
  4. 展望一下未來的實驗,可能會先學一下多種模型融合,在Top10的PPT展示中幾乎都是多種深度學習和機器學習的模型融合,這可能是未來的一個方向。
  5. 再次感謝Jian老師提供的Github。感謝@範晶晶同學的督促,要不我可能就太懶了就不寫了~~
  6. 不能懶 不能懶!!