一种过滤垃圾邮件的方法
技术领域
本发明属一种网络安全技术,具体涉及一种对网络垃圾邮件的识别方法。
背景技术
随着计算机网络的迅猛发展,电子邮件被越来越多的人所使用,但是在电子邮件给人们带来方便与快捷的同时,其负面影响也日益体现出来,那就是近些年来不断激增的垃圾邮件,这些垃圾邮件不但占用网络资源,影响邮件系统的正常运行,而且对邮件用户的资源和时间也是一种浪费。目前对垃圾邮件个过滤技术一般分为三类,行为过滤、规则过滤以及内容过滤,其中内容过滤包含文本分类,所谓文本分类,就是通过一定的算法,对输入文本进行分析,并根据结果将文本划分为相应类别的过程。文本分类的过程是需要指导的。一般来讲,在文本分类之前,都需要一个训练的过程。所谓训练,就是在一个已经分好类别的训练集合中,寻找那些能够体现文本类别的特征词或短语。在文本分类的时候就根据这些从训练集合中选出的特征,来计算文本的类别。对于过滤垃圾邮件,本质上,就是将文本划分到两个类别中去,垃圾邮件和正常邮件。
贝叶斯分类算法是文本分类方法的一种,将其应用于文本分类时,通过计算文本属于每个类别的概率,将该文本归为概率最大的一类,计算时利用了贝叶斯公式。简单贝叶斯分类算法即Naive Bayes,它建立在“贝叶斯假设”的基础之上:假定所有的特征之间互相独立。实际上,在生活中这种独立性很难存在,但从目前的实验结果看来,基于这个假设的简单贝叶斯分类算法的效果却很好,而且由于其计算简单,实现方便的特点,所以在垃圾邮件内容过滤中,经常使用简单贝叶斯分类算法。如Stanford University的Sahami(1998)、希腊National Centre for Scientific Research“Demokritos”的Androutsopoulos(2000)、Paul Graham(2002)、David Mertz(2002)等。
一般来讲,垃圾邮件过滤器使用一个由单词组成的向量,来表示一封邮件。而文本分类在学习过程中得到的特征,通常也是用单词来表示的。很明显的,这种以词为单位的处理方式,对于像中文这样的语言是很不利的。其缺点在于:
1、中文的表达形式与英文不同;中文并没有用空格将单词隔开,即使有一些标点,也只能断开一个完整的短语,而这种被标点断开的短语,通常又很难具有特征性,可用性非常低,这样就使得对中文邮件中的特征词训练,变得非常之困难。
2、英语词集中,有一个很好的停止词集,所谓停止词,就是有一些没有意义的介词叹词之类,比如:英语中的and、is和or等,还有类似中文中“是”、“的”等词,这些词如果进入特征词中,将会带来一些不必要的干扰,因此可将其列为停止词集。但是在中文中,这种单词数量不胜枚举,制作这样一个停止词就变成了一个相当繁琐,而且困难的工作,所以至今还没有一个可用的列表。
3、虽然现在有一些中文的分词系统,但是这些系统基本上只是根据一般的辞典对文本进行分词,它们的分词效果,通常都是差强人意的,而且效率极低,根本不可能用于网关级的垃圾邮件过滤。
既使对于英文邮件,简单的以词来表示文本也存在的一些弊端:如现在绝大多数的垃圾邮件发送者,对内容过滤都有着一定的了解,他们在发送垃圾邮件时,会故意将一些单词拼错,例如“freee”,“f-re*e”,这样,这些极具特征的词就会被过滤器放过,另外,有些句子如果单看每一个单词,都是正常的,但是一旦将它们连成一个句子,就办成了一个很有特点的垃圾特征,例如:“Dear sir”这样的开头在垃圾邮件中是很常见的,但是分开来看,很难看出是垃圾邮件,当然,这些问题也存在于中文邮件。
发明内容
本发明要解决的技术问题是提供一种能够提高识别垃圾邮件准确度,特别是能够提高识别中文垃圾邮件准确度的过滤垃圾邮件的方法。
解决上述问题的方法包含下述内容:
(1)、先通过DNA模式识别模块对输入的正常邮件和垃圾邮件集合进行模式识别,存入DNA模式库以备检测邮件以及训练贝叶斯分类器时使用;
(2)、检测邮件流程:对要检测的邮件通过特征模式分词模块依次进行下述处理:
—对经过一定算法编码的邮件的主题及正文进行解码;
—对邮件进行DNA辅助分词:根据DNA模式库识别邮件正文及标题中所包含的特征模式,并将其标识出来;
—将经过上述处理的邮件正文及标题重新组装,生成满足特定要求的邮件,送至基于Bayes方法的垃圾邮件识别模块进行识别分类,并使符合分类条件的邮件通过,将不符合分类条件的邮件拦截下来;
本发明的进一步方案是:在该方法中还设有喂养邮件流程,其过程是:将要喂养的邮件通过特征模式分词模块依次进行下述处理:
—对经过一定算法编码的邮件的主题及正文进行解码;
—对邮件进行DNA辅助分词:根据DNA模式库识别邮件正文及标题中所包含的特征模式,并将其标识出来;
—将经过上述处理的邮件正文及标题重新组装,生成满足特定要求的邮件后,送入基于Bayes方法的正常和垃圾邮件喂养模块进行训练喂养。
通常DNA算法分两个阶段:扫描(scanning)和卷积(convolution),在扫描阶段,具有充分支持的基本模式(elementary pattern)可被算法识别出来,这些基本模式组成了最终用于卷积阶段的构造块(buildingblocks),在后面的卷集过程中,它们将被组合起来,形成越来越大的模式,直到所有存在的最大模式(maximal pattern)都被构造出来。
本发明方法将DNA模式识别技术与Bayes分类算法相结合,所述的DNA模式识别技术借鉴于1998年IBM美国研究员学者提出的一种模式识别算法(TEIRESIAS算法)。所谓模式,就是经过一种固定格式定义后的局部相似特征;该算法的功能是从字符串集合中识别出频繁出现的尽可能长的模式,这种算法最早用于识别氨基酸片段中所包含的基因,也曾被用于计算机安全领域,做入侵检测,本发明将其引入了网络垃圾邮件的过滤。
为了将DNA模式识别技术与Bayes分类算法相结合,本发明设计了特征模式分词模块,如上所述,这个模块主要实现的功能是:
1.对经过某种算法编码的邮件正文进行解码,以便识别其所包含的模式。
2.根据DNA模式库识别邮件正文及标题中所包含的特征模式,并将其标识出来。
3.将处理过的邮件正文及标题重新组装成邮件,送至相应的接口(Bayes分类器检测接口,Bayes分类训练接口)。
本发明通过应有词法分析理论,将上述三个功能集成在一个自行编写的词法分析器中,模式分词模块首先对邮件进行扫描,在扫描到一个特定的字符串,该模块调用相应的函数对此字符串进行处理,例如,当模块扫描到指定解码语言的字符串时,将自动指定相应的函数以便对正文进行解码。通过模式分词模块在一个过程之中完成邮件的解析、辅助分词以及邮件重构三部分的工作,然后送至贝叶斯检测或训练系统;
贝叶斯垃圾邮件识别模块,通过Bayes算法,结合数据库技术对邮件进行检测分类;
本发明方法克服了单纯用贝叶斯分类算法对中文等不是自然分词的语言邮件进行分类的不利因素,从而:
第一,从根本上解决了中文的分词问题,对于模式识别来讲,不再有语言的差别,在特征模式训练的开始,所有的邮件都被当成一个字符串,并可通过DNA模式识别技术的扫描和卷积的过程,将存在于邮件中的模式识别出来。
第二,由于模式是以正则表达式的形式体现出来,所以它能够识别出一些存在于邮件之中的特殊的字符组合。以前面提到过的“freee”,“f-re*e”为例,模式识别模块,能够将存在于这两个单词中的模式“f*re.e”(这是一个正则表达式,“*”代表任意的字符串,“.”代表任意一个字符)识别出来,这样,上面提到的那两个单词就会被识别出来了。
第三,DNA模式识别技术事实上是将存在于邮件中的特征短语挖掘出来,所以,这样提取出来的特征模式,比单词来得更加有意义。像中文的人名,现有的分词系统会将姓和名分开,而DNA模式识别技术,会很好的把人名完整的提取出来;
如上所述本发明方法将DNA模式识别技术与现有在内容过滤中的贝叶斯文本分类技术相结合,从而提高了贝叶斯过滤器对垃圾邮件的识别能力,特别是对中文垃圾邮件的识别能力。
本发明进一步方安案设置的Bayes喂养模块,为该系统的分类提供了学习功能,即具有对分类器进行喂养,纠错等学习行为,以提高该系统的分类效果。
附图说明
图1、本发明方法实施例流程示意图
图2、本发明方法实施例运行硬件框架图
图3、本发明方法实施例特征模式分词模块流程图
具体实施方式
设有DNA模式识别模块、DNA模式库,贝叶斯检测训练系统和特征模式分词模块。
首先通过DNA模式识别模块对收集好的邮件库中的邮件进行急性模式识别,先用扫描模式将存在于邮件中的基本模式识别出来,并将其存入DNA模式库中的基本模式表,再用卷积过程则将这些基本模式进行卷积,得到特征模式,在检验这些最大模式是否符合条件之后,将符合条件的特征模式存入DNA模式库的最大模式表。
下面对上述过程作一具体描述:
在扫描过程,通过排列组合的方式,将所有符合基本模式定义的基本模式从邮件中提取出来,并将模式及其偏移序列存入数据库(所谓偏移序列就是指此基本模式在文本中出现的位置,由于基本模式可以在很多邮件中出现,所以偏移序列是一个链表)。
扫描过程所产生的结果,是一个包含了所有基本模式以及其相应的偏移序列的集合,这些基本模式满足了前述的对于最小支持的要求;这个基本模式集合将作为卷积过程的输入。DNA模式识别算法的扫描过程,实际上就是将所有存在于输入字符串集合中的模式分裂为更小的片段。卷积过程的任务就是将这些被分裂出来片段重新合并到一起,以恢复原来的模式。
在卷积时,产生的模式,将被分批地报告出来。每个阶段将产生一个支持K封邮件有最大模式。在每个阶段将使用一个堆栈。开始的时候,堆栈被初始化,里面被放入所有至少支持K的基本模式,进一步地,整个堆栈是按一定顺序将堆栈中的所有模式进行排列。
算法总是围绕当前栈顶的模式进行;这个模式为“当前头模式”。首先,一个模式被向右扩展(后缀方式)。算法寻找所有在栈中能与当前模式进行扩展模式,如果存在超过一个的符合条件的模式,则它们都会依次和当前模式进行卷积。设R为卷积的结果,若R所能支持的字符串少于K(可通过检查R的偏移序列来判断),则R被抛弃,当前头模式保持不变,继续进行下一个卷积。否则,R被放置到栈顶,并且成为新的当前头模式,然后重新进行上述过程。
若当前头模式不能再被向右扩展,同样的过程再次运行将当前模式向左扩展(前缀方式)。此时寻找所有满足条件的模式,并采用类似于前面的卷积顺序(当然判断依据是偏序)。
当两个方向的扩展都完成后,当前头模式从栈中取出,并检查其是否最大模式。如果是最大模式,保存之并重新运行上述过程;算法一直运行直到栈中不再有模式存在。
可以严格地证明上述过程是
1.可终止的。
2.可产生所有满足最小支持条件的最大<L,W>模式;
不产生任何非最大模式。
本例特征模式分词模块设有邮件解析模块、邮件模式识别标识模块邮、邮件构造模块,在对邮件进行所述的检测或者喂养时,特征模式分词模块将特征模式从DNA模式库中读出,并生成特征模式列表,在一封被检测或喂养邮件进入特征模式分词模块之后,先通过邮件解析模块将邮件进行解析,再通过邮件模式识别标识模块将邮件正文及主题中存在的特征模式进行标识,标识好之后通过邮件构造模块将处理过的邮件正文及标题重新组装成邮件,通过相应的接口送至贝叶斯检测训练系统。
图3为所述特征模式分词模块的流程图,具体流程为:
首先将邮件接到特征模式分词模块的输入流上,然后此模块将读入数据流,并随之进行相应的处理;
当特征模式分词模块在输入流中发现一个预定义好的规则时,它将转入为此规则所设定工作流程,完成工作后转回输入流;
如果从输入流中得到的数据并不与任何规则相匹配,则检查正文标识符的状态,如果状态为真,则当前数据为邮件正文,需要使用相应的解码函数,对经过编码的正文进行解码,之后,将解码过的正文重新写入输入流,以在其中便寻找特征模式;
若输入流中再没有数据,则特征模式分词模块工作结束。
本例贝叶斯检测训练系统设有Bayes垃圾邮件识别模块和Bayes训练模块;Bayes垃圾邮件识别模块收到检测邮件之后,对邮件进行分析,并与自己的数据库中的特征此进行比较,Bayes垃圾邮件识别模块在进行完比较之后,对邮件评分。如果分数高于某个特定值,则将邮件判断为垃圾邮件。如果一封邮件被判为垃圾邮件,那么系统将把这封邮件打上标签,这封邮件会被后面的邮件服务器存入用户的“不明文件夹”。
Bayes训练模块收到喂养邮件之后,将其与数据库中的特征进行比对,比对之后更新相应的信息,从而提高Bayes垃圾邮件识别模块的分类效果。
如果用户的邮件被误判为垃圾,那么用户可以投诉这封邮件,邮件服务器通过相应的协议连接到特征模式分词模块,模式分词模块处理完之后,将这封邮件送给训练模块进行学习。
同样,一封垃圾邮件邮件没有被判为垃圾,那么用户可以举报这封邮件,邮件服务器可通过相应的协议连接到特征模式分词模块,模式分词模块处理完之后,将这封邮件送给训练模块进行学习。
本例在用DNA识别模块对邮件进行扫描的阶段,具有充分支持的基本模式(elementary pattern)被算法识别出来,这些基本模式组成了最终用于卷积阶段的构造块(buil ding blocks),在后面的卷集过程中,它们被组合起来,形成越来越大的模式,直到所有存在的最大模式(maximal pattern)都被构造出来,之后再应用贝叶斯算法对最大模式进行分类,由于贝叶斯的分类效果较好,这样,就可以把所有的模式归好类,达到提高识别垃圾邮件准确性的目的。
图2是运行本实施例方法的硬件框架图,本例所述的模式贝叶斯过滤器,处于整个反垃圾网关的后半部分,当邮件正常地通过前面的各种规则之后,将通过前面所述的过程对邮件进行内容过滤,通过过滤器的邮件,再进行反病毒的检查。