記一個文字分類系統的實現
基於資訊檢索課程,完成實現了一個文字分類系統,現記錄一下整個實現過程。
文字分類以文字資料為分類物件,本質上是機器學習方法在資訊檢索領域的一種應用,可以繼承機器學習領域的很多概念和方法,但同時也需要結合資訊檢索領域的特點進行處理。主要研究的方向是:文字分詞方法、文字特徵提取方法、分類演算法。
本人主要使用了5種常用的分類演算法,分別是kNN、Rocchio、NBC、SVM和ANN,對每種演算法的結果進行了比較,使用了十折交叉驗證繪製了各自的準確率曲線。由於本系統基於的搜狗語料庫,是中文文字,因此使用的分詞工具是Python實現的中文分詞工具jieba。使用的特徵提取方法是資訊增益。
1、語料
選擇搜狗語料庫的Reduced版本,一共有9個類別每個類別1990篇文章。考慮到實現規模,從每個類別中選擇了600篇文件一共5400篇文件作為訓練樣本。共有
- C000008—— 1 —— 財經
- C000010—— 2 —— IT
- C000013—— 3 —— 健康
- C000014—— 5 —— 體育
- C000016—— 4 —— 旅遊
- C000020—— 6 —— 教育
- C000022—— 7 —— 招聘
- C000023—— 8 —— 文化
- C000024—— 9 —— 軍事
針對上述5400篇訓練樣本,首先使用jieba進行分詞,共得到157269個詞項。然後編寫python程式,計算每個類別下的每篇文章的tf,得到所有文件集的倒排記錄表。同時統計每個詞項的df並計算idf儲存到檔案中供後續使用。
對分詞後得到的157269個詞項,首先使用jieba工具的標籤抽取函式,輸入idf和停用詞,得到初步的6445個候選特徵。
接著使用資訊增益(IG)這種特徵提取方法,在候選特徵中計算每個詞項對9個類別的資訊增益。資訊增益計算如下:同時結合文件頻率(DF)進行過濾,將小於DF小於5的詞項過濾掉,然後設定IG的不同閾值得到不同閾值下特徵,最終得出閾值為0.016,特徵數目為967時分類效果最好。
4、向量化表示
根據上述得到的特徵,對5400篇文件進行向量化表示,每篇文章都是一個967維的向量。第一種是使用tf(詞項頻率),分別計算出不同維數下的向量。第二種是使用tf-idf方式,對每篇文件的每個特徵進行向量化,得到每個特徵的tf-idf值。
5、分類器訓練
所選擇的五種分類演算法中,kNN、Rocchio、NBC和ANN是使用python自行實現,SVM是使用python呼叫了libsvm程式實現。這寫演算法的具體實現在此不予贅述,具體可參考各類機器學習方法的書籍。
6、系統實現
最終基於python CGI實現了一個web應用系統,支援輸入一個新聞url後,系統輸入對應的分類結果,同時支援url檔案上傳進行批量分類。介面如下:
上傳url檔案後,分類結果顯示如下:
說明:分類url目前僅支援搜狐、騰訊、網易、新浪四個網站的新聞類頁面的文章。
參考:
[1] Joachims, T. . Textcategorization with Support Vector Machines: Learning with many relevantfeatures. In Machine Learning[C]. ECML-98, Tenth European Conference on MachineLearning, 1998: 137--142.
[2] Wikipedia. Documentclassification [DB/OL].
http://en.wikipedia.org/wiki/Document_classification.2014
[3] Fandywang. 斯坦福大學自然語言處理第六課“文字分類(Text Classification)”[DB/OL].http://52opencourse.com/222/斯坦福大學自然語言處理第六課“文字分類(Text Classification). 2012.
[4] Li F., Yang Y. A LossFunction Analysis for Classification Methods in Text Categorization[C].International Conference on Machine Learning (ICML), 2003: 472-479.
[5] 申紅,呂寶糧,內山將夫,井佐原均. 文字分類的特徵提取方法比較與改進[J]. 計算機模擬, 2006, 23(3): 222-225