文本分類實現步驟:
- 定義階段:定義數據以及分類體系,具體分為哪些類別,需要哪些數據
- 數據預處理:對文檔做分詞、去停用詞等准備工作
- 數據提取特征:對文檔矩陣進行降維、提取訓練集中最有用的特征
- 模型訓練階段:選擇具體的分類模型以及算法,訓練出文本分類器
- 評測階段:在測試集上測試並評價分類器的性能
- 應用階段:應用性能最高的分類模型對待分類文檔進行分類
特征提取的幾種經典方法:
- Bag-of-words:最原始的特征集,一個單詞/分詞就是一個特征。往往會導致一個數據集有上萬個特征,有一些的簡單指標可以篩選掉一些對分類沒幫助的詞語,如去停用詞、計算互信息熵等。但總的來說,特征維度都很大,每個特征的信息量太小
- 統計特征:TF-IDF方法。主要是用詞匯的統計特征來作為特征集,每個特征都有其物理意義,看起來會比 bag-of-word 好,實際效果差不多
- N-gram:一種考慮詞匯順序的模型,也就是 N 階 Markov 鏈,每個樣本轉移成轉移概率矩陣,有不錯的效果
分類器方法:
-
朴素貝葉斯(Naive Bayesian, NB)
對於給定的訓練集,首先基於特征條件獨立學習輸入、輸出的聯合概率分布 P(X, Y),然后基於此模型,對給定的輸入 x ,利用貝葉斯定理求出后驗概率最大的輸出 y
假設P(X, Y)獨立分布,通過訓練集合學習聯合概率分布 P(X, Y)
\[P(X,Y)=P(Y|X)·P(X)=P(X|Y)·P(Y) \]根據上面的等式可得貝葉斯理論的一般形式
\[P(Y=c_k|X=x)=\frac{P(X=x|y=c_k)·P(Y=c_k)}{\sum_k{P(X=x|Y=c_k)·P(Y=c_k)}} \]分母是根據全概率公式得到
因此,朴素貝葉斯可以表示為:
\[y=f(x)=argmax_{c_k}\frac{P(Y=c_k)\prod_{j}{P(X^{(j)}=x^{(j)}|Y=c_k)}}{\sum_{k}{P(Y=c_k)\prod_{j}P(X^{(j)}=x^{(j)}|Y=c_k)}} \]為了簡化計算,可以將相同的分母去掉
優點:實現簡單,學習與預測的效率都很高
缺點:分類的性能不一定很高
-
邏輯回歸(Logistic Regression, lR)
一種對數線性模型,它的輸出是一個概率,而不是一個確切的類別
邏輯斯蒂函數:
\[h_\theta(x)=\frac{1}{1+e^{-\theta Tx}},P(Y=1|X;\theta)=h_{\theta}(x),P(Y=0|x;\theta)=1-h_{\theta}(x) \]圖像:

對於給定數據集,應用極大似然估計方法估計模型參數
\[l(\theta)=logL(\theta)=\sum_{i=1}^{N}y^{(i)}logh(x^{i})+(1-y^{i})log(1-h(x^{i})) \]優點:實現簡單、分類時計算量小、速度快、存儲資源低等
缺點:容易欠擬合、准確率不高等
-
支持向量機(Support Vector Machine, SVM)
在特征空間中尋找到一個盡可能將兩個數據集合分開的超平面(hyper-plane)

對於線性不可分的問題,需要引入核函數,將問題轉換到高維空間中
優點:可用於線性/非線性分類,也可以用於回歸;低泛化誤差;容易解釋;計算復雜度低;推導過程優美
缺點:對參數和核函數的選擇敏感
中文垃圾郵件分類實戰
數據集分為:ham_data.txt 和 Spam.data.txt , 對應為 正常郵件和垃圾郵件
其中每行代表着一個郵件
主要過程為:
- 數據提取
- 對數據進行歸整化和預處理
- 提取特征(tfidf 和 詞袋模型)
- 訓練分類器
- 基於詞袋模型的多項式朴素貝葉斯
- 基於詞袋模型的邏輯回歸
- 基於詞袋模型的支持向量機
- 基於 tfidf 的多項式朴素貝葉斯
- 基於 tfidf 的邏輯回歸
- 基於 tfidf 的支持向量機
- 用 准確率(Precision)、召回率(Recall)、F1測度 來評價模型
代碼放在 GitHub 上了
https://github.com/CuveeFer/my-nlp
結果:


