Processing math: 100%

Naive Bayes Classifier

18 February 2020
cs bayes language-model unsupervised-learning

常常我們會使用複雜的神經網路來訓練模型進行像分類的動作,不過使用監督式(supervised)學習的方法,我們必須有標註過後的資料才能訓練,這篇文章我們介紹,如何在不使用標註資料,而是像網路隨處可搜集到的語料,像是PTT來完成主題分類關鍵字預測發現新詞等功能

介紹


首先讓我們回顧一下Bayes Theorem

P(AB)=P(BA)P(A)P(B)

一篇文章該屬於哪一類,我們可以寫成

P(Cw1,w2,...,wn)=P(C)P(w1,w2,...,wnC)P(w1,w2,...,w3)

Naive Bayes Classifier(樸素貝葉斯分類器)之所以稱為Naive,是因為假設各個屬性間是獨立的,在文章中則是指每個字跟別的字互相獨立

P(w1w2)=P(w1)

假設我們有多個類的主題,而要判斷文章是屬於哪一類的主題

P(Cw1,w2,...,wn)=P(C)P(w1,w2,...,wn|C)P(w1,w2,...,wn)

因為是同一篇文章,所以分母是一樣的,於是我們得出

P(Cw1,w2,...,wn)P(C)P(w1,w2,...,wnC)

根據Naive假設各字之間獨立,可得出

P(Cw1,w2,...,wn)P(C)P(w1C)P(w2C)...P(wnC)

這麼一來,我們可以得出,最基本的以Unigram為基礎的貝葉斯分類器公式,我們只要得出各個主題下的機率,比較誰的機率最大,即可求出最有可能的分類

argmaxciP(Ci)P(w1Ci)P(w2Ci)...P(wnCi)

關於 P(wnCi) 如何求得,我們使用Unigram來做估計,寫成以下式子

P(wi)=Count(wi)ni=1Count(wi)

所以我們對每一類,都會去計算每個字wi的對應機率P(wi),然後可以計算出對應的似然值(Likelihood)

P(Cw1,w2,...,wn)=ni=1P(Cwi)

因此,其實貝葉斯分類器在進行的就是一種最大似然估計(MLE),而通常我們會轉成對數計算

ni=1log(P(Cwi))

語言模型


不過,通常我們不會使用Unigram,而是使用Bigram, Trigram,差別就是每個字會依賴於前k個字

Bigram:P(wiwi1) Trigram:P(wiwi1,wi2)

此外,我們這是從前看到後,我們也可以定義從後看到前k-gram語言模型

實驗範例


我們對一個輸入句子 電腦每種顯卡的驅動程式都不同嗎,進行貝葉斯分類,並用熱點圖(heatmap)來顯示不同主題下每個 P(Cjwi) 的對數機率

三種不同主題下的對數機率熱點圖

可以看出,在電腦類(computer)的地方,對於像驅動程式電腦這類的關鍵字,會賦予極高的機率,相比於其他分類而言,因此我們可以得知這句話,是該分於電腦類

利用這個道理,我們也可以抓出關鍵字,像這個例子,在哪些字可以明顯看出有些關鍵字在不同類別的機率落差較大,像是驅動程式電腦這些地方,這些可以視為屬於該類別的關鍵字