【專欄】數學之美番外篇:平凡而又神奇的貝葉斯方法(10)
雖然句子和文章的數目是無限的,然而就拿郵件來說,如果我們只關心郵件中句子的語義,在這個層面上可能性便大大縮減了,我們關心的抽象層面越高,可能性越小。單詞集合和句子的對應是多對一的,句子和語義的對應又是多對一的,語義和意圖的對應還是多對一的,這是個層級體系。
樸素貝葉斯方法
樸素貝葉斯方法是一個很特別的方法,所以值得介紹一下。我們用樸素貝葉斯在垃圾郵件過濾中的應用來舉例說明。
作者:劉未鵬 出版:電子工業出版社
貝葉斯垃圾郵件過濾器
問題是什么?問題是,給定一封郵件,判定它是否屬于垃圾郵件。按照先例,我們還是用D來表示這封郵件,注意D由N個單詞組成。我們用h+來表示垃圾郵件,h-表示正常郵件。問題可以形式化地描述為求:
P(h+|D) = P(h+) * P(D|h+) / P(D)
P(h-|D) = P(h-) * P(D|h-) / P(D)
其中P(h+)和P(h-)這兩個先驗概率都是很容易求出來的,只需要計算一個郵件庫里面垃圾郵件和正常郵件的比例就行了。然而P(D|h+)卻不容易求,因為D里面含有N個單詞d1, d2, d3, .. ,所以P(D|h+)= P(d1,d2,..,dn|h+)。我們又一次遇到了數據稀疏性,為什么這么說呢?P(d1,d2,..,dn|h+)就是說在垃圾郵件當中出現跟我們目前這封郵件一模一樣的一封郵件的概率是多大!開玩笑,每封郵件都是不同的,世界上有無窮多封郵件。瞧,這就是數據稀疏性,因為可以肯定地說,你收集的訓練數據庫不管里面含了多少封郵件,也不可能找出一封跟目前這封一模一樣的。結果呢?我們又該如何來計算P(d1,d2,..,dn|h+)呢?
我們將P(d1,d2,..,dn|h+)擴展為:P(d1|h+) * P(d2|d1, h+) * P(d3|d2,d1, h+) * ..。熟悉這個式子嗎?這里我們會使用一個更激進的假設,我們假設di 與 di-1是完全條件無關的,于是式子就簡化為 P(d1|h+) * P(d2|h+) * P(d3|h+) * .. 。這個就是所謂的條件獨立假設,也正是樸素貝葉斯方法的樸素之處。而計算P(d1|h+) * P(d2|h+) * P(d3|h+) * ..就太簡單了,只要統計di這個單詞在垃圾郵件中出現的頻率即可。關于貝葉斯垃圾郵件過濾更多的內容可以參考這個條目,注意其中提到的其他資料。
一點注記:這里,為什么有這個數據稀疏問題,還是因為統計學習方法工作在淺層面,世界上的單詞就算不再變多也是非常之多的,單詞之間組成的句子也是變化多端,更不用說一篇文章了,文章數目則是無窮的,所以在這個層面作統計,肯定要被數據稀疏性困擾。我們要注意,雖然句子和文章的數目是無限的,然而就拿郵件來說,如果我們只關心郵件中句子的語義(進而更高抽象層面的“意圖”(語義,意圖如何可計算地定義出來是一個人工智能問題),在這個層面上可能性便大大縮減了,我們關心的抽象層面越高,可能性越小。單詞集合和句子的對應是多對一的,句子和語義的對應又是多對一的,語義和意圖的對應還是多對一的,這是個層級體系。神經科學的發現也表明大腦的皮層大致有一種層級結構,對應著越來越抽象的各個層面,至于如何具體實現一個可放在計算機內的大腦皮層,仍然是一個未解決問題,以上只是一個原則(principle)上的認識,只有當computational的cortex模型被建立起來了之后才可能將其放入電腦。
(待續;此文的修訂版已收錄《暗時間》一書,由電子工業出版社2011年8月出版。作者于2009年7月獲得南京大學計算機系碩士學位,現在微軟亞洲研究院創新工程中心從事軟件研發工程師工作。)
網絡編輯:謝小跳