详解:贝叶斯算法(bayesian)在GCMail反垃圾邮件系统中的应用
贝叶斯在在反垃圾邮件的产品中应用很多,也是当前最好的反垃圾邮件算法,著名的卡巴斯基病毒库代码就是采用贝叶斯过滤算法,在目前的邮件系统中采用贝叶斯过滤算法的唯有GCMAil邮件服务器。下面我就对贝叶斯反垃圾邮件技术简单的介绍
一、贝叶斯反垃圾邮件技术介绍
贝叶斯是基于概率的一种算法,是ThomasBayes:一位伟大的数学大师所创建的,目前此种算法用于过滤垃圾邮件得到了广泛地好评。贝叶斯过滤器是基于“自我学习”的智能技术,能够使自己适应垃圾邮件制造者的新把戏,同时为合法电子邮件提供保护。在智能邮件过滤技术中,贝叶斯(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)的映射;
(来自:GCMail邮件系统软件,http://www.9gcai.com/main/webbase/9gcai/2011/0705/612.html)