tf-idf、樸素貝葉斯的短文本分類簡述

  樸素貝葉斯分類器(Naïve Bayes classifier)是一種相當簡單常見但是又相當有效的分類算法,在監督學習領域有着很重要的應用。樸素貝葉斯是建立在“全概率公式”的基礎下的,由已知的儘可能多的事件A、B求得的$P(A|B)$來推斷未知$P(B|A)$

優點:

  1. 模型訓練使用TF-IDF對訓練數據做詞頻及概率統計;
  2. 分類使用樸素貝葉斯計算所有類目的概率;
  3. 適用於電商的短文本分類,加入部分人工干預,top3準確率可達到95%左右;
  4. 分類預測完全可解釋,不存在神經網絡黑盒,但比較依賴分詞效果;
  5. 訓練數據類目下數據不均衡基本不會影響模型準確率。

缺點:

  1. 比較依賴分詞效果;
  2. 大規模分類任務模型文件較大(與神經網絡相比)。

TF-IDF

  tf-idf經常被用於提取文章的關鍵詞(Aoutomatic Keyphrase extraction),完全不加任何的人工干預,就可以達到很好的效果,而且它簡單到都不需要高等數學,普通人10分種就可以理解,那我們首先來介紹下TF-IDF算法。

  例如,假定現在有一篇比較長的文章《致全世界兒童的一封公開信》我們準備用計算機提取它的關鍵詞。一個簡單的思路,就是找到出現次數最多的詞。如果這個詞很重要,它應該在這篇文章中出現很多次。於是,我們進行“詞頻”(Term Frequency,縮寫爲TF)統計,不過你可能會猜到,出現最多的詞是---“的”、“是”、“在”----這一類最常用的詞。它們叫做停用詞(stop words)表示對提取結果毫無幫助、必須要過濾掉的詞,這是你可能會問,從“文章”到“詞”你是怎麼轉換的,如果你知道中文分詞,就應該不會問這個問題了,中文分詞有很多模式,通常是採用HMM(隱馬爾科夫模型 ),一個好的分詞系統非常複雜,想要理接可以點擊HMM的進行了解,不過現在也有很多系統使用深度學習的方法NER(lstm+crf)來做物品詞識別,這裏就不一一介紹了;ok,回到之前所說的,我們可能發現“兒童”、“權力”、“心理健康”、“隱私”、“人口流動”、“衝突”、“貧困”、“疾病”、“食物”、“飲用水”、“聯合國”這幾個詞出現的次數一樣多。這是不是意味着,作爲關鍵詞,他們的重要性是一樣的?

  顯然不是這樣。因爲“聯合國”是很常見的詞,相對而言“心理健康”、“人口流動”、“衝突”不那麼常見。如果這四個詞出現的次數一樣多,有理由認爲,“心理健康”、“人口流動”、“衝突”的重要程度要大於“聯合國”,在關鍵詞排序上“心理健康”、“人口流動”、“衝突”應該排在“聯合國”的前面。

  所以,我們需要一個重要性調整係數,衡量一個詞是不是很常見。如果這個詞比較少見,但是它在這篇文章中多次出現,那麼它很可能就反映了這篇文章的特性,正是我們所需要的關鍵詞。這個調整係數就是在詞頻統計的基礎上,要對每個詞分配一個“重要性”權重。這個權重叫做“逆文檔頻率”(Inverse Document Frequency,縮寫爲“IDF”),它的大小與一個詞的常見程度成反比。

  知道了“詞頻”(TF)和“逆文檔頻率”(IDF)以後,將這兩個值相乘,就得到了一個詞的TF-IDF值。某個詞對文章的重要性越高,它的TF-IDF值就越大。所以,排在最前面的幾個詞,就是這篇文章的關鍵詞;如果應用到文本分類中,把一類中所有的tf-idf值高的詞和tf-idf值 提取出並來,這就是此類的特徵模型。

總結一下:

  1. TF=(某個詞在文檔中出現的次數)/(文檔中的總詞數)
  2. IDF=log((語料中文檔總數)/(包含該詞的文檔數+1)) 分母加1 避免分母爲0
  3. TF-IDF=TF*IDF

