交互式中文垃圾邮件过滤系统是基于“统计”规则的过滤方法设计并实现的,它兼具基于规则过滤方法与机器学习,以及概率统计过滤方法的垃圾邮件过滤系统的优点,同时还增加了邮件用户与垃圾邮件过滤器之间的交互,利用用户对邮件判定是否正确的反馈信息动态调整过滤器,从而提高过滤准确度。
系统框架
整个交互式中文垃圾邮件过滤系统的结构如图1所示。
(1)CCERT垃圾邮件样本数据库。我们将来自CCERT垃圾邮件蜜罐网、用户举报以及CCERT应急响应系统接收和处理的垃圾邮件,经过分析整理后创建了CCERT垃圾邮件样本集合。
(2)规则生成模块。该模块主要通过分析垃圾邮件样本数据创建垃圾邮件过滤规则,所有过滤规则保存在规则集中并应用到邮件服务器的垃圾邮件过滤引擎中。
(3)规则权重训练模块。该模块负责用机器学习的方法给规则集中的所有规则找到最佳的规则权重分布。规则集中的每一条规则都有一个权重,权重越大,说明符合这条规则的邮件是垃圾邮件的可能性越大。
(4)垃圾邮件过滤引擎。该过滤器包含了所有过滤规则以及规则的权重,当邮件服务器收到邮件时,它就会对邮件应用所有规则,给邮件“打分”,根据所有规则来判定是否为垃圾邮件。被判定为Spam的邮件并不会被邮件服务器丢弃,而是在邮件标题前打上Spam标签,这样邮件用户就可以利用客户端软件将其直接“扫除”到垃圾邮件夹。
(5)用户反馈信息收集模块,该模块负责收集邮件用户对判定正确性的反馈信息,并将反馈信息保存在用户反馈信息数据库中,供用户反馈信息学习模块使用。
(6)用户反馈信息学习模块。该模块根据用户反馈信息动态调整规则集中引起错判的过滤规则的权重,从而提高垃圾邮件过滤器的准确度,同时还能提高规则更新的速度。
系统实现
现对交互式中文垃圾邮件过滤系统几个重要模块的具体实现描述如下。
(1)规则生成模块。CCERT垃圾邮件过滤规则主要针对中文垃圾邮件的标题和内容部分。以20万封中文垃圾邮件样本作为样本集,生成中文关键字过滤规则。采取的主要手段是用分词工具对邮件样本的Subject部分和Body部分分别进行分词,然后各自统计词频,将词频最高的一组关键字提取出来,分别生成针对Subject部分和Body部分的关键字过滤规则。这里将Body部分和Subject部分分开分析,主要是为了在邮件服务器负载较大时可以只启用Subject部分的过滤规则,避免扫描邮件内容来提高处理速度。
(2)规则权重训练模块。用改进遗传算法对规则生成模块生成的中文过滤规则进行权重训练,寻找CCERT垃圾邮件过滤规则集中过滤规则的最优权重分布。用改进遗传算法寻找规则权重的最优分布时,种群中的每个染色体向量代表一组可能的规则权重分布,向量的维数等于CCERT垃圾邮件过滤规则集中的规则总数,每一维代表一条规则,每一维的值表示相应规则的权重。算法中采用实数编码方式,种群初始化时采用小群体竞争法,交叉算子采用优选父代自适应交叉操作,变异算子采取非一致自适应变异操作,在产生子代群体时,允许父代群体一起参与竞争,同时采用最优保留策略和两两竞争选择策略。在选择适应度函数时,按照可能的规则权重分布,对样本集中已经分类的正常邮件和垃圾邮件进行识别,用误判率、漏判率及垃圾邮件识别率共同衡量识别效果,以此作为规则权重分布的适应值。
(3)垃圾邮件过滤引擎。用改进遗传算法得到过滤规则权重的最优分布后,就可以用垃圾邮件过滤引擎在邮件服务器端过滤垃圾邮件了。邮件到达邮件服务器后,邮件过滤器会应用所有过滤规则对邮件进行识别。根据识别结果和触发的规则,对于每封被处理的邮件,邮件服务器都会在服务器端的数据库中保存一些邮件信息,包括是否为垃圾邮件、触发了哪些过滤规则、是否被用户反馈过等。数据库中每一条邮件信息记录都对应一个ID号,当在邮件末尾添加反馈链接时,这个ID号也被包含在链接中。每一封被处理邮件的末尾都被添加了供用户反馈的链接,如图2所示。
(4)用户反馈信息收集模块。如果邮件被错判,用户就可以通过反馈链接将邮件ID号反馈给邮件服务器端,邮件服务器就会对数据库中的邮件信息做相应处理,供反馈信息学习模块使用。
为了防止邮件的ID被恶意用户篡改,服务器端对ID号进行了加密,并将同一个MD5签名一起发送给邮件用户。
(5)用户反馈信息学习模块。收集到用户的反馈信息以后,邮件服务器通过反馈学习算法对用户反馈信息进行分析,动态调整过滤规则的权重分布,从而提高垃圾邮件过滤引擎的过滤准确度,同时加快规则更新速度。这里采用的反馈学习算法与感知器(perceptron)有类似之处,具体算法流程描述如下。
处理误判邮件。邮件服务器收集误判样本,待样本数目达到一定规模时,对误判邮件触发的规则进行统计,给出其中每条规则被触发的次数,按照触发规则的邮件数对规则排序,从大到小挑选若干条规则,将它们的权重作为待修改规则权重。适当降低待修改规则的权重。
处理漏判邮件。邮件服务器收集漏判样本,待样本数目达到一定规模时,对漏判邮件触发的规则进行统计,给出其中每条规则被触发的次数,按照触发规则的邮件数对规则排序,从大到小挑选若干条规则,将它们的权重作为待修改规则权重。适当提高待修改规则的权重。
试验与实用分析
在测试交互式中文垃圾邮件过滤系统的过滤效果时,为了测试用户反馈对过滤效果的影响,可将无用户反馈时和有用户反馈时的过滤结果进行比较。试验所用的训练集和测试集均包含2000封邮件样本,其中1000封为垃圾邮件,1000封为正常邮件,进行的测试如下。
(1)用CCERT垃圾邮件过滤规则集中的中文过滤规则对训练集中的邮件样本进行识别,不进行用户与服务器间的交互,统计垃圾邮件识别率、误判率和漏判率,设定判定阈值为5。
(2)增加用户与邮件服务器间的交互,对测试(1)中识别训练集时的错判信息进行统计并进行增量学习,再用权重调整公式调整中文过滤规则中敏感规则的权重,用修正后的过滤规则对测试集中的邮件样本进行识别,统计垃圾邮件识别率、误判率和漏判率,设定判定阈值为5。
可见,在判定阈值取5时,测试(1)中误判率较高,而测试(2)在增加用户与服务器间的交互并及时用增量学习处理错判信息后,误判率从16.9%下降到7.9%,垃圾邮件识别率仍能达82.4%。
在判定阈值取不同值时,试验结果表明,增加用户与服务器间的交互并用增量学习及时处理错判信息后,误判率均有所下降,且在判定阈值取3~9之间时下降幅度较大,而垃圾邮件识别率基本没有因为增量学习而受到影响。
为了进一步测试交互式中文垃圾邮件过滤系统的过滤效果,从2005年4月1日至2005年5月30日,在CCERT的邮件服务器上进行了连续两个月的试验:每隔20天,根据这期间的用户反馈信息统计垃圾邮件的识别效果,并根据用户反馈信息进行增量学习,对造成错判的过滤规则权重进行调整,从而更新邮件过滤器。
从实验数据统计结果可以看出,4月1日至5月30日期间,每次根据用户反馈信息调整过滤规则权重分布后,邮件识别率都有提高,从4月1号的78.2%提高到5月30号的86.9%,而规则权重的调整对误判率的影响只有0.02%。可见,在垃圾邮件过滤器的过滤准确度较低时,根据用户反馈信息调整规则权重分布,可以在对误判率影响很小的前提下,提高垃圾邮件识别率。
从上述所有试验的结果中可以看出,增加用户与服务器间的交互对于垃圾邮件识别是有意义的。一方面,对用户反馈信息的学习,可以提高过滤准确度,减少错判的发生;另一方面,增量学习方法的使用,降低了重新训练规则权重的频度,提高规则权重更新速度。