概要
当今社会发展迅速,网络邮件也愈加普及。但是随之产生的垃圾邮件问题,也是的我们的邮件用户不堪其扰。对企业的工作以及个人用户的生活也造成了很大的影响。针对一些由于垃圾邮件导致的网络吞吐量异常和邮件系统无法正常使用的情况。建立一个机器学习邮件过滤系统是很有必要的。本文阐述了垃圾邮件过滤系统的背景,现状和意义。接着还介绍了系统的需求分析以及数据库分析、功能模块具体设计。最后介绍了邮件过滤系统的实现以及项目测试。
机器学习邮件过滤系统使用idea开发工具 和MySQL数据库。使用改进后的TFIDF算法和朴素贝叶斯算法两种算法来进行邮件过滤。本系统主要实现的功能包括用户登录、数据预处理、模型性能评价、词典加载等功能模块。
关键词 邮件过滤,TFIDF,朴素贝叶斯,MySQL
一、研究背景与意义
1.1课题研究的背景
在21世纪,随着大家生活水平的提高,计算机走入千家万户。网络化信息化已经成为了当代的重要特征。网络已经成为了我们这个时代的基础核心。网络已经逐渐成为了各行各业发展的基础。现如今我们国家也越来越重视网络市场。随着网络通讯技术的发展和完善,电子邮件的用户也越来越多。随着商家也越来越重视告效应,用户每天收到的垃圾邮件也是越来越多。垃圾邮件是我们用户在日常生活中接收到的不需要的、对我们没有任何帮助的邮件,主要包括广告、商品推广、业务推广等。虽然目前市场上也是出现了一些垃圾邮件的过滤机制,但是收效甚微。因为不仅垃圾邮件过滤算法机制在提高,同时发送垃圾邮件的人也在想办法逃避检测,他们通常通过修改邮件内容以及减少使用垃圾词汇的频率,甚至使用其他谐音词汇来伪装成正常邮件。目前有很多比较常用的方法包括:基于邮件规则的过滤方法、通过拦截黑白名单过滤方法、基于邮件智能统计学习的方法。但在这些机制对于垃圾邮件所导致的“网络吞吐量异常”和“邮件系统异常”问题是无法有效缓解的。所以开发一个服务器端的邮件过滤系统,对于企业以及个人用户都是很有必要的。
1.2问题的提出及研究的意义
在网络邮件带来的一系列的便捷的情况下,人们越来越青睐于邮件获取交换信息。与此同时,网络广告邮件的广告效应也是越来越强。垃圾邮件对用户的困扰也与日俱增。目前,用于处理垃圾邮件的方法主要有三种:定制法律法规、更改收发邮件的协议以及通过过滤器过滤垃圾邮件。
然而对于现在巨量的垃圾邮件,第一种方法仅仅是对人的约束,可以说是收效甚微的,由于可以遵守某些已定的规则或是钻了法律的空子,一些人可以发送很多的广告邮件,法律法规反而是某些人发送垃圾邮件的保护伞。而协议的改进是通过对收发邮件的方式做出改变从而减少垃圾邮件的发送,例如对发送者进行检验,一定时间内可以发送多少邮件,超过规定数目就会追加收费,或是验证邮件是否来自合法区域以及发送者和接收者协商通过核对某种密码进行邮件的收发等等。但是这些协议却经常因为需要对当前协议进行变更或升级,协议的部署会经常受到限制,从而很难在电子邮件用户中进行推广。所以目前我们需要研究的方向就是使用过滤器对大量的邮件进行过滤,从而区分出那些是正常邮件,哪些是垃圾邮件。
为了更加符合大众免受垃圾邮件困扰的需求。并且经过网上数据资料及调查结果的参考。垃圾邮件过滤类市场仍未饱和。但是用户对邮件过滤的即时性和操作方便性尤为看中。故编写一个机器学习邮件过滤系统是很有帮助的。
二、开发工具及相关技术概述
2.1开发工具介绍
本文开发的垃圾邮件过滤系统使用的开发工具主要是IntelliJ IDEA,数据库使用MySQL,界面采用Java Swing开发,数据集使用trec06c。
IntelliJ IDEA是被认为当前Java开发效率最好的一款IDE工具,它整合了开发过程中实用的很多功能[9],并且界面整洁、美观。使用它的一个重要原因是对于Java语言规范适配,这对项目环境以及项目配置的搭建有着很大的帮助。其次是代码生成较好,相比于其他工具IntelliJ IDEA功能更加强大并且在编写代码的过程中不易出错。而且还有很好的测试功能,它会自动生成测试类,并对应会生成测试方法。这对本系统的开发起了很的帮助。
MySQL是一个关系型数据库,使用的是SQL语言进行增删改查的操作,目前属于Oracle旗下的产品。它是目前最受欢迎的关系型数据库之一。它支持各种开发语言,包括本系统所使用的Java语言,这也是选择使用MySQL数据库的重要原因之一。
2.2相关知识概述
1.朴素贝叶斯:
朴素贝叶斯分类是贝叶斯分类器的一种,贝叶斯分类算法是统计学的一种分类方法,利用概率统计知识进行分类,其分类原理就是利用贝叶斯公式根据某对象的先验概率计算出其后验概率(即该对象属于某一类的概率),然后选择具有最大后验概率的类作为该对象所属的类[10]。总的来说:当样本特征个数较多或者特征之间相关性较大时,朴素贝叶斯分类效率比不上决策树模型;当各特征相关性较小时,朴素贝叶斯分类性能最为良好。另外朴素贝
叶斯的计算过程类条件概率等计算彼此是独立的,因此特别适于分布式计算。
2.TFIDF:是一种用于资讯检索与资讯探勘的常用加权技术,它是一种统计方法,用以评估一字词对于文章的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率而成反比下降[11]。
3.Swing:Swing是一个用于开发Java应用程序用户界面的开发工具包,是为Java设计的一个GUI工具包,是Java基础类的一部分。Swing组件的出现是为了解决AWT组件的移植性问题,同时也提供了更多企业级应用程序所需要的界面功能。应用其中包含了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表。Swing提供了许多比AWT更好的屏幕显示元素。并且它们用纯Java写成,所以也和Java一样可以跨平台运行,这一点也不想AWT。它们是JFC的一部分。它们支持可变换的面板和主题(各种操作系统默认的特有主题),然而不是真的使用原生平台提供的设备,而是仅仅在表面上模仿他们[12]。这意味着可以在任何的平台上使用Java支持的任意面板。轻量级的组件的缺点则是执行速度较慢,优点是可以在所有平台是采用统一的行为[13]。
2.3机器学习简介
人类一直试图让机器具有智能,也就是人工智能(Artificial Intelligence)。二十世纪五十年代到七十年代初,人工智能研究处于“推理期”,那时人们以为只要赋予机器逻辑推理能力,机器就具有智能,当时的AI程序能够证明一些著名的数学定理,但由于机器缺乏知识,远不能实现真正的智能。因此七十年代,人工智能发展进入“知识期”,即将人类的知识总结出来教给机器,使机器获得智能。在这一时期,大量的专家系统问世,在很多领域取得大量成果,但由于人类知识量巨大,故出现“知识工程瓶颈”。
无论是“推理期”还是“知识期”,机器都是按照人类设定的规则运作,永远无法超越创造者,其次人力成本太高。于是,一些学者就想到,如果机器能够自我学习问题不就迎刃而解了吗!机器学习(Machine Learning)方法应运而生,人工智能进入“机器学习时期”。“机器学习时期”也分三个阶段,八十年代,连接主义比较流行,代表工作有感知机(Perceptron)和神经网络(Neural Network)。九十年代,统计学期方法开始占据主流舞台,代表性方法有支持向量机(Support Vector Machine),进入21世纪,深度神经网络被提出,连接主义卷土重来,随着数据量和计算能力的不断提升,以深度学习(Deep Learning)为基础的诸多AI应用逐渐成熟。整体来说,人工智能是追求目标,机器学习是实现手段,深度学习是其中一种方法[14]。
三、系统总体设计
3.1需求分析
本系统目标是将给定的数据集分类,对于给定的邮件数据集需要实现垃圾邮件过滤。根据参考国内外成熟的垃圾邮件过滤模式,根据需求将系统划分为几个主要模块:数据预处理模块、特征提取模块、模型获取模块、模型应用模块。
目前垃圾邮件过滤系统模型如下图3-1所示:
图3-1邮件过滤系统模型
系统数据流图如下图3-2所示:
图3-2邮件过滤系统数据流图
3.1.1数据预处理模块
在获取邮件样本之后,会对邮件做一个预处理,因为一封邮件中,它里面的内容并不都是我所需要的,所以需要先将邮件进行分词处理,并将里面的停用词过滤掉,随后对分出来的词进行词频统计。邮件过滤系统中的数据预
处理UML图如下图3-3所示:
图3-3数据预处理UML图
3.2朴素贝叶斯算法
使用朴素贝叶斯来进行垃圾邮件过滤主要是因为其模型发展于古典数学理论,有稳定的分类效率,其次其对小规模数据表现很好,能够处理多分类任务,适合增量式训练,尤其是数据量超出内存时,可以一批一批的去训练,最后,它对缺失数据不敏感,常用于文本分类。
P(A)称为“先验概率”(Prior probability),即在B事件发生之前,我们对A事件概率的一个判断。
P(B)称为“后验概率”(Posterior probability),即在B事件发生后,我们对A事件概率的重新评估。
P(B|A)/P(B)称为“可能性函数”(Likely hood),这是一个调整因子,使得预估概率更接近真实概率。
所以条件概率可以理解为:后验概率=先验概率*调整因子。
如果“可能性函数”>1,意味着“先验概率”被增强,事件A的发生的可能性变大;
如果“可能性函数”=1,意味着B事件无助于判断事件A的可能性;
如果“可能性函数”<1,意味着“先验概率”被削弱,事件A的发生的可能性变小。
贝叶斯决策论(Bayesian decision theory)是概率框架下实施决策的基本方法。对分类任务来说,在所有相关
概率都已知的情况下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优标记。
朴素贝叶斯分类是贝叶斯分类中较简单的一种。其分类原理就是利用贝叶斯公式根据某特征的先验概率计算其
后验概率,然后选择具有最大后验概率的类作为该特征所属的类。之所以称之为“朴素”,是因为贝叶斯分类只做
最原始、最简单的假设:所有的特征之间是独立统计的。
朴素贝叶斯算法流程图如图3-7所示
图3-7朴素贝叶斯算法流程图
3.3TFIDF算法
算法原理:TF(Term Frequency,缩写为TF),指的是词频,即一个词在文中出现的次数,统计出来就是词频TF。很显然,当一个词在文章中出现了很多次,那这个词一定很重要,或者这个词可能是文章的关键词。但是如果只是单纯的提取出词频,那么词频最高的肯定是‘的’这种词,很显然这样的词对于分析和统计没什么帮助,反而会干扰统计,所以应该把这些没用的字和词去掉。去掉后对于剩下的词,在多个词出现频率都很高的情况下,需要对这些词进行排序,对于一篇文章来说如果一个词比较冷门或者是某些术语,那么这个词很有可能是该文章的关键词。
用统计学语言来表达,就是在词频的基础上,要对每一个词分配一个“重要性”权重。最常见的词例如:“的”、“是”、“在”给予最小的权重,较常见的词例如:“发展”、“成绩”等给予较小的权重,而对于一下不常出现的词或是术语例如:“阴霾”、“数据库”等要给与较大的权重。这个权重叫做逆文档率(Inverse Document Frequency,缩写为IDF),也就是说它的大小与一个词的常见程度成反比。当知道词频(TF)和逆文档率(IDF)后,将这两个值相乘,就得到了一个词的TF-IDF值。一个词对于一篇文章越重要,那么它的TF-IDF越大。所以TF-IDF最大的词就是文章的关键词。
3.4数据库分析
垃圾邮件过滤系统的E-R图如下图3-8所示:
图3-8垃圾邮件过滤系统系统E-R图
、
四、系统设计
4.1系统设计
这里描述了整个系统的整体设计。
4.1.1系统结构
邮件过滤系统的整体系统结构图如下图4-1所示:
图4-1系统结构图
垃圾邮件过滤系统的流程图如下图4-2所示:
图4-2流程图
邮件数据的预处理模块:
系统对邮件数据集中的所有文件进行统一地邮件内容解析操作。通过这样的方式来获取邮件的具体内容。再通过进行“去掉非中文字符”、“中文分词”、“去掉停用词”等操作。这样来得到每一封邮件的所有的词汇,然后系统将得到的词组信息来作为关键字来进行统计整理。最后就可以得到每一封邮件的所有的特征数据,也就是:“关键词”和“词频”。
特征数据的选取模块:
通过训练集得到的邮件数据的特征数据,来进行计算并改进的在TFIDF算法中的“TF”、“频率差”、“IDF”、“TFIDF权值”、“权值差”;进一步再通过表格来对关键字按照权值差来降序排序。然后系统通过选择指定的特征数目以及进行排序后的一些关键字,将其作为特征词来进行应用和使用。同时,此模块还可以将权值差(分类效果)较小的词组加入到停用词词典里面去。系统也可以将之前已经移动到停用词词典内特征词来进行“删除”操作。
模型获取模块:
整个系统的模型获取环节提供了两种特征词出现次数的计算方式:
1.按照包含有特征词的文件的具体的数量来计算结果。
2.系统按照特征词在文件里面的出现的次数与数量来进行的计算。
利用M-估计值,利用贝叶斯算法公式来进行和计算出特征词在每一个类别里面出现的条件概率。我将此概率来作为模型数据模型。首先是系统也会对具体的测试集的数据做一次预处理,然后将会获取到每个词的词频数量,同时利用贝叶斯算法来进行判断在测试数据集里面的每一封邮件的具体类型。再使用文本分类的标准里面的“正确率”、“精确率”、“召回率”、F值的公式计算数值,进而得到了对模型分类的性能的测评;
模型应用模块:
在系统模型应用环节,系统利用模型数据,以及朴素贝叶斯算法,来达到对未知类型的邮件进行类型判别的目的。如果判定是垃圾邮件,就将该邮件移动到指定的文件夹里面。如果判定他不是垃圾邮件,则不作任何操作。之后还可以对已经判定为垃圾邮件的邮件进行查看,对其进行“删除”或者“还原”操作(还原可以将邮件复原到之前的位置)。在进行实际的模型应用时,可以采取将模型数据转变成相对应的规则,然后再将规则部署到设置在“SMTP”过滤器上。再利用它的过滤机制来进行垃圾邮件的过滤。进而实现邮件服务器端的过滤操作。
五、系统实现
5.1停用词典选择
在使用系统前需要加入停用词典,停用词典是网上常用的中文停用词典。词典选择界面如图5-1所示:
图5-1停用词典选择
5.2数据预处理模块
图片中展示的是在数据获取的模块过程当中,被抽样的数据集中的邮件的内容和被划分后的内容,还有就是文件的特征数据。数据预处理界面如下图5-2所示:
图5-2数据预处理界面
5.3特征提取模块
展示的是在特征获取模块过程中,通过训练集的特征数据来获取改进后的算法(TFIDF算法)的相关数据,同时显示所选数据集以及那些被停用的关键字。特征提取过程如下图5-3所示:
图5-3特征提取过程
六、 目录
目 录
摘要I
AbstractII
基于机器学习的垃圾邮件过滤I
Machine learning email filtering systemII
目 录III
第1章 绪论1
1.1 课题研究的背景1
1.2 问题的提出及研究的意义1
1.3 国内外研究现状分析2
1.4 论文研究的主要内容3
第2章 开发工具及相关技术概述4
2.1 开发工具介绍4
2.2 相关知识概述4
2.3 机器学习简介5
2.4 数据集简介6
2.5 本章小结6
第3章 系统总体设计7
3.1 需求分析7
3.1.1 数据预处理模块8
3.1.2 特征词提取模块10
3.1.3 模型获取模块12
3.1.4 模型应用模块13
3.2 朴素贝叶斯算法15
3.3 TFIDF算法17
3.4 数据库分析18
3.5 本章小结18
第4章 系统设计19
4.1 系统设计19
4.1.1 系统结构19
4.1.2 功能需求与程序的关系21
4.2 系统模块设计22
4.2.1 数据预处理模块22
4.2.2 特征提取模块23
4.2.3 模型获取模块24
4.2.4 模型应用模块24
4.3 数据库设计25
4.3.1 数据表设计25
4.4 本章小结30
第5章 系统实现31
5.1 停用词典选择31
5.2 数据预处理模块31
5.3 特征提取模块32
5.4 模型获取模块32
5.5 模型应用模块34
5.6 本章小结34
第6章 系统测试35
6.1 系统测试目的35
6.2 系统测试用例35
6.2.1 训练集数据获取详细说明35
6.2.2 特征数据获取详细说明36
6.2.3 模型数据获取详细说明37
6.2.4 模型性能评估详细说明38
6.2.5 模型应用评估详细说明39
6.3 本章小结41
结论42
致谢43
参考文献44
附录A46
附录B50