樸素貝葉斯推斷

 

  樸素貝葉斯理論聽起來很高大上,但實際上並沒有運用很高深的數學知識,即便沒有學習過高等數學也完全可以理解,初次給我的感覺就是簡單但有些繞,再到後來,我逐漸發現看似平凡的貝葉斯公式,背後卻隱藏着非常深刻的原理,接下來我將用盡可能直白的話解釋下貝葉斯理論。

  貝葉斯推斷是一種統計學方法,用來估計統計量的某種性質,與其他的統計學推斷不同,它建立在主觀判斷的基礎上。這裏可能有人會問,tf-idf就能用來做分類了,爲什麼還要樸素貝葉斯?是的,問得好,tf-idf確實可以進行分類,但樸素貝葉斯會有效增強準確率削弱錯誤率(如果你之前瞭解過深度學習,樸素貝葉斯起到的效果有點像softmax),樸素貝葉斯是建立在“全概率公式”的基礎下的,由已知的儘可能多的事件A、B求得的P(A|B)來推斷未知P(B|A),是的有點玄學的意思,敲黑板!!!  這也就決定了它和tf-idf這種統計學的概率的本質區別。

貝葉斯定理:要理解貝葉斯推斷,首先要知道貝葉斯定理。後者實際上是計算“條件概率”的公式。

  所謂“條件概率”(Conditional probability),就是指事件B發生的情況下,事件A發生的概率,用P(A|B)來表示,嗯,沒錯就是上圖哪個公式。上學那會老師這公式都要背熟的,用的時候也都是套公式,今天我們來看一下這個公式的推理過程:

 在推理之前,我們先看一個典型的例子,便於理解貝葉斯的奧妙之處。

舉個例子:生病的概率

  一種癌症,得了這個癌症的人被檢測出爲陽性的機率爲90%,未得這種癌症的人被檢測出陰性的機率爲90%,而人羣中得這種癌症的機率爲1%,一個人被檢測出陽性,問這個人得癌症的機率爲多少?

猛地一看,被檢出陽性,而且得癌症的話陽性的概率爲90%,那想必這個人應該是難以倖免了。那我們接下來就算算看。

我們用$A$表示事件“測出爲陽性”,用$B_{1}$表示“得癌症”,$B_{2}$表示“未得癌症”。根據題目,我們知道如下信息:

得癌症的概率:$P(B_{1})=0.01$ 未得癌症的概率:$P(B_{2})=0.99$   得癌症前提下被檢測出爲陽性的概率:$P(A|B_{1})=0.9$   未得癌症的前提下被檢測爲陽性的概率:$P(A|B_{2})=0.1$

即:$P(B_{1})=0.01, P(B_{2})=0.99, P(A|B_{1})=0.9, P(A|B_{2})=0.1$

  那麼我們現在想得到的是已知爲陽性的情況下,得癌症的機率$P(B_{1},A)$: 

$P(B_{1},A) = P(B_{1}) \cdot P(A|B_{1})=0.01\times0.9=0.009$

  這裏的$P(B_{1},A)$表示的是聯合概率,得癌症且檢測出陽性的概率是人羣中得癌症的概率乘上得癌症時測出是陽性的機率,是0.009.同理可得 未得癌症且檢測出爲陽性的概率:

$P(B_{2},A)=P(B_{2}) \cdot P(A|B_{2})=0.99\times0.1=0.099$

  這個概率是什麼意思呢?其實是指如果人羣中有1000個人,檢測出陽性並且得癌症的人有9個,檢測出陽性但未得癌症的人有99個。可以看出,檢測出陽性並不可怕,不得癌症的是絕大多數的,這跟我們一開始的直覺判斷是不同的!可直到現在,我們並沒有得到所謂的“在檢測出陽性的前提下得癌症的概率”,怎麼得到呢?很簡單,就是看杯測出爲陽性的這$108(9+99)$人裏,9人和99人分別佔的比例就是我們要的,也就是說我們只需要添加一個歸一因子就可以了。所以檢測爲陽性得癌症的概率$P(B_{1}|A)=\frac{0.009}{0.009+0.099}\approx0.083$(注意$B_{1}$與$A$之間的符號“ | ”代表的是條件概率) ,陽性未得癌症的概率$P(b_{2}|A)=\frac{0.099}{0.099+0.009}\approx0.917$。這裏$P(B_{1}|A), P(B_{2}|A)$中間多了一豎線“|”成爲條件概率,而這個概率就是貝葉斯統計中的 後驗概率!而人羣中患癌症與否的概率$P(B_{1}),P(B_{2})$就是先驗概率!我們知道了先驗概率,根據觀測值(也可以稱test evidence):是否爲陽性,來判斷得癌症的後驗概率,這就是基本的貝葉斯思想。

我們現在就能得出本題的後驗概率公式爲:

$P(B_{i}|A)=\frac{P(B_{i}) \cdot P(A|B_{i})}{P(B_{1}) \cdot P(A|B_{1})+P(B_{2}) \cdot P(A|B_{2})}$

