NLP文本分類入門學習及TextCnn實踐筆記——模型訓練(三)

這篇記模型訓練。

距離第一篇已過去一個月。從學習到正式啓動模型訓練,花了兩週。模型訓練召回率和準確率達到上線標準又花了兩三週。

訓練及測試樣本評估的精確率都是97%、98%,結果一到線上實驗,結果慘不忍睹,才明白模型訓練不是那麼簡單的事情。漸漸摸索出了一些門道,最後線上精確率達到95%以上。

我只在一個二分類的文本分類場景成功訓練並上線了模型,且除了詞嵌入緯度embedding_dim超參調整外,不涉及其它的超參調整,因此下文將主要從個人的模型訓練經驗出發,介紹模型訓練的基本思路及調優關鍵點。在其它的文本分類場景相關經驗可能不適用,僅供參考。

基本思路:

下圖是我理解的模型訓練的基本流程。

我理解的模型訓練分爲三大步驟,一是訓練前準備,包括正負樣本和數據清洗、分詞配置;二是反覆模型訓練;三是模型調優,兩個手段,一個是配置調優,一個是策略加持。各自具體什麼含義下面慢慢展開說。

一、訓練前準備

磨刀不誤砍柴工。我的說法是“你人都沒學會呢,上什麼機器學習”。所以前期工作非常重要。

1. 樣本選取

正負樣本是機器進行學習的學習資料,資料準不準,決定了學習效果好不好。

兩種分類場景,一種是有限內容範圍的非此即彼,正、負樣本分佈差別不大;一種是“這種是,其它都不是”,正是小部分,例如從全量內容中識別非法內容。

不管是那種場景,正樣本都是目標文本的完整定義,建議正樣本之間有顯著的共性特徵,也就是一類文本。如果樣本量不多,特徵卻很多,最後出來的模型效果就不好。這裏所說的特徵就是句式、語義、用到的詞彙等。

一般通過策略挖掘積累,或是通過人工標註得來,建議正樣本條數不少於1000條(排重後)。

負樣本是告訴機器,“這樣的文本不算”。

在第一種“有限範圍的非此即彼”分類場景中,正負樣本的特徵差異很重要,就是要讓機器清楚的明白正負差別在哪裏。

在第二種“這種是,其它都不是”的場景中正樣本的特徵越明顯越好,同時負樣本一方面要跟正樣本有明顯的不同,另一方面要對正樣本的過擬合特徵有一定的矯正作用。

例如在識別非法內容時,黑產往往把非法內容夾雜在正常的文本里邊,“最近全國大部分地區進入汛期,防汛成爲各地的工作重點。炎炎夏日,無聊就來玩XXX吧,休閒一下,XXX應有盡有。”。後半句是非法內容,是正樣本期望機器學到的特徵,而前半句則會引入過擬合特徵,線上實驗時就會誤把防汛相關的內容也識別進來。這時候通過補充誤識別的內容到負樣本中,就會修正這種過擬合。

負樣本的條數大致跟正樣本保持一致。

2. 數據清洗

數據清洗前兩篇也都講的比較多了,主要是剔除無用信息,並通過同義詞替換應對變體對抗、強化特徵。尤其是在黑產對抗中,黑產爲了規避平臺識別,會進行音近字、形近字、符號替代等各種方式表示一些特定詞。因此積累同義詞詞表就變得非常重要。

而且同義詞替換髮生在模型訓練之前,模型學到的是強特徵詞。線上識別時,文本由數據清洗中的同義詞替換,將變體信息轉化後準確的傳遞給模型進行識別。同義詞配置的修改不需要重新訓練模型,非常高效

3. 分詞配置

在word embedding之前要進行中文分詞,分詞時可自定義分詞詞典和停止詞詞典。這兩個配置對模型的效果影響也很大。

自定義分詞詞典是告訴分詞程序,遇到這些字的時候優先這樣把它們切割成一個詞。

一方面對於專業詞彙、領域詞彙等非常用詞彙的分詞有指導作用,另一方面也可以用來調優模型。例如“電子”是某一類黑產內容識別的正樣本中較明顯的特徵詞。但同時電子專業、電子卡劵、電子票務等也是較常見的文本詞,就會造成誤傷。此時把電子專業、電子卡劵、電子票務加到自定義詞典中,詞向量就發生了變化。

停止詞詞典是告訴分詞程序,遇到這些詞就直接捨棄,不用寫到分詞結果中。

一般由常用語氣詞、介詞等組成。在分詞階段幹掉這些詞,就可以使傳達到模型的信息更爲精練。同時,停止詞還可以補充在線上識別階段不期望帶到模型裏的信息詞,如上面提到的“電子專業”等,或是一些被模型學去的過擬合特徵詞,例如1中提到的“汛期”“防汛”等。加入到停止詞詞典後,其詞向量就不會輸入給後面的模型,也就不會造成誤判了。

我除了停止詞詞典外,對於分詞過程中分出來的“單個字”的詞也在分詞階段捨棄掉了。

二、反覆模型訓練

上面在將正負樣本的時候其實已經提到了相關的內容。

當模型訓練後的效果較差時,例如準確率低於60%(這個百分比只是個參考,表達大致模型已經初步成型的意思),召回不理想(因爲我的應用場景無法評估線上被識別對象的總量,所以召回率沒有做評估),那就證明“學習資料”出了問題。

如果召回率低,那就要補充正樣本,讓正樣本的共性特徵更明顯;如果精確率低,那麼就補充負樣本,一方面要讓正負樣本由較明顯的特徵差異,另一方面可以把模型誤召回的文本補充到負樣本,矯正模型學偏的部分。

三、模型調優

模型初步已經由一定效果了,就要開始對模型進行打磨了。這裏我採用的兩種手段,一個是配置調優,一個是策略加持。

配置調優就是前面提到的三個配置:同義詞替換配置、分詞自定義詞典配置、分詞停止詞配置。同義詞替換配置主要影響召回率;後者主要影響準確率。具體原理上面已經講到了,在此不再贅述。

策略加持主要是通過一些限制條件,幫模型砍掉基本不會出現正樣本,又容易被模型誤召回的文本。例如正樣本都是長文本,較短的文本極大概率是負樣本,就可以一條加文本長度限制的策略。除此之外我還用到了分詞後的詞個數和重複詞個數兩個條件。分詞詞個數跟文本長度原理類似,對於一些沒什麼信息含量的文本就被砍掉了;重複詞個數是我在TextCnn實踐中發現的詭異問題,一個詞在語句中多次出現,TextCnn就更容易誤判,儘管這個詞並不是什麼強特徵詞。於是我也用策略規避了這個問題。不知道大家是否遇到過同類問題,是否有更好的解決方案。

配置調優和策略加持都不需要重新訓練模型,屬於模型的拋光、打磨階段,非常實用。我通過一個星期的線上實驗,反覆調整那三個配置,模型的精確率從70%打磨到了95%,召回率也有相應提升。

 

以上就是我的模型訓練心得,因爲思路的表達更多,所以文字也特別的。看到這裏的同學可謂非常有耐心了,歡迎交流討論。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章