贝叶斯算法(bayesian)在反垃圾邮件中的应用
作者:鐘偉海
2016-04-01
一、 貝葉斯反垃圾郵件技術介紹
貝葉斯是基于概率的一種算法,是Thomas Bayes:一位偉大的數學大師所創建的,目前此種算法用于過濾垃圾郵件得到了廣泛地好評。貝葉斯過濾器是基于“自我學習”的智能技術,能夠使自己適應垃圾郵件制造者的新把戲,同時為合法電子郵件提供保護。在智能郵件過濾技術中,貝葉斯(Bayesian)過濾技術取得了較大的成功,被越來越多地應用在反垃圾郵件的產品中。
二、 貝葉斯過濾算法的基本步驟
1. 收集大量的垃圾郵件和非垃圾郵件,建立垃圾郵件集和非垃圾郵件集。
2. 提取郵件主題和郵件體中的獨立字符串,例如 ABC32,¥234等作為TOKEN串并統計提取出的TOKEN串出現的次數即字頻。按照上述的方法分別處理垃圾郵件集和非垃圾郵件集中的所有郵件。
3. 每一個郵件集對應一個哈希表,hashtable_good對應非垃圾郵件集而hashtable_bad對應垃圾郵件集。表中存儲TOKEN串到字頻的映射關系。
4. 計算每個哈希表中TOKEN串出現的概率P=(某TOKEN串的字頻)/(對應哈希表的長度)
5. 綜合考慮hashtable_good和hashtable_bad,推斷出當新來的郵件中出現某個TOKEN串時,該新郵件為垃圾郵件的概率。數學表達式為:
A 事件 ---- 郵件為垃圾郵件;
t1,t2 …….tn 代表 TOKEN 串
則 P ( A|ti )表示在郵件中出現 TOKEN 串 ti 時,該郵件為垃圾郵件的概率。
設
P1 ( ti ) = ( ti 在 hashtable_good 中的值)
P2 ( ti ) = ( ti 在 hashtable_ bad 中的值)
則 P ( A|ti ) =P2 ( ti ) /[ ( P1 ( ti ) +P2 ( ti ) ] ;
6. 建立新的哈希表hashtable_probability存儲TOKEN串ti到P(A|ti)的映射
7. 至此,垃圾郵件集和非垃圾郵件集的學習過程結束。根據建立的哈希表 hashtable_probability可以估計一封新到的郵件為垃圾郵件的可能性。
當新到一封郵件時,按照步驟2,生成TOKEN串。查詢hashtable_probability得到該TOKEN 串的鍵值。
假設由該郵件共得到N個TOKEN 串,t1,t2…….tn,hashtable_probability中對應的值為 P1 , P2 , ……PN , P(A|t1 ,t2, t3……tn) 表示在郵件中同時出現多個TOKEN串t1,t2……tn時,該郵件為垃圾郵件的概率。
由復合概率公式可得
P(A|t1 ,t2, t3……tn)=(P1*P2*……PN)/[P1*P2*……PN+(1-P1)*(1-P2)*……(1-PN)]
當 P(A|t1 ,t2, t3……tn) 超過預定閾值時,就可以判斷郵件為垃圾郵件。
三、 貝葉斯過濾算法舉例
例如:一封含有 “ 法無效字符輪無效字符功 ” 字樣的垃圾郵件 A 和一封含有 “ 法無效字符律 ” 字樣的非垃圾郵件 B 。 根據郵件 A 生成 hashtable_bad ,該哈希表中的記錄為
法: 1 次
無效字符輪: 1 次
無效字符功: 1 次
計算得在本表中:
無效字符法出現的概率為 0.3
無效字符輪出現的概率為 0.3
無效字符功出現的概率為 0.3
根據郵件B生成hashtable_good,該哈希表中的記錄為:
法: 1 次
律: 1 次
計算得在本表中:
法出現的概率為 0.5
律出現的概率為 0.5
綜合考慮兩個哈希表,共有四個 TOKEN 串:法無效字符論無效字符功無效字符律
當郵件中出現“法”時,該郵件為垃圾郵件的概率為:
P = 0.3/ ( 0.3 + 0.5 ) = 0.375
出現“無效字符輪”時,該郵件為垃圾郵件的概率為:
P = 0.3/ ( 0.3 + 0 ) = 1
出現“無效字符功”時,該郵件為垃圾郵件的概率為:
P = 0.3/ ( 0.3 + 0 ) = 1
出現“無效字符律”時,該郵件為垃圾郵件的概率為:
P = 0/ ( 0 + 0.5 ) = 0
由此可得第三個哈希表 hashtable_probability ,其數據為:
無效字符法: 0.375
無效字符輪: 1
無效字符功: 1
律: 0
當新到一封含有“功無效字符律”的郵件時,我們可得到兩個TOKEN串:功 律
查詢哈希表 hashtable_probability 可得:
P (垃圾郵件 | 功) = 1
P (垃圾郵件 | 律) = 0
此時該郵件為垃圾郵件的可能性為:
P= ( 0*1 ) /[0*1+ ( 1-0 ) * ( 1-1 ) ] = 0
由此可推出該郵件為非垃圾郵件。
四、總結
葉斯過濾器為什么能夠工作得這么好呢?因為貝葉斯過濾器純粹根據統計學規律運作,比起那些需要分析郵件句法或內容含義的過濾器來顯然要簡單的多,而且可計算性強得多。更重要的是,這些標記完全可以由用戶根據自己所接收的垃圾郵件和非垃圾郵件來創建,因而可以獲得一種對用戶來說獨一無二的過濾器。這意味著垃圾郵件發送者根本無法猜測出你的過濾器是如何配置的,從而有效地阻截住各類垃圾郵件。
不過,盡管貝葉斯過濾器非常有效,但它仍需要進行優化才能真正完美。比如它可以結合 “白名單”降低誤報率,結合“黑名單”降低漏過率,還可以利用其他技術如源址認證使其成為更加精確的垃圾郵件過濾器。
相信很多關注反垃圾郵件的朋友都聽說過貝葉斯過濾算法,但是對于貝葉斯過濾算法是如何過濾垃圾郵件卻不是很了解,郵件群發網在此就列出它的過濾步驟,如下:
??? 1.收集大量的垃圾郵件和非垃圾郵件,建立不同的集。
??? 2.提取郵件主題和郵件體中的獨立字串,然后獲取頻率。按照上述的方法分別處理垃圾郵件集和非垃圾郵件集中的所有郵件。
??? 3.每一個郵件集對應一個哈希表,hashtable_good對應非垃圾郵件集而hashtable_bad對應垃圾郵件集。
??? 4.計算每個哈希表中關鍵字符串出現的概率P=(某字頻)/(對應哈希表的長度)
??? 5.綜合考慮hashtable_good和hashtable_bad,推斷出當新郵件中出現某個字串時,該新郵件為垃圾郵件的概率。
??? 6.建立新的哈希表 hashtable_probability
??? 7.至此,垃圾郵件集和非垃圾郵件集的學習過程結束。根據建立的哈希表 hashtable_probability可以估計一封新到的郵件為垃圾郵件的可能性。
在今天的反垃圾郵件技術中,則融合了以前大部分實用技術的精華,采用權重算法讓判斷垃圾郵件的工作更精確、更智能。但保守的人們還是不愿把規則設置的過嚴,因為沒有任何一個用戶希望把自己正規的郵件當作垃圾郵件處理掉。本文來源于網絡。
??? 貝葉斯過濾是根據貝葉斯準則和貝葉斯定理,以已知垃圾郵件和非垃圾郵件為樣本,來判斷下一封郵件是垃圾郵件的概率的技術。跟普通的內容過濾技術不 同,貝葉斯過濾特征的來源比較多,可以采用郵件正文單詞、郵件頭信息(發送者、傳遞路徑等)、郵件的HTML編碼等作為判斷的特征元素,因此對垃圾郵件的 判斷能夠做到更全面、更準確。更重要的是,貝葉斯過濾還具有自學習功能,能夠學習分辨垃圾郵件與非郵件之間的差別,差別是用概率來表示的,并且自動應用到 以后的檢測中。在收到幾百封信件后,一個好的貝葉斯過濾器就可以自動識別各種垃圾郵件。
使用貝葉斯算法來進行垃圾郵件過濾的基本步驟是:
1.收集樣本垃圾郵件和非垃圾郵件,建立垃圾郵件集和非垃圾郵件集;
2.在垃圾郵件集和非垃圾郵件集中,提取特征來源中的獨立字符串abc,并統計該字符串出現的次數(字頻);針對垃圾郵件集和非垃圾郵件集,分別建立哈希表hash_spam和hash_normal,在哈希表中存儲特征字符串abc字頻的映射關系;
3.計算每個哈希表中特征字符串abc出現的概率P=(該特征字符串的字頻)/(對應哈希表的長度);
4.綜合考慮hash_spam和hash_normal,推斷當新接收的郵件中出現特征字符串abc時,該新郵件為垃圾郵件的概率。
如果:A事件 郵件為垃圾郵件;t1,t2 …….tn代表特征字符串;則P(Ati)表示在郵件中出現TOKEN串ti時,該郵件為垃圾郵件的概率。
設P1(ti)=ti在hash_spam中的值;P2(ti)=ti在hash_normal中的值;則P(Ati)=P2(ti)/[(P1(ti)+P2(ti)) ;
5.建立新的哈希表hash_probability存儲特征字符串ti到P(Ati)的映射;
6.根據建立的哈希表hash_probability可以估計一封新到的郵件為垃圾郵件的可能性。
這樣,當接收到一個郵件時,首先按照步驟2生成特征字符串。查詢hash_probability得到該字符串的鍵值。假設由該郵件共得到N個特征字符 串t1,t2…….tn,hashtable_probability中對應的值為P1,P2……PN,P(At1,t2,t3……tn)表示在郵件中同 時出現多個字符串t1,t2……tn時,該郵件為垃圾郵件的概率。
由復合概率公式可得:
P(At1,t2,t3……tn)=(P1*P2*……PN)/[P1*P2*……PN+(1-P1)*(1-P2)*……(1-PN)]
當P(At1,t2,t3……tn)超過預定閥值時,就可以判斷郵件為垃圾郵件?! ‘斝锣]件到達的時候,就通過貝葉斯過濾器分析,通過使用各個特征來計算郵件是垃圾郵件的概率。通過不斷的分析,過濾器也不斷地獲得自更新。如果通過各種特征判斷一個包含單詞abc的郵件是垃圾郵件,那么單詞abc成為垃圾郵件特征的概率就增加了。
這樣,貝葉斯過濾器就有了自適應能力,既能自動進行,也可以用戶手工操作,也就更能適應單個用戶的使用。而垃圾郵件發送者要獲得這樣的適應能力就很難 了,因此,很難逃避過濾器的過濾。當然他們還是能夠將郵件偽裝成很普通的正常郵件樣子的。比如,垃圾郵件發送者能去對某個人的過濾器進行判斷;又比如,采 用發送回執的辦法來了解哪些郵件被用戶打開了等,這樣他們就可以適應過濾器了。
設計優良的貝葉斯過濾器,可以識別99.7%以上的垃圾郵件,而且誤判率極低,是目前最有效的反垃圾郵件技術。這主要是因為貝葉斯過濾具有以下特點。
貝葉斯過濾技術對郵件的所有內容進行分析,不僅僅是其中的某個關鍵詞,而且它能判別郵件是垃圾郵件還是正常郵件。例如:包含"free""cash"" 發票"字樣的郵件不一定是垃圾郵件,如果采用關鍵字過濾技術,顯然難以達到理想的效果。而貝葉斯過濾技術既考慮了這些詞在垃圾郵件中出現的概率、又考慮了 它在正常郵件中的概率,綜合考慮這些因素做出判斷。可以說,貝葉斯過濾技術具有一定的智能,它對郵件中的關鍵詞能綜合地進行評判,可以把握"好"與"壞" 之間的平衡。顯然,這種技術遠遠高于非1即0的靜態過濾技術。
貝葉斯過濾技術具備自適應功能,通過學習新的垃圾郵件及正常郵件樣本,它 將能對抗最新的垃圾郵件,并且對變體字有奇效。比如,垃圾郵件發送者開始使用"f-r-e-e"來代替"free"這樣能夠繞過關鍵字檢查,除非"f- r-e-e"被加到新的關鍵字中。而對貝葉斯過濾技術而言,當它發現郵件中含有"f-r-e-e"時,由于正常郵件中從來沒有發現這個詞,因此它是垃圾郵 件的可能性將急劇增加,"f-r-e-e"這個新詞無疑成了垃圾郵件的指示器。再比如,垃圾郵件中用5ex代替sex,貝葉斯過濾技術也可推算出它是垃圾 郵件的可能性也急劇增加。
貝葉斯過濾技術更加個性化。它能學習并理解用戶對郵件的偏好。如前所述,"mortgage"抵押一詞對軟件公司而言意味著垃圾,但對金融類公司則意味著郵件。貝葉斯過濾技術能根據用戶的這種偏好進行處理。
貝葉斯過濾技術支持多語種或者說與編碼無關。這是因為它分析的是字串,無論是數字、詞、符號、還是別的什么,當然與語言無關。
貝葉斯過濾器很難被欺騙。垃圾郵件發送高手通常通過減少垃圾詞匯(如free、viagra、發票)或者在信中多加入一些好的詞匯(如合同、文件)來繞 過一般的郵件內容檢查,但由于貝葉斯過濾技術具有個性化的色彩,要想成功地繞過它的檢查,就不得不對每個收件人的偏好進行研究,這簡直是"不可能完成的任 務",垃圾郵件發送者是無法容忍的。若采用變化字,則如前所述,貝葉斯過濾技術判斷其為垃圾郵件的可能性反而增加。
實踐也證明,貝葉斯過濾器在用戶端和服務器中效果是非常明顯的,如優秀的貝葉斯過濾器能夠識別超過99.9%的垃圾郵件。
總結
以上是生活随笔為你收集整理的贝叶斯算法(bayesian)在反垃圾邮件中的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 豆芽邀请码51136推荐,Mixgo C
- 下一篇: graphicsmagick和image