文本分類實戰


分類任務

其實工程上對於文本分類的需求還是挺多的,主要可以分為下面兩類,並對每類給了兩個例子。 
二分類

  色情新聞分類 這是一個非平衡數據集的二分類問題,因為色情新聞數是遠小於非色情新聞數的。

  判斷是否醫療Query 這個就關系到搜索變現了,還記得莆田系”事件嗎?這個分類是很值錢的。

多分類

  商品自動分類 每天商家都在上新,對這些新商品應該放到“服裝“類目還是”數碼“類目,人工搞肯定不划算了。

  Query領域分類 這個是為了對准領域知識庫,做更炫更”智能“的所謂“框計算”。

算法流程

數據標注

分類是有監督的學習,所以必然是需要標注數據的。剛開始肯定是需要找一些人,比如說運營同事提供手工標注一些數據的。有了這批種子數據,我們可以先訓練一個分類器,用這個分類器做分類,后面的工作其實就相對輕松一點,可以使用一些半監督的方法來持續擴充標記數據集,並對其中不確信的部分再做人工標注。這種半人工半自動的方法,既大大減少了標記的工作量,又能快速擴大標記數據集。

特征抽取

分類是基於特征的,拿到數據后怎么抽取具有區分度的特征是關鍵的一步。我們使用的特征主要是基於Bag Of Word, 具體步驟如下:

  1. 分詞:jieba足夠好了,主要還是對詞庫的維護。

  2. N-gram:用到tri-gram就可以了。

  3. term位置:主要是對query分類有用。

  4. 特征權重:對短文本IDF夠了,對長文本TF-IDF。

特征選擇

詞有很多,是不是每個都作為特征呢?不是,要去除不具區分性的特征以及會對分類起反作用的特征。特征選擇條件如下:

  1. 詞頻數限制: 在總的corpus里面出現次數小於一定閾值的要刪掉

  2. 停用詞:停用詞除了像”的“這樣的通用的爛大街的詞之外,每種應用場景需要維護自己的停用詞表。比如說”三星“在商品分類上絕不是停用詞,但在色情新聞分類上可以是停用詞

  3. feature filter: 對相對平衡的樣本集,可以直接使用信息增益比(information gain ratio, IGR)來做。對不平衡的樣本集(如色情新聞分類)用IGR就不合適了,可以用基於odds ratio的filter: 
         Alt text
這邊的smoothing可以用基於Expected Likelihood Estimation(ELE)的。用好這兩個,感覺特征選擇就差不多了。

分類器

首先說明一點的是,在淺層機器學習系統(相對於具有特征學習能力的深度學習而言),feature engineering往往比分類器選擇更重要。在文本分類這個問題上, 我的實驗結果是判別模型比較靠譜,下面兩個結果差不多,可以任選一個使用。我自己在做BoW特征文本相關的任務時習慣選擇Max Entropy。

     1. SVM

     2. Max Entropy 

對於經典的垃圾郵件分類問題使用的Naive Bayes,結果並沒有上述兩種判別模型好。

還有一些人使用了基於決策樹的方法,但是在這種特征向量比較稀疏的情況,不知道效果如何,沒有試過。

訓練與評估

  在訓練分類器時,我們采用10-fold交叉驗證的方法,以防止單一驗證集有偏。 
評估指標是很平常的召回率、准確率、F1 score;對多分類還可以用confusion matrix。

分詞

分詞從實用主義的角度來講,主要在於維護詞典。HMM還是CRF對最終結果的貢獻並不如詞典的貢獻可見。另外針對應用場景,可能還需要自己額外做一些事情。比如說針對手機機型作一些基於正則的分詞來把小米4變成一個詞,而不是小米 4。這種分詞粒度上的小trick是根據你的應用場景定的。

特征重要度

除了TF-IDF之外,根據應用場景的不同,有不同的特征重要度的要求。如Query會給名詞和專有名詞加大的權重,而色情新聞識別中形容詞和名詞同等重要。

有偏訓練集

分類器的假設是樣本數是大致均勻分布的,如果一類比其他類數據量大得過分,分類器很容易把其他類的數據推到大的類上去,以換取平均誤差最小。這種情況下,我們的做法就是嘗試不同的樣本比例進行訓練並在測試集上測試,選擇結果最好的那個比例。 
另外一個比較常用的方法就是設置meta cost,也就是為cost設置權重,比如說色情判成非色情損失就乘10。 
這兩種方式的最終目的是一樣的,操作起來第一種更好些。

模型大小優化

有的時候模型大小有要求,比如說模型會推送給設備耗流量和設備內存, 比如說即使在雲端整個系統也有內存要求,希望你優化。這時候主要有兩個方法:

   a. 特征選擇。 加大特征選擇的強度,比如說原來選Top 1000的,現在選Top 500,這個可類比為主成分分析,會降低模型的指標數據,所以是有損的。

   b. 精簡模型。 可以刪除一些最終模型中的權重特別小或者為0的特征,再基於剩下來的特征重新訓練個新模型。這個其實是feature warping。還可以使用正則化方法,加大正則化系數。

One More Thing…

term 擴展

這個尤其是對query,有的query特別短導致召回低。這個時候可以通過term擴展給他更多的同義,近義,共現詞,增加召回。term擴展主要是基於下面要說的這類特征。

Distributed Representation

我們上面使用的特征向量是每個term或者term組合在向量中占一個坑的形式,這種方法能取得不錯的結果。當它有一個致命弱點是它其實只是記住了一些詞的組合關系,並不能真正表示這個詞。一個例子就是”月亮“和”月球“這兩個向量的距離其實跟”月亮“和”貓“的距離是一樣的,這並不符合實際情況。為了使文本分類能夠處理這種情況,需要distributed representation。主要有兩類:

   a. 基於主題模型的: pLSA, LDA等

   b. 基於DNN的:word2vec等


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM