code

2017年4月3日 星期一

AI筆記40 - NLP

Text classification

naive bayes是最常見的text classification方法。

記得naive bayes有個naive前題假設,就是每個feature vector中的 element都是彼此獨立的,所以joint conditional probability = 個別的conditional probability的乘積:

有了上面這個前提,就能利用bayes theorem反推:


這些都是用data中的frequencies去model,這邊可以用m-estimate方法來修正feature出現次數過少的問題。

應用到text classification,首先data主體稱為corpus (document),我們定義document中每一個字的位置為一個attribute,而其value就是那個位置所在的字。我們要舉出另一個假設就是任何word wk出現在corpus中的機率跟任何位置( x1, x2, .... ) 都獨立無關



cj是training example的label分類的某個class j,上面的意思是 觀察到某個分類cj的前提下,wk在任何位置(x1, x2, .... ) 出現的機率都是相等。

這是一個合理的假設,當然可能對某些文件會例外。這樣我們就不用算出個別的p(x1=wk|cj)的機率,可能也很難算得出來。

一個好的text classifier m-estimate可以如下:

假設所有的label成cj的training examples 總共有nj個word positions,我們對此分母加上字彙的數量避免divided by zero,分子則是wk出現在分母範圍內的次數 + 1,避免某些p(wk|cj)為零。


Naive Bayes Text Classifier演算法

1. 首先演算法接受examples, 就是一些已經分類成set C 的documents,然後對這些examples找出重要的單元 (tokens),然後組成一個pertinent vocabulary V。

2.計算兩個貝氏定理需要的機率:

(a) P(cj) :每個class出線的機率
(b) P(wk |cj): conditional probability of word wk given observing cj。

對所有的class cj in C:
(a) 把所有的class cj的documents都從examples找出來,稱為docsj
(b) model P(cj): 用被分類成class cj的documents的數目,除以總共的examples (all documents)數量
(c) 製作class cj的corpus: 也就是把所有docsj 組合成單一document,稱為textj
(d) 找出textj所有出現在vocabulary的word的positions(occurrences),其數量為nj
(e) 對所有的word wk in vocabulary V:

  • 找出wk出現在textj的次數
  • 計算P(wk |cj): 記得用m-estimate:



training完畢, 接下來就可以做bayes classification:
(a) 假設input一個新的document Doc
(b) 找出所有不同位置的文字ai
(c) 找出這些文字屬於vocabulary V的位置 positions
(d) 找出Doc的class cDoc。之前講過利用逼近公式如下:


在text classification就是:


範例

假設我們有六個句子(看成6個documents),已經分類成TV和radio兩大類:


這些documents裡面,我們假設pertinent vocabulary:


對TV class:
我們已經找出所有TV class的documents (sentences),可以看成單一個corpus

P(TV class) =

這個corpus有9個vocabulary words occurrences,包括TV programs interesting TV Kids TV TV radio waves。
所以nTV = 9

再來分別計算出此corpus中所有vocabulary words出現的頻率,用m-estimate來model P(wk | TV):


同樣的步驟也apply在class Radio上,最後得出以下的結論:


這樣我們已經有了naive bayes的所有材料了,可以predict!

假設有一個新的sentence (document)如下:

我們先找出此document中出現的vocabulary words,只有radio和TV
根據naive bayes classifier,我們要算出:


以上兩個probability最大者,就是這個新的document所屬的class。


Probabilistic Language Model

用機率來model natural language,例如看到 "Did you call your ..." ,下一句比較有可能會是"mom"之類的,但很不可能是 "dinosaur"這種無厘頭的字眼,所以這邊會用probabilistic approach,當然也是在建築在大量的文字資料上面,可以寫成條件機率如下:


所以這類的機率模型就是在看到相連的n個字當作training樣本,如果在新的sample看到前面n-1個字的話,就能預測後面第n個字出現的機率。這類model稱為n-gram model

根據bayes theorem, 我們需要這n個字依序出現的joint probability,所以問題是要怎麼從corpus中評估出這個機率?

還好這個在機率課中有學過,見此篇: https://fu-sheng-wang.blogspot.tw/2016/12/probability4-conditional-probability.html

所以這個joint probability 可以利用multiplication rule拆成幾個conditional probability的乘積:


另一個問題又來了,這些conditional probability要怎麼計算,而且數量可能相當多。
N-gram model利用可以只利用n = 2 (稱為bigram) 來逼近 n-gram:














沒有留言:

張貼留言