【文字分類】文字分類流程及演算法原理
分類體系
分類:給定一個物件,從一個事先定義好的分類體系中挑出一個或多個最適合該物件的類別。
文字分類(TC, Text Categorization):在給定的分類體系下,根據文字內容自動的確定文字關聯的類別。從數學角度看,文字分類是一個對映的過程,它將未標明類別的文字對映到已有的類別中,該對映可以是一對一或一對多的對映。
f:A→B其中,A
表示待分類的文字集合,B
表示分類體系中的類別集合。
文字分類屬於有監督的學習(Supervised Learning),它的基本步驟如下:
- 定義分類體系,即確定具體要分到哪些類。
- 將預先分類過的文件作為訓練集,對文件做分詞、去停用詞等準備工作。
- 確定表達模型,對文件矩陣進行降維,提取訓練集中最有用的特徵。
- 應用具體的分類模型和分類演算法,訓練出文字分類器。
- 在測試集上測試並評價分類器的效能。
- 應用效能最高的分類模型對待分類文件進行分類。
評價指標
準確率和召回率是檢索(IR)系統中的概念,也可用來評價分類器效能。
True | False | |
Positive | A | B |
Negative | C | D |
- 準確率(P, Precision),A/(A+B),在所有被判斷為正確的文件中,有多大比例是確實正確的。
- 召回率(R, Recall),A/(A+C),在所有確實正確的文件中,有多大比例被我們判為正確。
- F1測度(F-measure),2PR/(P+R),既衡量準確率,也衡量召回率。
準確率和召回率是互相影響的,理想情況下肯定是做到兩者都高,但是一般情況下準確率高、召回率就低,召回率低、準確率高,當然如果兩者都低,那是什麼地方出問題了。
其他一些指標:
- 漏報率(miss rate) = 1 - recall
- 準確度(accurarcy) = (A + D)/(A + B + C + D)
- 錯誤率(error) = (B+C)/(A+B+C+D) = 1 - accurarcy
- 虛報率(fallout) = B/(B+D) = false alarm rate
- F = (β^2 +1)PR/(β^2+R)
- BEP, Break Event Point, where P=R
- AUC
表達模型
模型對每篇文件預設構造的向量是固定長度n,該n可能是我們漢語詞典收錄的詞條數目,顯然這會導致每個向量裡的大部分特徵值都是0。這是文字分類的主要特點:高維 和 資料稀疏。所以,降維是開始運用分類演算法訓練樣本之前的一個關鍵預處理步驟。
降維有兩種方法:
- 特徵選擇(feature selection),它是對原始特徵利用一些評估函式獨立評估,按照評估結果高低排序,選擇那些評估值較高的特徵。常用的特徵選擇方法有詞頻資訊、互資訊、資訊增益和卡方檢驗等
- 特徵抽取(feature detection),它是把原始特徵對映到低維空間,這些被稱為二次特徵 (比如,奇異值分解後得到的lsi),從而生成模型產生的新特徵。特徵抽取方法比較常用的是lsa、plsa和lda等。
【注意】 特徵選擇和特徵權重值計算是不同的,前者是根據特徵對分類的重要程度來實現降維的手段,而後者是用於區分向量,實現分類演算法中的相似度判斷。它們是兩個階段的不同處理方法。特徵權重值最典型的是tf-idf。
特徵選擇(feature selection)
針對英文純文字的實驗結果表明:作為特徵選擇方法時,卡方檢驗和資訊增益的效果最佳(相同的分類演算法,使用不同的特徵選擇演算法來得到比較結果);文件頻率方法的效能同前兩者大體相當,術語強度方法效能一般;互資訊方法的效能最差。
卡方檢驗(the χ^2 test)
屬於分類c | 不屬於分類c | 總計 | |
包含特徵t | A | B | A+B |
不包含特徵t | C | D | C+D |
總計 | A+C | B+D | N |
卡方檢驗是通過計算每個特徵和每個類別的關聯程度,然後選擇那些關聯程度高的特徵來實現降維。其基本思想就是衡量實際值與理論值的偏差來確定理論的正確與否。
χ2(t,c)=N×(AD−BC)2(A+C)×(B+D)×(A+B)×(C+D)
其中,t
是具體的每個特徵(比如詞),c
是類別號。
資訊增益法(information gain)
資訊增益是通過計算每個特徵對分類貢獻的資訊量,貢獻越大資訊增益越大,然後可以選擇那些資訊增益較高的特徵實現降維。
資訊熵定義:
H(C)=−∑i=1mP(ci)logP(ci)
其中,ci
是類別變數C
可能的取值,P(ci)
是各個類別出現的概率。
條件熵定義:
H(C|T)=P(t)H(C|t)+P(t¯)H(C|t¯)=−P(t)∑i=1nP(Ci|t)log2P(Ci|t)−P(t¯)∑i=1nP(Ci|t¯)log2P(Ci|t¯)
其中,帶t¯
的值表示特徵t
不出現的情況。
特徵t
給系統帶來的資訊增益是系統原本的熵與固定特徵T
後的條件熵之差。
G(t,c)=H(T)−H(T|C)
資訊增益也是考慮了特徵出現和不出現兩種情況,與卡方檢驗一樣,是比較全面的,因而效果不錯。但資訊增益最大的問題還在於它只能考察特徵對整個系統的貢獻,而不能具體到某個類別上,這就使得它只適合用來做所謂“全域性”的特徵選擇(指所有的類都使用相同的特徵集合),而無法做“本地”的特徵選擇(每個類別有自己的特徵集合,因為有的詞,對這個類別很有區分度,對另一個類別則無足輕重)。
分類模型
在訓練階段,就是利用各種分類演算法對轉化後的文字向量估計模型。常用的分類演算法有樸素貝葉斯、knn、決策樹、神經網路和svm等。
一些基本概念:
- 輸入空間 為n維向量的集合
X⊆Rn
,其中向量x∈X
,x=(w1,…,wn)
,而wi
是文件向量x
的一個特徵,比如,詞,或者詞和權重的二元組。 - 輸出空間 為類標號集合,可以是二元分類
Y={+1,−1}
,或者多元分類Y={y1,…,ym}
。 - 訓練資料 為一組根據未知分佈
P(x,y)
獨立取樣(i.i.d)的資料集合,由輸入向量與輸出類標號對組成D={(x1,y1),…,(xl,yl)}
。
假設 (hypothesis):計算機對訓練集背後的真實模型(真實的分類規則)的猜測稱為假設。可以把真實的分類規則想像為一個目標函式,我們的假設則是另一個函式,假設函式在所有的訓練資料上都得出與真實函式相同(或足夠接近)的結果。
監督學習方法可以分為生成方法和判別方法,所學到的模型分別成為生成模型(generative model)和判別模型(discriminative model)。
生成方法由訓練資料學習聯合概率分佈P(X,Y)
,然後求得條件概率分佈P(Y|X)
作為預測的模型,即生成模型:
P(Y|X)=P(X,Y)P(X)
這樣的方法之所以稱作生成模型,是因為模型表示了給定輸入X
產生輸出Y
的生成關係。典型的生成模型有:樸素貝葉斯法和隱馬爾科夫模型。
判別方法直接學習決策函式f(X)
或者條件概率分佈P(Y|X)
作為預測模型,即判別模型。判別方法關心的是對給定的輸入X
,應該預測什麼樣的輸出Y
。典型的判別模型有:knn、決策樹、邏輯迴歸、EM、SVM、各種boosting演算法等等。
樸素貝葉斯
根據條件獨立性假設,Y=ck
類別的後驗概率正比於該類別的先驗概率和條件概率的乘積:
P(Y=ck|X=x)=P(Y=ck)P(X=x|Y=ck)P(X=x)∝P(Y=ck)∏i=1nP(wi|Y=ck)
根據 極大後驗概率假設(MAP, Maximum a posteriori probability hypothesis),使得後驗概率P(Y=ck|X=x)
最大的那個類別號誤差最小。一般避免乘法導致浮點數溢位,可以轉換為對數計算,不改變凸函式性質:
y=argmaxckP(Y=ck)∏i=1nP(wi|Y=ck)=argmaxcklogP(Y=ck)+∑i=1nlogP(wi|Y=ck)
實際的 引數計算 時會加入Laplace平滑:
P(Y=ck)=N(ck)∑mi=1N(ci)≈1+N(ck)|c|+∑mi=1N(ci)
其中,N(ck)
是類別 ck
的文件的總數,|c|
是分類總數。
P(wi|Y=ck)=N(wi,ck)∑nk=1N(wk,ck)≈1+N(wi,ck)|w|+∑nk=1N(wk,ck)
其中,N(wi,ck)
表示特徵詞wi
在類別ck
的文件中出現的次數,|w|
表示所有特徵詞總數。
建立NB分類器有兩種方法,上述是多項式模型(Multinomial model),還有一種貝努利模型(Bernoulli model)。貝努利模型屬於二值模型,對於每個詞只統計是否出現,而不計算其出現次數。多項式模型適合處理長文字,而貝努利模型適合處理短文字。貝努利模型對噪聲敏感,所以在使用之前必須要做特徵選擇。
SVM
對於一組訓練資料 {(x1,y1),…,(xl,yl)}
,其中 x∈Rn
,y∈{+1,−1}
,線上性可分的情況下會有一個超平面,將這兩類樣本完全分開,並且離超平面最近的向量與超平面之間的距離最大。
f(x)=∑i=1nwixi+b=⟨w⋅x⟩+b
參考
- 統計學習方法, 李航, 4. 樸素貝葉斯
- Introduction to IR, 13. Text classification and Naive Bayes