1. 程式人生 > >文字分類——快速kNN設計實現

文字分類——快速kNN設計實現

內容提要

介紹

  文字分類——常見分類模型
  kNN分類模型的主要思想:通過給定一個未標註文件d,分類系統在訓練集中查詢與它距離最接近的k篇相鄰(相似或相同)標註文件,然後根據這k篇鄰近文件的分類標註來確定文件d的類別。

普通kNN實現

  一般常規的kNN計算新輸入文件與訓練集中樣本之間的距離,都是新輸入文件與每一訓練集樣本計算相似度。資料結構及計算過程示意圖如下:

圖 1 通用kNN相似度計算實現資料結構示意

   如圖1所示,新輸入文件將於已有訓練樣本的d1、d2、dm逐個計算相似度(Similarity)。一種顏色代表一次計算。
   由於文字具有詞稀疏性(一篇文字一般僅含有幾十到幾百個片語,而詞的總表中詞的總數可以達到幾十萬。),一般按照上述方法實現kNN演算法,很多詞語的搜尋過程都是無用的,即根本搜尋不到匹配的詞或不用搜索。例如:新輸入文字的片語t5、t10與d1、d3、dm的計算都為0,無效運算。

快速kNN實現

   本篇對普通kNN演算法做了一些改進,調整訓練文字的資料結構,不是一次計算未標註文字與一篇訓練集文字的相似度,而是一次計算未標註文字中一個詞(或特徵)與訓練集每篇文字的該詞(或特徵)的相似度分量。這樣可以較大降低詞的搜尋空間,提高分類的速度。本文將這種演算法的實現叫做快速k近鄰實現演算法(Fast k-Nearest Neighbor,F-kNN)。F-kNN並沒有改變分類演算法的本質,只是改善分類速度的實現方式。
   實現的資料結構及流程如下圖2 所示:

圖 2 Fast-kNN相似度計算實現資料結構示意

   圖 2 頂層採用HashMap陣列存放詞對應的文件Map引用,文件Map中存該詞在相應文件下的權重。如圖2所示,一次計算將詞tk所對應的所有文件相似度分量

都計算出來。例如紅線所示,t1一次計算出與d1和d2等的相似度分量。

實驗對比

   由於kNN演算法是一種“懶”學習演算法,沒有實質的訓練學習過程。但是在本設計實驗部分採用FkNN,需要轉換向量空間模型,並且也需要從硬碟載入資料,為了實驗公平性,將此部分作為kNN演算法的訓練過程。
  實驗說明參見:文字分類——NLV演算法研究與實現
  為了便於對比測試普通k近鄰(kNN)與快速k近鄰(FkNN)演算法的訓練和分類所用時間,採用資料集劃分方式(2)。兩種kNN實現在三種資料集上的訓練和分類測試時間如圖3所示。都採用卡方校驗(CHI)特徵選擇方法從三種資料集上選擇出2000維特徵,k值設定成13。

圖 3 兩種kNN實現的處理時間對比柱狀圖

分析總結

  由圖3可以觀察到,kNN與FkNN的訓練時間都非常低,而分類時間差別較大。三種語料庫資料集上FkNN比kNN演算法的分類時間都降低了90%以上。FkNN實現方式極大改善了k近鄰分類演算法的分類速度,降低了分類時間。

參考文獻:
[1] Sebastiani,F. Machine learning in automated text categorization [J]. ACM Comput. Surv. 2002, 34(1): 1-47.
[2] Yang,Y.,Liu,X. A re-examination of text categorization methods [C]. In: Proceedings of the 22nd ACM Int’l Conference on Research and Development in Information Retrieval. Berkeley: ACM Press, 1999: 42-49.