貝葉斯公式

  我們把上面例子分母中的$B_{1},B_{2}$的下標變成$i$,由二分類變爲多分類,便會得到貝葉斯公式的一般形式:

$P(B_{i}|A)=\frac{P(B_{i}) \cdot P(A|B_{i})}{\sum_{i=1}^n P(B_{i}) \cdot P(A|B_{i})}$ 

  再根據全概率公式$\sum_{i=1}^n P(B_{i}) \cdot P(A|B_{i})=P(A)$ 於是我們就得到了上面的那張圖片:

$P(B|A)=\frac{P(B|A) \cdot P(A)}{P(A)}$

/*********************************************************************************************************************

全概率公式:如果事件$B_{1},B_{2},...$ 滿足

  1. "$B_{1},B_{2}...$ 兩兩互斥  即$B_{i} \cap B_{j}=\varnothing,  i \ne j, i,j=1,2...,且P(B_{i})>0,i=1,2,....;$"
  2. $B_{1} \cup B_{2}...= \Omega$,則稱事件組$B_{1},B_{2}...$是樣本空間$\Omega$的一個劃分

設$B_{1},B_{2}...$是樣本空間$\Omega$的一個劃分,A爲任一事件,則:$P(A)=\sum_{i=1}^\infty P(B_{i})P(A|B_{i})$

********************************************************************************************************************/

 到此對貝葉斯推論的解釋基本完成了,接下來我們將說明下在短文本分類中的具體應用。


 短文本分類應用

  短文本分類中,我們將運用樸素貝葉斯理論(Naive Bayesian),同時需要引入特徵條件獨立假設

  給定訓練數據集(X,Y),其中每個樣本(短文本)x都包含n維特徵,即$x=(x_{1},x_{2},x_{3},...,x_{n})$,類標記集合含有k種類別(體育、娛樂、科技...),即$y={y_{1},y_{2},y_{3},...,y_{n}}$,如果現在來了一個新樣本x,它屬於哪個類別的概率最大。那麼問題就轉化爲求解$P(y_{1}|x),P(y_{2}|x),P(y_{3}|x),...P(y_{k}|x)$ 中最大的那個,即求後驗概率最大的輸出:$argmax_{y_{k}}P(y_{k}|x)$;那$P(y_{k}|x)$怎麼求解?答案就是貝葉斯定理:

$P(y_{k}|x)=\frac{P(x|y_{k})P(y_{k})}{P(x)}$

  根據全概率公式替換分母:$P(y_{k}|x)=\frac{P(x|y_{k})P(y_{k})}{\sum_{k}P(x|y_{k})P(y_{k})}$

  先不管分母(分母是個定值),分子中的$P(y_{k})$是先驗概率,根據訓練集就可以簡單地計算出來。而條件概率$P(x|y_{k})=P(x_{1},x_{2},...,x_{n}|y_{k})$它的參數規模是指數數量級別的,假設第$i$維特徵$x_{i}$可取值的個數有$S_{i}$個,類別取值個數爲k個,那麼參數個數爲:$k \prod_{i=1}^n S_{i}$這顯然不可行。針對這個問題,樸素貝葉斯算法對條件概率分佈作出了獨立性的假設,通俗地講就是說假設各個維度的特徵$x_{1},x_{2},x_{3}...,x_{n}$相互獨立,在這個假設的前提下,條件概率可以轉化爲:

  $P(x|y_{k})=P(x_{1},x_{2},...,x_{n}|y_{k})= \prod_{i=0}^nP(x_{i}|y_{k})$ 這樣參數的規模就降到$\sum_{i=1}^nS_{i}k$

  以上就是針對條件概率所作出的特徵條件獨立性假設,至此,先驗概率$P(y_{k})$和條件概率$P(x|y_{k})$的求解問題就都解決了,那麼我們是不是可以求解我們所要的後驗概率$P(y_{k}|x)$答案是肯定的

  關於分母是由$P(A)$和全概率公式轉換來的,爲定值可以不管,簡化得樸素貝葉斯分類器的最終表示爲:

$f(x)=argmaxP(y_{k}) \prod_{i=1}^nP(x_{i}|y_{k})$

首先感謝參考文章中無私奉獻的前輩們!

由於作者水平有限,歡迎指出本文中錯誤之處。

 

 

參考文章:

  1. 貝葉斯推斷及其互聯網應用(一):定理簡介
  2. 機器學習(一)——淺談貝葉斯和MCMC
  3. 數學之美番外篇:平凡而又神奇的貝葉斯方法
  4. 樸素貝葉斯理論推導與三種常見模型
  5. 樸素貝葉斯分類器的應用
  6. tf-idf與餘弦相似性的應用(一):自動提取關鍵詞
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章