網路城邦

上一篇 回創作列表 下一篇   字體:
你想都想不到的反垃圾信技術【讓EDM代發業者頭疼的反垃圾信技術:貝斯運算法】
2008/09/11 00:53:48瀏覽1175|回應0|推薦2

你想都想不到的反垃圾信技術【讓EDM代發業者頭疼的反垃圾信技術:貝斯運算法】

一、 貝斯介紹

  貝斯是基於概率的一種算法,是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

  由此可推出該郵件為非垃圾郵件。

四、總結
  葉斯過濾器為什麼能夠工作得這麼好呢?因為貝斯過濾器純粹根據統計學規律運作,比起那些需要分析郵件句法或內容含義的過濾器來顯然要簡單的多,而且可計算性強得多。更重要的是,這些標記完全可以由用戶根據自己所接收的垃圾郵件和非垃圾郵件來創建,因而可以獲得一種對用戶來說獨一無二的過濾器。這意味著垃圾郵件發送者根本無法猜測出你的過濾器是如何配置的,從而有效地阻截住各類垃圾郵件。

  不過,儘管貝斯過濾器非常有效,但它仍需要進行優化才能真正完美。比如它可以結合 「白名單」降低誤報率,結合「黑名單」降低漏過率,還可以利用其他技術如源址認證使其成為更加精確的垃圾郵件過濾器。

( 休閒生活生活情報 )

回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=acidlove1222&aid=2207677