貝葉斯推斷及其網際網路應用(二):過濾垃圾郵件

阮一峰發表於2011-08-27

上一次,我介紹了貝葉斯推斷的原理,今天講如何將它用於垃圾郵件過濾。

========================================

貝葉斯推斷及其網際網路應用

作者:阮一峰

貝葉斯推斷及其網際網路應用(二):過濾垃圾郵件

(接上文)

七、什麼是貝葉斯過濾器?

垃圾郵件是一種令人頭痛的頑症,困擾著所有的網際網路使用者。

正確識別垃圾郵件的技術難度非常大。傳統的垃圾郵件過濾方法,主要有"關鍵詞法"和"校驗碼法"等。前者的過濾依據是特定的詞語;後者則是計算郵件文字的校驗碼,再與已知的垃圾郵件進行對比。它們的識別效果都不理想,而且很容易規避。

2002年,Paul Graham提出使用"貝葉斯推斷"過濾垃圾郵件。他說,這樣做的效果,好得不可思議。1000封垃圾郵件可以過濾掉995封,且沒有一個誤判。

另外,這種過濾器還具有自我學習的功能,會根據新收到的郵件,不斷調整。收到的垃圾郵件越多,它的準確率就越高。

八、建立歷史資料庫

貝葉斯過濾器是一種統計學過濾器,建立在已有的統計結果之上。所以,我們必須預先提供兩組已經識別好的郵件,一組是正常郵件,另一組是垃圾郵件。

我們用這兩組郵件,對過濾器進行"訓練"。這兩組郵件的規模越大,訓練效果就越好。Paul Graham使用的郵件規模,是正常郵件和垃圾郵件各4000封。

"訓練"過程很簡單。首先,解析所有郵件,提取每一個詞。然後,計算每個詞語在正常郵件和垃圾郵件中的出現頻率。比如,我們假定"sex"這個詞,在4000封垃圾郵件中,有200封包含這個詞,那麼它的出現頻率就是5%;而在4000封正常郵件中,只有2封包含這個詞,那麼出現頻率就是0.05%。(【註釋】如果某個詞只出現在垃圾郵件中,Paul Graham就假定,它在正常郵件的出現頻率是1%,反之亦然。這樣做是為了避免概率為0。隨著郵件數量的增加,計算結果會自動調整。)

有了這個初步的統計結果,過濾器就可以投入使用了。

九、貝葉斯過濾器的使用過程

現在,我們收到了一封新郵件。在未經統計分析之前,我們假定它是垃圾郵件的概率為50%。(【註釋】有研究表明,使用者收到的電子郵件中,80%是垃圾郵件。但是,這裡仍然假定垃圾郵件的"先驗概率"為50%。)

我們用S表示垃圾郵件(spam),H表示正常郵件(healthy)。因此,P(S)和P(H)的先驗概率,都是50%。

貝葉斯推斷及其網際網路應用(二):過濾垃圾郵件

然後,對這封郵件進行解析,發現其中包含了sex這個詞,請問這封郵件屬於垃圾郵件的概率有多高?

我們用W表示"sex"這個詞,那麼問題就變成了如何計算P(S|W)的值,即在某個詞語(W)已經存在的條件下,垃圾郵件(S)的概率有多大。

根據條件概率公式,馬上可以寫出

貝葉斯推斷及其網際網路應用(二):過濾垃圾郵件

公式中,P(W|S)和P(W|H)的含義是,這個詞語在垃圾郵件和正常郵件中,分別出現的概率。這兩個值可以從歷史資料庫中得到,對sex這個詞來說,上文假定它們分別等於5%和0.05%。另外,P(S)和P(H)的值,前面說過都等於50%。所以,馬上可以計算P(S|W)的值:

貝葉斯推斷及其網際網路應用(二):過濾垃圾郵件

因此,這封新郵件是垃圾郵件的概率等於99%。這說明,sex這個詞的推斷能力很強,將50%的"先驗概率"一下子提高到了99%的"後驗概率"。

十、聯合概率的計算

做完上面一步,請問我們能否得出結論,這封新郵件就是垃圾郵件?

回答是不能。因為一封郵件包含很多詞語,一些詞語(比如sex)說這是垃圾郵件,另一些說這不是。你怎麼知道以哪個詞為準?

Paul Graham的做法是,選出這封信中P(S|W)最高的15個詞,計算它們的聯合概率。(【註釋】如果有的詞是第一次出現,無法計算P(S|W),Paul Graham就假定這個值等於0.4。因為垃圾郵件用的往往都是某些固定的詞語,所以如果你從來沒見過某個詞,它多半是一個正常的詞。)

所謂聯合概率,就是指在多個事件發生的情況下,另一個事件發生概率有多大。比如,已知W1和W2是兩個不同的詞語,它們都出現在某封電子郵件之中,那麼這封郵件是垃圾郵件的概率,就是聯合概率。

在已知W1和W2的情況下,無非就是兩種結果:垃圾郵件(事件E1)或正常郵件(事件E2)。

貝葉斯推斷及其網際網路應用(二):過濾垃圾郵件

其中,W1、W2和垃圾郵件的概率分別如下:

貝葉斯推斷及其網際網路應用(二):過濾垃圾郵件

如果假定所有事件都是獨立事件(【註釋】嚴格地說,這個假定不成立,但是這裡可以忽略),那麼就可以計算P(E1)和P(E2):

貝葉斯推斷及其網際網路應用(二):過濾垃圾郵件

貝葉斯推斷及其網際網路應用(二):過濾垃圾郵件

又由於在W1和W2已經發生的情況下,垃圾郵件的概率等於下面的式子:

貝葉斯推斷及其網際網路應用(二):過濾垃圾郵件

貝葉斯推斷及其網際網路應用(二):過濾垃圾郵件

將P(S)等於0.5代入,得到

貝葉斯推斷及其網際網路應用(二):過濾垃圾郵件

將P(S|W1)記為P1,P(S|W2)記為P2,公式就變成

貝葉斯推斷及其網際網路應用(二):過濾垃圾郵件

這就是聯合概率的計算公式。如果你不是很理解,點選這裡檢視更多的解釋。

十一、最終的計算公式

將上面的公式擴充套件到15個詞的情況,就得到了最終的概率計算公式:

貝葉斯推斷及其網際網路應用(二):過濾垃圾郵件

一封郵件是不是垃圾郵件,就用這個式子進行計算。這時我們還需要一個用於比較的門檻值。Paul Graham的門檻值是0.9,概率大於0.9,表示15個詞聯合認定,這封郵件有90%以上的可能屬於垃圾郵件;概率小於0.9,就表示是正常郵件。

有了這個公式以後,一封正常的信件即使出現sex這個詞,也不會被認定為垃圾郵件了。

(完)

相關文章