一、文本分類任務概述
1、應用領域
- 歸類
- 垃圾郵件識別
- 作者識別
- 性別/年齡識別
- 等等
2、定義
- 輸入:一個文檔d,一系列固定的類型C={c1,c2,…,cj}
- 輸出:預測類別c ∈ C
3、分類方法
- 手工規則:很精確但是代價很高
- 監督機器學習:
- 輸入:一個文檔d,一系列固定的類型C={c1,c2,…,cj},一個訓練集包含m個樣本,每個樣本是手工標記的文檔(d1,c1)…(dm,cm)
- 輸出:γ:d→c
- 可以使用的分類方法:樸素貝葉斯,邏輯迴歸,支持向量機,k近鄰
二、樸素貝葉斯
- 樸素貝葉斯的思想:基於貝葉斯規則的簡單分類方法,分類的依據是文本的簡單代表,詞袋(bag of words)
- 把文本抽象成一個個單詞以及對應的次數的特徵
- 如下
三、定義樸素貝葉斯分類
1、應用於文檔和類別的貝葉斯規則
- 公式:
- 其中,d表示文檔,c表示類別
2、樸素貝葉斯分類
- 公式推導1:我們需要求的是使得P(c|d)最大的類別c。利用貝葉斯規則可以得到第二行的公式,因爲第二行的分母對任何類別都是一樣的,不影響argmax的計算。所以,可以忽略掉分母。
- 公式推導2:把d用x1,x2等特徵表示
- 基於上述公式進行估計的話,需要估計的參數量級很大,因此對樣本數量的要求會很高。
- 參數量級
- 參數量級
- 因此,我們需要進行一些假設來簡化模型
- 詞袋(bag of words)假設:單詞的文職不重要
- 條件獨立(conditional independence):對於特徵而言,基於c的條件概率是相互獨立的
- 基於上述兩點,上述公式可以推導爲
四、樸素貝葉斯的訓練
1、極大似然估計
- 樸素貝葉斯的訓練的一個方法是極大似然估計,利用數據的頻率進行計算
- 極大似然估計的問題:如果在訓練集中沒有出現單詞的話這個單詞的P(w|c)就是0,那麼對應的基於下面公式的c也是0,就無法進行分類
- 基於上述的問題,我們就需要使用加一平滑也就是拉普拉斯平滑來解決,解決的公式是
- 對於一個訓練語料庫而言,訓練公式如下
- 如果遇到未知(unknown)的單詞的處理方法,公式如下
五、樸素貝葉斯:和語言模型的關係
- 樸素貝葉斯的每一個類別就是一個條件於類別的一元語言模型
- 對每個單詞而言,他們的概率是P(word|c)
- 對每個句子而言,他們的概率是P(s|c)=∏ P(word|c)
- 貝葉斯最後的結果而言,就是選擇比較大的P(s|c)的類別
六、關於多元樸素貝葉斯的例子
- 實例:
- 在垃圾郵件檢測領域,寫有效的應用於貝葉斯的特徵:
- 關於樸素貝葉斯的總結
- 非常快,並且對內存的要求低
- 對不相關的特徵十分穩健
- 在有很多同等重要的特徵的時候表現得比較好
- 如果獨立假設存在的話是最好的
- 是文本分類一個很好的可依靠的底線
七、precision,recall and f measure
- 依據預測的結果(selected)與實際的分類(correct)可以將樣本分爲四類
- 因爲準確率在估計樣本不均衡的時候並不是有效的,所以需要引入下面的度量
- precision:表示預測的結果是正確的百分比 tp/(tp+fp)
- recall:表示實際分類中被預測到的百分比 tp/(tp+fn)
- F值:是precision和recall的加權調和平均數,調和平均數會更加接近比較小的數
人們一般會使用f1值來估計,是上面的計算公式中β爲1,α爲1/2的度量
八、文本分類評估
1、用於評估的數據集
2、混淆矩陣(confusion matrix)C
- 對所有的類別建立混淆矩陣,列表示實際的類別,行表示預測的類別
- recall:在類別i中的文檔被預測正確的比例
- precision:被分爲類別i的文檔中實際爲i分類的類別的比例
- accuracy:被正確分類的文檔比例
- 當分類大於兩類的時候,我們用下面兩種方法把多個指標合併
- 宏平均(macroaveraging):單獨計算每個類別的度量,然後平均
- 微平均(microaveraging):把每個類別的結果歸入下面列聯表中,然後計算
- 舉例:
3、發展測試集(development test set)與交叉檢驗
- 一般會把數據分爲三類,一類是訓練集,一類是發展測試集,一類是測試集。
- 測試集:避免過擬合、估計更保守
- 發展測試集:用來調整算法
- 交叉檢驗:發展測試集的存在可能會導致測試集過小,所以我們可以使用交叉驗證的方法來構造發展測試集。
九、文本分類:實際中會遇到的問題
- 沒有訓練數據怎麼辦?
- 人工寫規則:需要非常小心並且十分費時(兩天一個類)
- 數據很少怎麼辦?
- 使用樸素貝葉斯:樸素貝葉斯是一個高誤差(high-bias)的算法,不容易現過擬合問題
- 獲得更多的標記數據
- 嘗試半監督訓練方法:bootstrapping或者是針對非標記文本的EM算法
- 合理的數據量
- 對更“聰明”的分類方法會更好:SVM,正則邏輯迴歸
- 使用解釋性更強的決策樹
- 有很多很多的數據
- 可以得到很高的正確率
- 代價是:svm的訓練時間和knn的測試時間都會很長;正則邏輯迴歸可能會好一點
- 樸素貝葉斯的速度在這種情況就是優勢
- 當數據足夠的時候,算法就不重要了
- 其他的要點: