文本分類心得(Bert模型使用)

正式入職了一段時間,接手了NLP相關任務,作爲一個初學者,分享一點最近的所學心得和體會。

稍後有時間更新,現在項目催的很緊,能力比較強的可以找我內推阿里秋招。可以私信我聯繫方法,個人會進行第一遍簡歷篩選。

 

1.冷啓動問題

        當文本數據量很少時(可稱爲冷啓動階段),一般採用概率統計方法,抽取文本的大體規則,實現需求,因爲在少量的樣本數據情況下,很難實現算法的較高精度。

        並且,可以在規則方法的前提下,積累數據,爲後期算法工程鋪路,也可以找外包去標註數據。

2.關於bag-word方法的一些心得

         n-gram算法很好用,通常人們採用的是uni-gram 或者 bi-gram 等等單一的形式。其實不妨可以擴大token的容量,多種n-gram融合在一起,然後利用特徵選擇的方法,例如TF-IDF,抽取所需要的詞典,通常效果會有改善。多n-gram融合的目的是考慮詞間的含義,具體的論文參考Facebook AI Research:“Enriching Word Vectors with Subword Information”

        面臨的問題:bag-word很好用,但是無法解決句子中多義詞的問題,況且中華文化博大精深。。。你懂的。所以,後面更多的是在用ELMO算法,Bert一類的深度學習算法,在解決這類問題。但是對於這些深度學習方法而言,其實也是一種embeding方法,只不過加了諸如雙向性、masked方法,更深層次的挖掘了這部分信息,解決了這個問題。

3. 常見的一種解決方案

  設計流程:
           採用jieba分詞 -> 停詞 -> unigram + bigram 初始詞表 -> tf-idf 過濾詞表 -> 過濾易錯詞幹擾(如熱點、焦點等新聞高頻詞)-> 模型多分類->參數優化(grid_search等)

上述是一種常見的解決方案,兩個細節需要注意:1)過濾易錯詞,有些易錯詞對單條句子而言,是noise,所以在停詞或者詞表中應該刪除;2)停詞表:某些單詞對模型的性能影響很大,這個時候要關注一下停詞表,防止被停詞,實踐Trick,僅供參考;

4.Bert模型使用

             在後續的開發中,隨着規則抽取數據和人工標註數據的積累,考慮使用深度學習這塊的模型。調研完後發現,Bert真香,通過數據數據增強和強模型的引入,目前的召回/準確/等指標,提升了5個點,下面是個人使用Bert過程中的一些小Trick

  • Bert原始參數非常強大,推薦先閱讀源碼,搞懂參數之後,再進行參數優化
  • Bert源碼中的Shuffle 固定設置的是100,但是對於大數據集來說,作用相對較小,推薦使用最小類的數據數量作爲參數,個人經驗,引入之後,指標提升了2%
  • epoich和Train_batch_size這兩個參數,關係到訓練的步數,當Train_batch_size太大了,會導致gloal_step太小,欠擬合,建議看一下源碼的步數生成公式
  • Bert模型在訓練的時候,可能第一次的Loss並不是非常理想,可以進行二次訓練,但會發現輸出一直不變,因爲第二訓練Check_point會引入第一次的參數,所以你在第二次訓練的時候,需要 rm -rf /tmp/output。這個路徑僅僅是一個例子,具體看你在腳本中設置的output路徑
  • 關於環境配置問題可以底下問我,我看到了就會回覆,也是一堆坑!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章