朴素貝葉斯和情感分類
分類問題在人類和機器智能中廣泛應用:郵件分類、作業打分等。這篇博客介紹了朴素貝葉斯方法及其在文本分類方面的應用。其中文本分類的例子采用情感分析,就是從文本中進行情感抽取,並判斷作者對特定事物的態度是積極還是消極,例如影評和書評的分析。情感分析中最簡單的任務是二分類任務,文字可以為我們提供很多提示信息。比如下面的句子:
- + ...zany characters and richly applied staire, and some great plot twists
- - It was pathetic . The worst part about it wat the bosing scenes..
- + ...awesome caramel sauce and sweet toasty almonds.I love this place!
- - ...awful pizza and ridiculously overpriced...
這四句話是從影評和餐廳評價中選出的,其中great、richly、awesome、pathetic和awful等文字為我們提供了非常有用的信息。
垃圾郵件檢測是分類問題的另一個重要商業應用,利用二分類器判斷一個郵件是否為垃圾郵件。文法特征和其他特征對這個分類問題很有用,比如當看到郵件中有“online pharmaceutical”或者”WITHOUT ANY COST"或是"Dear Winner"等關鍵字時,你可能就會很懷疑這封郵件是垃圾郵件。
關於文本,我們想了解的還有使用語言這一基本信息。比如社交媒體上的文本采用了很多不同種類的語言,而不同的語言對應的處理流程可能是不同的。因此判斷語言類別是大部分自然語言處理任務的第一步。相關任務包括:文本作者判定,作者性別、年齡以及母語等的判定。
文本分類最原始的任務是給文本主題標簽或者屬性種類。一篇論文是關於流行病學還是胚胎學是信息抽取的重要環節。事實上,朴素貝葉斯是在主題類別分類(subject category classification)任務的研究中發明出來的算法。
分類的目標是針對一個目標,提取一些有用的特征,然后將該目標歸入離散類別集合的某一個類別。應用手寫規則是文本分類的一種方法,自然語言處理中有一些領域采用手寫規則為基礎的分類器得到了非常好的效果。
然而,規則是非常脆弱的,不僅僅是因為應用環境和數據總是在改變,甚至對於一些領域來說人類無法提出效果很好的規則。自然語言處理的大部分分類任務都采用了有監督的機器學習來替代手寫規則,這也是博客其余部分的主要內容。在有監督的機器學習中,數據集中每一個輸入項都標注好了正確的輸出結果,模型的目標就是學會如何將一個新輸入項映射到正確的輸出。
形式化地來講,有監督的機器學習接受輸入\(x\)和固定的輸出集合\(Y=y_{1},y_{2},....,y_{M}\)然后返回一個預測類別\(y\in Y\)。在文本分類中,我們一般使用\(c\)而不是\(y\)來表示輸出變量,\(d\)而不是\(x\)表示輸入變量。在有監督的情況下,我們的訓練集有\(N\)個文檔,每個文檔都手工標注了類別:\((d_{1},c_{1}),......,(d_{N},c_{N})\)。我們的目標是訓練一個分類器,可以將一個新文檔\(d\)映射到對應的類別\(c\in C\)。一個概率分類器(probabilistic classifier)會告訴我們輸入數據屬於某一類的概率為多大。有很多機器學習算法都可以用來構建分類器,這篇博客我們主要介紹朴素貝葉斯算法,下一篇博客我們將介紹邏輯回歸算法。他們代表了兩類分類器。生成式分類器(generative classifiers)為給定的輸入計算一個最可能產生該輸入的類別,比如朴素貝葉斯分類器。判別式分類器(discriminative classifiers)會學習輸入數據中的什么特征對判斷類別最有效。在《On Discriminative vs. Generative classifiers: A comparison of logistic regression and naive Bayes》一文中,作者對比了兩類分類器,實驗結果表明訓練集增加時,盡管兩種算法都會表現更好,但效果好的表現形式卻是不同的。從反復實驗中觀察到,訓練集增加后,判別式方法會達到更低的漸進誤差,而生成式方法會更快的達到漸進誤差,但這個誤差比判別方法的漸進誤差大。
朴素貝葉斯分類器
這部分我們將介紹多項式的朴素貝葉斯分類器(multinomial naive beyes clasifier),之所以這么命名是因為該分類器在特征之間如何交互上做了最簡單的假設。
朴素貝葉斯的思想如下圖所示,左邊的雲狀圖形表示我們需要處理的文本內容。我們采用詞袋模型來表示文本,忽略文字之間的順序,只保留詞頻信息,處理的結果如右邊的表格所示。
朴素貝葉斯是一種概率分類器,對一個文檔\(d\)來說,分類器會返回給調用者后驗概率最大的類別\(c\)。
在Bayes的努力下,貝葉斯思想開始被大家所熟知,1964年Mosteller和Wallace將其應用到文本分類中。貝葉斯分類的思想是將貝葉斯法則應用到(1)式中,將其轉化為一些有用的性質。貝葉斯法則如(2)所示,它給我們提供了一種將任何條件概率\(P(x|y)\)轉化為三種其他概率的方法。
將貝葉斯法則應用在(1)式子中,得到(3)式:
由於對每個類別來說,我們都需要計算\(\frac{P(d|c)P(c)}{P(d)}\),然后取最大值對應的類別\(c\),分母\(P(d)\)對每個類來說都是一樣的,我們將其去掉以簡化(3)式,得到(4)式:
根據(4)式可知,我們只需計算兩個概率:先驗概率(prior probability)\(P(c)\)和似然(likelihood)\(P(d|c)\):
不失一般性地,我們可以用一系列特征來表示文檔,如公式(6)所示:
公式(6)還是很難直接計算,需要做出一些假設。直接估計所有特征組合在一起的概率,需要大量的參數和難以獲得的巨大訓練集,因此朴素貝葉斯做出了如下兩種假設:
- 第一種是詞袋模型,我們假設位置是不重要的(當然位置也是比較重要的,此處的假設是由損失的),因此“love”出現在一句話的第一個字或者是第二十個字對分類結果的影響都是一樣的。
- 第二種假設我們一般稱為朴素貝葉斯假設,它假設特征之間獨立,形式化的表現為公式(7):
綜合以上內容,朴素貝葉斯分類器的思想可以表達為如下等式:
要講朴素貝葉斯分類器應用在文本中,我們可以用單詞的所有下標來遍歷所有的單詞以計算文檔的類別。
像其他語言模型一樣,朴素貝葉斯的計算空間也在log空間內,來避免算數下溢和提高計算速度。(9)式可以改寫為如下形式:
通過log空間來計算特征,(10)將預測的類別表示成輸入特征的線性函數。這類將輸入表示為線性組合的分類器稱為線性分類器,例如朴素貝葉斯和邏輯回歸。