版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于深度学习的垃圾邮件分类系统设计目录TOC\o"1-3"\h\u13791绪论 2289971.1研究背景及意义 2217221.2国内外研究现状 499481.3论文结构 590242垃圾邮件分类相关技术 7237542.1电子邮件的工作原理 7210492.1.1相关协议 7166892.1.2邮件收发过程 897732.1.3基于邮件工作过程的过滤技术 9170222.2深度学习技术 12104742.2.1人工神经网络 12112572.2.2卷积神经网络 1616712.2.3长短时记忆网络 19306232.3文本分类技术文 22241312.3.1数据预处理 2220502.3.2词向量方法 2239542.3.3垃圾邮件文本分类器的构造方法 25210032.4本章小结 2627423.1文本处理 27321973.2基于CNN的邮件分类方法 30128193.2.1网络的实现 30324233.2.2模型的训练保存及调用 31262783.2.3参数调试 32263483.3基于LSTM的邮件分类方法 3364003.3.1网络的实现 3458883.3.2模型的训练保存及调用 3465203.3.3参数调试 34125613.4实验结果分析 3540843.4.1数据集介绍 36148993.4.2评价标准 37324943.4.3实验结果 37240093.5本章小结 3950644垃圾邮件分类系统的设计与实现 40115314.1系统框架 40221924.2环境配置 40173774.2.1Anaconda的下载安装 4178384.2.2深度学习各种包的安装 41177704.2.3PyQt5的安装 4246524.3系统实现 43301834.4效果展示 4411204.4本章小结 4494505结论 4613472参考文献 47摘要随着互联网相关应用的快速发展,广告技术的进步和电子邮件的普及,越来越多的垃圾邮件充斥着我们的生活。如何高效的区分垃圾邮件的研究也逐渐成为了热门课题。论文主要分析总结当前常用的垃圾邮件的过滤方法,选择基于深度学习的分类算法作为本文研究的重点,基于邮件文本本身用深度学习的方法建立垃圾邮件过滤模型。主要工作包括:介绍传统邮件分类的方法及原理,包括邮件传输协议以及基于协议的各种分类方法,还有基于邮件内容分类的传统方法,包括基于规则和基于统计的方法。设计实现用于垃圾邮件文本分类的卷积神经网络,和长短期记忆网络,对参数进行优化以取得更好的分类效果。在邮件文本处理过程中,用词嵌入方法对文本进行向量化操作,以解决传统的one-hot编码数据稀疏、纬度高的问题。最后调用了训练好的CNN网络模型,实现了一个垃圾邮件分类系统,在系统页面内输入邮件文本,就可以判断这封邮件是垃圾邮件还是正常邮件。关键词:垃圾邮件过滤;文本分类;深度学习;词向量1绪论1.1研究背景及意义电子邮件于上世纪70年代诞生于美国,最先用于阿帕网的科研工作者相互交流科研成果,为当时的研究工作做出了巨大贡献,80年代中期,个人电脑的兴起使得电子邮件的普遍使用成为可能。时至今日,随着计算机和通信技术的发展进步,电子邮件的优势日益突显,凭借其廉价、实用、即时的特性,电子邮件稳坐互联网应用的第一把交椅。虽然现在QQ、微信等即时通信工具的产生在一定程度上冲击了电子邮件在人们日常交流中所占的地位,但电子邮件集电话的便利与信件永久性与一体的特点使其在正式交流的场合具有得天独厚的优势,是商务工作活动中必不可少的交流工具,极大的促进了社会经济的发展与进步。垃圾邮件由来已久,1978年5月3日,当时的互联网还被称作ARPANET,美国数字设备公司一个名叫GaryThuerk的销售代表为了推销新的产品,向393人发去了包含介绍公司即将举行的新品发布会的宣传邮件,这封邮件虽然成功引起了一些客户的注意力,但也为他带来了意想不到的牢狱之灾,这封邮件就是有记录以来最早的一封垃圾邮件。在第一封垃圾邮件出现的很多年以后,网络技术的发展,使得发件人每天可以毫不费力地进行邮件的批量发送,垃圾邮件才变得一发不可收拾。据相关部门统计,在2001年的时候垃圾邮件的数量仅仅只占电子邮件总量的7%,但是与之只相隔一年,到了2002年垃圾邮件的数量就达到电子邮件总量的29%,令人担忧的是这种爆发式的增长速度并没有得到及时有效的控制,以至于到2004年垃圾邮件所占比例已超过了总邮件数的51%。中国互联网协会发布的调查显示,有超过一半的电子邮箱用户因为垃圾邮件遭受了经济上的损失[1]。大量的垃圾邮件给我们带来了众多的危害,首先,从用户体验来说,当我们的邮箱中的大部分邮件都是垃圾邮件时,电子邮箱带给我们的将不再是便利而是烦恼了,这会很大程度上增加了人们对电子邮件的抵触心理。其次,从用户信息安全的角度来看,垃圾邮件有可能携带非法链接计算机病毒,成为危害用户信息安全的非法操做工具。从网络自身发展来看,垃圾邮件的泛滥,给网民带来了一定程度上的经济损失,肆意捏造的虚假信息不利于社会长治久安,同时也会打击网友对网络交流的信心,非常不利于信息技术的发展[2]。全球著名的信息安全软件供应商MessageLabs经长时间调查后发现:如今垃圾邮件的数量依然在不断的增长,由此给用户带来的经济损失也不断增加,据估计,对一个中等规模的企业来说,每年由于垃圾邮件导致的损失就将近1300万美元。根据2018年全球垃圾邮件数据来看,中国既是垃圾邮件危害最多的国家,也是垃圾邮件最大的生产地,占全球垃圾邮件来源的11.69%。去年2月5日,正值新冠疫情爆发之际,我国的网络安全应急响应平台发现:某南亚组织火上浇油,趁火打劫,竟然利用新冠疫情的爆发对我国的医疗机构进行定向的攻击。据事后报道,这些攻击者采用鱼叉式钓鱼的攻击方式,借助邮件投递含有恶意病毒的文档来实施攻击,利用我国人民对于疫情形势的关注,来诱导收件人点击下载文件,进而通过相关提示促使受害者执行宏命令。这些作为诱饵的文档名称,均与疫情密切相关,这种混淆视听行为不仅威胁了我国民众的个人信息安全还破坏了我国的疫情防控的顺利有序进行,具有很大的负面影响。垃圾邮件不仅给我国的网络环境带来了极大的污染严重影响了社会风气,还时刻威胁着用户的信安全,诱发了很多社会问题。关于垃圾邮件的范畴[3]界定业内说法不一,不同的组织机构都曾对其做过范畴划定。早在2000年8月,由中国电信指定的垃圾邮件处理办法,此办法适用于所有中国电信网络IP用户,办法规定凡是内容涉及了广告、刊物且不请自来,或者缺少明确的拒收方式和相关的地址信息,以及包含其他一切不符合互联网服务提供商所规定的安全策略或服务条款的邮件都会被认定为垃圾邮件。中国的第一个反垃圾邮件协调小组是在2002年成立的,这个协调小组是由包括中国互联网协会和新浪网在内的20多家中国网络集团共同发起的,小组成立后经讨论研究发布了目前仍使用的《中国互联网协会反垃圾邮件规范》。针对垃圾邮件的特点在这个规范进行了详细而系统的说明:邮件内容中包含各种形式的宣传内容包含但不限于广告、电子刊物或者包含色情反动等不良信息以及传播病毒包含恶意代码;收件人没有主接收意向的邮件;邮件无法拒收,或者缺少发件人身份、发件地址、邮件主题等关键信息,或者提供的信息是虚假的邮件。我国相关政府部门颁布的通信行业标准YD/T1311-2004也有与之相似的定义。国际上,也有很多权威组织对垃圾邮件的范畴做出了相关的说明。TREC即世界上著名的文本检索会议在2008年组织开展了一次大规模的垃圾邮件过滤任务评测(SpamTrack)活动,在这次评测活动中,垃圾邮件的判定标准是具有不请自来的(Unsolicited)、不受欢迎的(Unwanted)、不加选择(Indiscriminate)随意发送或者邮件的发送者与接收者双方没有直接关系等鲜明特点的邮件。著名的反垃圾邮件软件McAfee,在系统说明中明确指出如果一份邮件被发送给多个用户,同时这些接收到邮件的用户并没有提出请求接收,那么这封邮件就会被当作垃圾邮件,但在用户明确表示了希望接收这封邮件,或者能够肯定的确定这封邮件的来源是可信来源的时候,那么邮件则不会被认为是垃圾邮件。本课题打算从垃圾邮件的文本内容入手,用深度学习网络构建出垃圾邮件分类器,对垃圾邮件与正常邮件进行检测分类,以解决垃圾邮件泛滥的问题。1.2国内外研究现状对于垃圾邮件分类问题目前已经有很多人做了研究,并提出了一些很有意义的方法,早在上世纪,Maron等人[4]就已经提出了使用关键词来对文本进行分类的方法,他提出用标引词代替文本,根据标引词在类中出现的概率来确定类别。此后,机器学习、神经网络等也现后被用于解决垃圾邮件分类问题。2011年,曹根等人[5]将K-邻近法的局部加权原理与朴素贝叶斯算法相结合,用K-邻近算法对属性进行加权,通过训练找到最合适的加权值,减小了朴素贝叶斯算法条件独立假设条件对分类性能的影响,提高了分类准确性。2015年,陈翠平等人[6]利用深度置信网络从高维的原始特征中抽取低维度高度可区分的低维特征,最后用深度学习的神经网络来进行特征提取,最终完成网络分类任务,随后也有学者步将这种思想用于邮件文本的分类。2017年时WaelEtaiwi等人[7]通过改善预处理步骤,在其中对文本加入词性标记,并用n-gram统计词性的归属频率,提高了对文本特征提取的准确率。2019年,李晓东等人[8]提出可以通过增加隐藏父节点的方式改进TF-IDF算法来提高提取文本特征词的准确率,在利用TF-IDF算法提取出文本特征词后,根据各属性之间的依赖关系添加隐藏的父节点,来增强属性间的依赖。2020年,赵博文等人[9]提出了基于泊松分布的特征加权的朴素贝叶斯算法,他们通过泊松随机变量引入特征词权重,并定义信息增益率对文本特征词加权,消弱了朴素贝叶斯算法中完全独立假设带来的影响,提高了分类的准确性。此外,还有学者将图片处理中的注意力机制[10]用于了自然语言处理,注意力机制使用注意力向量来估计文本中的一个元素与其他元素的相关程度,能够获取文本序列更精准的信息,通常将注意力机制与神经网络相结合,来构造文本分类器。2020年,吴小晴[11]将卷积神经网络、循环神经网络以及注意力机制相结合,改善了神经网络训练过程中梯度下降算法容易收敛到局部最小而不是全局最小以及池化层丢失信息的问题,提高了分类的准确率。1.3论文结构本文实现了基于深度学习的垃圾邮件分类方法,全文共有五章,我的论文结构如下:第一章,介绍了垃圾邮件的发展趋势以及国内外深度学习方法在垃圾邮件分类方面的研究成果,说明了垃圾邮件分类的必要性以及深度学习方法的可行性。第二章,从电子邮件的工作原理出发,介绍了邮件协议以及收发过程,以及根据邮件的工作原理设计出的各种垃圾邮件过滤方法,重点介绍了深度学习的网络结构的算法原理和文本分类需要的各种技术。第三章利用深度学习方法实现了对垃圾邮件的文本分类,将经过数据清洗的文本文档转化为可以直接作为网络模型的输入的向量数据,然后分别构建了CNN和LSTM网络对邮件进行特征提取并分类,在一定范围内进行了网络参数的优化,最后调用保存的模型对这两种网络分类的准确性做测试。第四章,调用训练好的CNN模型,构建了一个简单的垃圾邮件分类系统,在界面内输入邮件文本的内容,点击开始检测按钮后就可以调用模型进行检测,并将检测结果输出在界面中。第五章,对现阶段的工作进行总结,并展望后续可以完善发展的方面。
2垃圾邮件分类相关技术20世纪70年代,邮件拦截技术就已经出现了,为了更好地理解与解决垃圾邮件的相关问题,我们有必要了解一些电子邮件的工作原理,从邮件的工作过程出发,这样才能更好地理解各种垃圾邮件过滤技术的原理,才能更好的提高分类的准确率。目前,根据文本进行分类已经成为一种广泛使用的垃圾邮件过滤方法。2.1电子邮件的工作原理电子邮件的工作过程遵循客户-服务器模式。每份电子邮件的发送都要涉及到发送方与接收方,发送方构成客户端,而接收方构成服务器,服务器含有众多用户的电子信箱。发送方通过邮件客户程序,将编辑好的电子邮件向邮局服务器发送。邮局服务器识别接收者的地址,并向管理该地址的邮件服务器发送消息。邮件服务器识将消息存放在接收者的电子信箱内,并告知接收者有新邮件到来。接收者通过邮件客户程序连接到服务器后,就会看到服务器的通知,进而打开自己的电子信箱来查收邮件。2.1.1相关协议电子邮件在发送与接收过程中都要遵循简单邮件传输协议(SimpleMailTransferProtocol,SMTP)、邮局协议(PostOfficeProtocol,POP)等协议[12],这些协议确保了电子邮件在各种不同系统之间的传输。其中,SMTP负责电子邮件的发送,而POP3则用于接收网络上的电子邮件。(1)SMTPSMTP是邮件传输过程中应用最广的协议。图2.1展示SMTP的简单模型,它确定了邮件的传输规则,用户使用它来帮助计算机找到发送或中转信件的下一个目的地址。如果收件和发件双方同时都在一个网络上,双方的就可以不通过邮件服务器,直接进行邮件的收发;但若收发双方没有在同一个网络上,就不可以直接进行通信,这个时候就需要借助一个或数个服务器帮助邮件进行转发。图2.1SMTP的模型示意图SMTP工作过程如图2.2所示:当发件方在邮件客户端提出发送邮件的申请后,客户端的STMP服务器会向接收方的SMTP服务器请求建立一个TCP连接,当连接成功建立后,才能够进行邮件的传递。图2.2STMP的通信过程(2)POPPOP的作用就像我们现实生活中的邮局一样,用来对邮件进行检索。POP协议不仅定义了电子邮件进行检索的方法,还使得电子邮件可以传输包括图片和音频在内的任何格式的文件,值得注意的是,在用户下载查看了一封邮件后POP协议会将其从服务器中删除。POP的各种版本不具有兼容性,我们现在使用最多的是POP3版本。2.1.2邮件收发过程邮件服务通过一组邮件服务器的程序对对邮件使用过程中所需要的硬件进行管理和存储。一旦这些邮件服务器停止运行,就无法继续进行邮件的收发了,这与个人电脑停止工作期间的收到的邮件会在重新开始工作后全部统一接收有所不同。我们通常会将SMTP协议和POP协议组合起来实现电子邮件在客户端-服务器模式下进行发送和检索。基本上,所有邮件传输工具都是符合SMTP标准的,依照SMTP标准,可以把邮件的收发简化为图2.3所示的过程[13]。发送方要发送一封邮件,需要经过邮件用户代理也就是我们通常使用的邮件客户端软件,来帮助用户读取写入文件,用户完成邮件后,用户代理将邮件发给邮件传输代理,邮件传输代理将决定邮件的传输路线,最终将邮件送到收件人的服务器,然后收件方的邮件传输代理会将普通邮件送到收件人的用户代理处,这是,收件人就可以通过自己的邮箱查看邮件了。图2.3邮件收发过程2.1.3基于邮件工作过程的过滤技术总体上来看应对垃圾邮件的方法有三类:第一类是通过完善法律法规对相关行为进行约束,这也是从根源上解决垃圾的有效途径;第二就是通过改进完善邮件的传输协议来进行垃圾邮件过滤,依据邮件传输协议可以在传播过程中对过滤掉垃圾邮件。第三则是根据信息内容来看是否属于垃圾邮件,就是通过对邮件文本进行分析进而进行分类。在法律层面上多国都颁布了相关的法律法规。2003年12月,美国颁布了CAN-SPAM法案,该法案确立了美国首个发送商业电子邮件的国家标准,根据该法案,联邦贸易委员会(FTC)有权力对每个单独的垃圾邮件处以最高16,000美元罚款。我国也早在2002年就由互联网协会制定颁布了正式的《反垃圾邮件规范》。下面介绍一些基于邮件工作模式的垃圾邮件过滤方法。从电子邮件协议以及邮件发送过程的角度来考虑,邮件传输协议的本身存在的缺陷对垃圾邮件的泛滥负有不可推卸的责任。所以如果能够合理的配置和有效地改进电子邮件传输协议,可以在一定程度上有效地防止垃圾邮件的肆意传播。许多中间转发链路存在于电子邮件的发送过程中,这给垃圾邮件的传播提供了很多可乘之机,所以可以考虑在邮件的中间转发链路上附加一些特定的垃圾邮件预防协议,来减少中间链路中垃圾邮件的传播风险,这样就达到了从电子邮件传递协议级别上有效地进行过滤垃圾邮件的目的。目前,基于SMTP协议的垃圾邮件过滤方法很多,包括关闭开放转发、反向域名解析以及SMTP交互行为检测技术[14]。此外,网络的IP层在网络正常工作中占有重要地位,通过研究垃圾邮件在IP层的工作过程,提出了在IP层上的垃圾邮件分类方法。这些方法主要有白名单(Whitelist)、黑名单(Blacklist)、实时黑名单(RealtimeBlackholeList,RBL)[15-16]三种。这些方法过滤成本低,邮件服务器中广泛应用了这些方法。(1)关闭开放转发处于开放转发(Open-Relay)状态时,邮件服务器会不加选择地转发所有的入站邮件,并不关心邮件的收发者的身份信息。关闭开放中继后,如果邮件服务器要向外部系统发送邮件,需要先进行身份验证,此时,邮件服务器只有确认邮件的收发双方都属于电子邮件服务器上的合法用户后才会为双方提供邮件转发服务,这种工作模式在很大程度上避免了垃圾邮件发送者通过此邮件服务器发送电子邮件。这大大减少了垃圾邮件的传播,但是我们要明白的是关闭开放转发是一种单向反垃圾邮件方法,因为它只是保证了邮件的使用者不主动发垃圾邮件,却不能减少用户接收垃圾邮件。(2)反向域名解析反向域名解析的方法原理是通过反向地址解析协议将发送方带有的IP地址反向解析出IP所在的域名,之后再利用域名系统对反向解析出的域名进行查询,看看查到的发送方的IP以及域名与其邮件中说明的IP及反向解析出的域名是否一致,如果不一致的话,就说明这封邮件存在假冒地址的问题,这是这封邮件将被系统判定为垃圾邮件,若一致的话,则说明这封邮件的发送地址是正常的,系统将会把它当成正常邮件来处理。反向域名解析方法通过反向解析发送发IP地址与DNS查询能够高效地过滤IP存在问题的垃圾邮件,但这种方法由于每次都要进行DNS查询,这个过程将需要很多的计算和网络资源,也会花费很多时间,因此反向域名解析虽然过滤效率高但并没有得到广泛的应用。(3)SMTP交互行为检测通过检测SMTP交互行为来进行垃圾邮件过滤的方法的原理与垃圾邮件服务器的工作机制的特点密切相关,随着垃圾邮件服务器工作方式的改变SMTP交互行为也会发生改变,相应的检测方法也会有所不同,因此,SMTP交互行为的检测方法一直在不断地更新和发展,创新出来了很多具体方法,其中目前最常用的具体方法有:第一种是用户自己在邮件系统中设定某个账号发送的邮件统统都拒收,这种方法被称为发送账号限制,与下面提到地黑名单有异曲同工之妙;还有一种是服务器自己通过统计账号发送邮件的退信数量,当某个账号退信率过高时,这个账号将被记为发送无效账号,这种方法也被成为发送无效账号统计;还有一些电子邮件的客户端为用户提供了自主设置电子邮箱工作模式的功能,此时用户可以通过使用特殊命令来设置自己邮箱的工作机制,以减少垃圾邮件的接收数量。(4)黑名单黑名单方法是指如果已经明确定一个电子邮件账号是专门发送垃圾邮件的,那么就把该账号的域名和IP地址都加入到一张黑名单中,这个黑名单会被部署到邮件系统的网关中,这样当网关收到来自黑名单上的IP地址发送的邮件时,它就不会接收邮件而是直接拒绝转发该邮件。这种方法听起来很有效,但是由于网关是可以由管理人员配置的,这就导致这种方法可能会受到人的主观情感的影响,事实上,黑名单方法存在很大的地域歧视问题,这也影响了正常的邮件传输行为,降低了邮件交流的有效性。我国目前很少采用黑名单方法来过滤垃圾邮件,这种方法在我国尚处于缓慢发展阶段,可以实现黑名单过滤方法的邮件服务器数量稀少,因此它的有效性也很难得到充分验证。(5)白名单白名单与我们常用的通讯录很相似,它相当于一个邮件的好友列表,在列表建立以后,用户就只自动接收在列表上的IP地址发送的邮件,其他所有不在列表上的IP地址所发送的邮件,要么会被直接拒收,要么会由邮件系统自动进行验证,验证通过后再进行接收。但是由于验证过程是通过邮件系统像发送方的邮箱双方之间发送验证邮件来实现的,这样就会产生很多额外的垃圾邮件。因此,这种方法虽然减少了邮件用户接收到的垃圾邮件数量,但却会增加网络中垃圾邮件的数量,不能有效地遏制垃圾邮件的产生,也会造成网络资源的严重浪费。(6)实时黑名单从名称上就可以看出实时黑名单方法是对黑名单方法的优化和扩展,上文已经提到黑名单本质上就是一个可以查询的电子邮件用户的IP地址列表。实时黑名单相比黑名单就是多了实时两个字,这是一个动态的词汇,也就是说实时黑名单是一个随着时间而动态变化的黑名单,具有很强的时效性。邮件接收用户可以通过直接查询DNS来判断发送邮件的IP地址,是否包含在实时黑名单里,这也决定了这封邮件是否能够顺利地被用户接收。一般情况下,由权威或公益机构来提供实时黑名单的维护服务,例如,我国具有实时黑名单功能的邮件服务器RBL服务器的维护工作就是由国内权威的反垃圾机构,中国反垃圾邮件联盟进行的。2.2深度学习技术2006年G.E.Hinton等人[17]提出了深度学习的概念,深度学习是一个通过特定的训练方法对训练样本数据进行训练,最后得到一个多层网络的机器学习过程。传统的神经网络网络由于网络中的权值是随机的进行初始化的,所以通常会在短时间内就会收敛到局部的最小值,针对这个问题,Hinton创造性地提出了先采用无监督预训练的方法提前对网络的权值的初始值进行优化,然后再利用微调的方法对权值进行调整优化。由此深度学习的大幕被缓缓拉来,深度学习正式登上历史舞台,开始在各个领域崭露头角。近年,深度学习在语音、图像的处理方面取得了巨大的成果,这在很大程度上,促进了深度学习的方法在自然语言处理的任务中的应用,2011年Collobert[18]用卷积神经网络来完成自然语言处理的任务,获得了很好的实验效果,在这之后,深度学习在自然语言处理的领域实现了多种功能的应用,比如文本分类、文本聚类、摘要实体生成、智能过滤、情感分析、知识图谱等。大多数的深度学习算法都是基于人工神经网络的概念。2.2.1人工神经网络人工神经网络[19]是深度学习的基础,人工神经网络是一种由生物学启发的典范技术,人工神经网络的目的就是想让机器获得像哺乳动物的大脑一样的能够自主学习的能力。生物学上的研究表明哺乳动物大脑中的神经元在受到电流刺激时,会使神经元处于激活状态,产生兴奋,这种兴奋会在神经元之间进行传递,直至大脑控制人体对初始刺激做出反应。与之类似的,人工神经网络背后的基本原理是成为人工神经元或感知器的基本元素的集合,它们采用多个二元输入x1,x2,…,xn,及其对应的权值w1,w2,…,wn,如图所示为一个神经元的样本。w2xw2x1yyw1w1xx2图2.4神经元样本对于一个神经元来说,每当输入加权和在考虑误差的情况下,超过激活电位时,就会执行一个表现为阶梯函数的“发射”指令。发射的神经元沿着信号传递到与其树突相连的其他神经元,同样,如果超过激活电位,其他神经元也会发射,从而产生级联效应,如图所示。图2.5神经元激活运算示意激活函数作用于信号传播的过程中,将神经元的输入映射到输出端,也被称为传递函数,激活函数的引入为神经网络增加了非线性因素,使得神经网络可以任意逼近任何非线性函数。神经网络中常用的激活函数包括:Sigmoid函数、Tanh函数以及ReLU函数等[20]。Sigmoid函数通常作用于隐藏层神经元输出,取值范围为(0,1),可以将一个实数映射到(0,1)的区间,可以用于做二分类。Sigmoid函数图像如图2.6所示。sigmoidx=图2.6Sigmoid函数图像Tanh函数也是一种常用的激活函数,也称其为正切函数,取值范围为[-1,1]。在特征相差明显时使用tanh函数效果会更好。Tanh函数的图像如图2.7所示。Tanhx=图3.15Tanh函数图像ReLu函数也被称为线性整流函数,当输入值大于0时被激活,激活状态下输出值呈线性增长,且斜率为1。当输入值小于等于0时,输出值恒为0。函数图像如图2.8所示。ReLux=图2.8ReLU函数图像上面提到的激活函数都很容易微分化,这使得网络可以通过梯度下降的法进行训练。与哺乳动物的大脑一样,人工神经网络中,单个神经元按层组织,自层内连接到下一层,它的结构如图2.9所示。隐藏层隐藏层输出层输入层输出层输入层图2.9神经网络结构图深度学习中的“深”是指网络结构中的深度,现在我们常用的深度学习网络包括卷积神经网络和循环神经网络以及它们的各种变体。2.2.2卷积神经网络卷积网络,也称为卷积神经网络(ConvolutionalNeuralNetworks,CNN)[21],旨在处理具有相似网格结构的数据。例如,时间序列数据(可以看作是沿着时间轴通过常规采样形成的一维网格)和图像数据(可以看作是二维像素网格)。卷积网络在许多应用领域都可以很好地工作,例如图像分类,对象识别和图像样式转换。CNN的设计灵感来自视觉皮层的工作过程。Hubel和Wiesel[22]于1962年进行的一项实验详细解释了视觉皮层中存在的一小部分细胞对视觉区域的某些部分敏感,并证明了大脑的某些部分仅在特定方向上存在。当神经细胞的边缘实际存在时,神经细胞将对触发行为的单个神经细胞作出反应。研究表明,有些神经元仅在垂直边缘受到刺激,而另一些则因水平或对角边缘的存在而受到刺激。此外,Hubel和Wisesl还观察到所有这些神经元必须协同工作并排列成圆柱状结构才能产生视觉感知。这样,系统的特定组件对应于特定任务(视觉皮层的神经细胞寻找特定特征)的想法也适用于机器,这是CNN的基础。CNN将通过输入层传输的输入数据发送到完全连接的层进行计算,并将其转换为输出层给定的一组分数。CNN的基础结构如图2.10所示。图2.10CNN基础结构图卷积网络的输入层负责加载和存储原始输入数据,以便在网络中处理,输入数据制定了宽度、高度和通道数量。卷积层是卷积神经网络的核心,负责提取输入数据的特征,尽管卷积层是以卷积运算(convolution)命名的,在卷积层中使用的计算方法在数学上更常被称为互相关运算。卷积层参数包括卷积核大小、步长和填充,三者共同决定了卷积层输出特征的尺寸,是卷积神经网络的超参数。(1)卷积运算我们可以将卷积运算分成三部分,如图2.11。图2.11卷积运算实例输入可以是训练数据,也可以是上层网络的输出;卷积核是整个卷积网络的主要参数;输出是计算的结果。在卷积运算中,卷积内核从输入的左上角开始,按从左到右,从上到下的顺序使用输入进行计算。计算方法如下:将输入数组的子数组的元素与卷积核的元素相应地相乘,获得总和即为输出数组的相应位置的结果。例如,图2.11中的37是通过将浅黄色表中的数据与卷积核中的数据进行相乘而得到的,即:37=1*1+2*2+4*3+5*4。然后输入的卷积窗口向右滑动,新的窗口内的数据会按同样的方法与卷积核进行运算,图2.11输出中的数据的计算公式分别为:47=2*1+3*2+5*3+6*4;67=4*1+5*2+7*3+8*4;77=5*1+6*2+8*3+9*4。(2)填充上面提到的卷积运算示例有一个特点:卷积运算后,输出的高度和宽度将小于输入的高度。可以想象,随着卷积层数的增加和输出的进一步减少,输出很快将只剩下1∗1个数组,没有办法继续进行计算,因此,为了方便起见,提出了一种填充方法网络的进一步深化实际上,填充的原因有两个:不进行填充会导致数据规模逐渐缩小,从而使网络深度无法达到非常深;不填充将导致边缘和角落的数据学习不足,对于图2.11来说输入数组的四个顶点:1、3、7、9在执行的四个卷积运算中仅计算一次,这意味着卷积对边缘数据的学习是不够的,而当我们进行填充后卷积网络就可以多次学习边缘的数据,这样才对数据的学习才够全面。图2.12是对图2.11中的数据进行填充后的情况。填充的方法就是在输入的高和宽两侧分别填充了0元素,再进行卷积运算。池化层可以非常有效地缩小矩阵的尺寸(主要减少矩阵的长和宽,一般不会减少矩阵深度),从而减少最后全连接层中的参数。使用池化层既可以加快计算速度也有防止过拟合问题的作用。与卷积层类似,池化层的前向传播过程也是通过一个类似滑动窗口的结构完成的。不过池化层窗口中的计算不是节点的加权和,而是采用更加简单的最大值或者平均值运算。使用最大值操作的池化层被称为最大池化层(maxpooling),这是使用最多的池化层结构。使用平均值操作的池化层被称为平均池化层(averagepooling)。图2.12卷积运算增加填充后的实例图2.13是一个最大池化层的实例。可以看出,汇聚层在保持某些特征的同时迅速减小了入口的尺寸。最大池化层是从输入矩阵的某个范围中选择最大元素以进行保留。平均池化层是对输入矩阵的一定范围内的数求平均值,然后保留;最小池化层转换层包括选择要保留的输入矩阵中一定范围内的最小元素。这里要注意的是,池化层将每个输入通道单独分组,最终得到的输出道通的数量与输入导通的数量是相同的。池化层共有三个通用参数:最大池化层,平均池化层和最小池化层。通常使用最大池层。池化层有两个主要参数,一个是池化层的形状,另一个是池化层的步幅。例如,图2.13中最大池化层的形状大小为2×2,步幅为2。图2.13最大池化层的实例经过多轮卷积层和池化层的处理后,在CNN的最后一般由1到2个全连接层来给出最后的分类结果。经过几轮卷积和池化操作,可以认为输入数据中的信息已经被抽象成了信息含量更高的特征。我们可以将卷积和池化看成自动图像提取的过程,在特征提取完后,仍然需要使用全连接层来完成分类任务,一般情况下,全连接层的激活函数使用softmax。2.2.3长短时记忆网络长短时记忆网络(LongShort-TermMemory,LSTM)[23]是RNN的一个变种,它的出现解决了RNN网络中存在的长期依赖问题,如图2.14所示,原始RNN的隐藏层只有一个状态,即h,它对于短期的输入非常敏感,而LSTM网络中增加一个状态,即c,来保存长期的状态,新增状态c被称为单元状态。cchhhhLSTMRNNLSTMRNN图2.14RNN与LSTM将LSTM在某时刻t展开得到如图2.15所示的结构图,LSTM的输入有三个:当前时刻网络的输出值xt、上一时刻LSTM的输出值ht−1、以及上一时刻的单元状态ct−1;LSTM的输出有两个:当前时刻LSTM输出值ht、和当前时刻的单元状态xt。ct+1ct-1ct-2ctcccct+1ct-1ct-2ctccchhhhhtht+1ht-1ht-2hhtht+1ht-1ht-2hxtxt+1xt-1xtxt+1xt-1图2.15t时刻LSTM结构展开图LSTM使用三个控制开关来控制长期状态c。三个开关的作用如图2.16所示,其中,第一个开关,负责控制继续保存长期状态c;第二个开关,负责控制把即时状态输入到长期状态c;第三个开关,负责控制是否把长期状态c作为当前的LSTM的输出。htctct-1htctct-1上一时刻的长期状态上一时刻的长期状态当前时刻的输出当前时刻的输出c'tc't当前时刻的即时状态当前时刻的即时状态图2.16长期状态c的控制开关开关的算法实现用到了门的概念,门实际上就是一层全连接层,它的输入是一个向量,输出是一个0到1之间的实数向量。假设W是门的权重向量,b是偏置项,那么门可以表示为:gx=σWx+b门的使用,就是用门的输出向量按元素乘以我们需要控制的那个向量。因为门的输出是0到1之间的实数向量,那么,当门输出为0时,任何向量与之相乘都会得到0向量,这就相当于啥都不能通过;输出为1时,任何向量与之相乘都不会有任何改变,这就相当于啥都可以通过。因为σ(也就是sigmoid函数)的值域是(0,1),所以门的状态都是半开半闭的。图2.17显示了LSTM结构中的各个门。图2.17LSTM的核心结构LSTM用两个门来控制长期状态c的内容,一个是遗忘门(forgetgate),它决定了上一时刻的长期状态ct−1有多少保留到当前时刻ct,遗忘门ft按照公式(2.5)进行运算;另一个是输入门(inputgate),它决定了当前时刻网络的输入xt有多少保存到当前状态ct,输出门it由公式(2.6)运算得到。ft=σWfit=σWi⋅当前输入的单元状态ctct'=tanhWc⋅当前时刻的长期状态ct,由公式(2.8)计算得到,它是由上一时刻的长期状态ct−1按元素乘以遗忘门ft,再用当前输入的单元状态ct'ct=ft∘LSTM用输出门(outputgate)来控制单元状态ct有多少输出到LSTM的当前输出值ht,输出门由公式(2.9)计算得到,最终的输出ht由公式(2.ot=σWo⋅ht−1ht=ot∘tanhc2.3文本分类技术文本分类[24]任务的通常情况下的目标就是找到一个能够准确地实现文本类型的映射函数。文本表示和映射函数是文本分类的核心问题。文本分类总的过程如图2.18所示。图2.18文本分类的过程2.3.1数据预处理数据的预处理[24]就是将原始语料格式化,便于后续的统一处理。数据的预处理包括数据清洗、分词以及数据转换。(1)数据清洗数据清清洗[24]的目的是排除非关键信息,尽可能减少非关键信息对构建分类器模型的影响,在文本分类任务中数据清洗的常用的手段是把语料中的不需要的文本部分删除掉,包括标题,摘要,标点符号等。除此之外,我们还需要将文本的编码方式转换为可识别的统一的编码方式,对于中文文本来说,通常采用utf-8的方式进行编码。(2)分词分词[24]就是按照一定规则将文本切分成词组,对于中文文本来说,分词是文本处理的基础,分词的准确性影响着计算机识别语句含义的效果。中文分词的研究工作,上世纪80年代就已经开始了,先后有人提出了正向最大匹配法、逆向最大匹配法、双向扫描匹配法、逐词遍历法等分词方法。整体上来说,分词方法可以分为基于规则和词表的方法以及基于统计的方法两大类。2.3.2词向量方法完成对数据的预处理操作后,我们需要将文本转换成为分类器模型可以识别的数值表示,借助向量空间用空间上的相似度表示语义的相似度,将文本内容的处理转化为了向量空间中的向量运算。自然语言处理中,词向量表示方法有one-hot编码、词嵌入等方法[25-26]。(1)one-hot编码one-hot是一种基于词袋模型的稀疏编码形式,它将文本中含有的N个词用长度为N的词典进行表示。one-hot编码得到的词向量只有一个维度的值为1,其他值均为0,编码形式如图2.19所示。图2.19one-hot编码示例(2)词嵌入方法词嵌入(wordembeding)是基于深度学习的词向量模型[26],它通过隐藏层将one-hot编码映射到维度较低的向量空间,利用每个单词在文本中的语义特征进行编码,这样词向量在特征空间上的距离也就代表了词义之间的相似性。目前word2vec[26]是比较主流的一种词嵌入方法,后续的实验我也会采用这种方法对文本进行向量化表示。Word2vec有两种计算方法:CBOW(ContinuousBagofWords,CBOW)和Skip-gram[27]。如图2.20所示,对于t处的词W(t),CBOW是从上下文单词来推测目标单词。公式(2.11)计算了目标词的概率分布,其中,U为权值矩阵,Softmax是激活函数。公式(2.12)为CBOW的交叉熵损失函数。(2.11)(2.11)J=1Tt=1T输出投影层输入输出投影层输入W(t-2)W(t-2)SUMW(t-1SUMW(t-1)W(t)W(t)W(t+1)W(t+1)W(t+W(t+2)图2.20CBOW模型Skip-gram模型与CBOW模型恰好相反,它通过一个背景词来预测周围的词,其结构如图2.21。Skip-gram模型在输入的时候给出了背景词的向量,按照公式(2.13),最大化背景词的输出概率就可以得到周围词的概率分布,其中n为训练窗口的大小。预测词的概率分布通过公式(2.14)运算得到,其中W(t)是背景词,W(t+j)是目标词,W是词典中单词总数。1Tt=1T−n≤j≤nlogPPWt+jWt=exp(W(t-2)输出投影层输入W(t-2)输出投影层输入W(t-1)SUMW(t-1)SUMW(t)W(t)W(t+1)W(t+1)W(t+2)W(t+2)图2.21Skip-gram模型2.3.3垃圾邮件文本分类器的构造方法基于文本对垃圾邮件进行分类,先后出现了基于规则和基于统计的方法,我们常见的分类方法有:决策树、贝叶斯、K最近邻、支持向量机等[28-29]。(1)决策树决策树(DecisionTree)方法首先采用自到下的递归方法构造出一颗二叉树也叫做决策树,然后利用信息增益的大小作为标准来选择树中各个节点的测试属性。决策树生成后,我们可以直接从决策树中提取出相应的规则,通常情况下,每条从根到叶的路径都对应了一条规则。决策树方法具有白盒的优点,它的决策过程可以看作是完全透明的,能够对各个结论做出明确的解释。(2)贝叶斯贝叶斯(Bayes)方法是利用文本中的词汇与文本所属类别的联合概率的数值来估计这个文档属于某个类别的概率,这种估计方法是基于先验概率和类别条件概率理论的。贝叶斯方法正确工作的前提条件是文档中的各个词是相互独立的,而实际上,这种条件独立的假设是难以成立的,因此这种分类方法的效果永远不可能实现理论上的最优值。正因于此,现在的一些研究正在尝试通过不完全朴素贝叶斯方法来对文本进行分类,这种方法适当放宽了朴素贝叶斯方法的独立条件,适当地考虑了属性间合理的语义关联,这种对于语义关联性的考虑使得模型更加符合实际的情景,因此在垃圾邮件分类问题上取得了更好的表现。(3)K最近邻K最近邻方法(K-NearestNeighbor,KNN)思想非常简单直观易于理解。它的核心思想可以理解成物以类聚人以群分。即相似的人和物会相聚在一起。KNN算法属于监督学习,监督学习所需要做的是在给定一部分带有特征和标签两部分数据的情况下,根据这一部分的特征和数据建立一个模型,之后当我们输入新的特征时,这个模型可以返回这种特征所应该贴上的标签。KNN算法判定待测数据属于哪个类别的依据就是根据离它最近的K个点的类别,待预测数据就属于那个点最多的类别。这很深刻的体现了“近朱者赤,近墨者黑”的思想。KNN算法在测试阶段是看离待测点最近的K个点的类别比分,所以不管训练数据中有多少种类别,都可以通过类别比分来确定待测点类别。当然会有类别比分打平的情况,这种情况下可以看待测点离哪个类别最近,选最近的类别作为待测点的预测类别。当然KNN算法的缺点也很明显,就是当训练集数据量比较大时,预测过程的效率很低。这是因为KNN算法在预测过程中需要计算待测点与训练集中所有点的距离并排序。可想而知,当数据量比较大的时候,效率会奇低,对于时间敏感的业务不太适合。(4)支持向量机方法支持向量机方法(SupportVectorMachine,SVM),兴起于20世纪90年代,它的理论基础包括构风险最小化原理和Vapnik-chervenkis维数理论,理论基础非常的扎实。在样本信息有限的情况下,SVM可以在兼顾平均模型复杂度和学习能力,力争以最小的成本获得最佳的学习能力。SVM首先通过训练来找到分类能力较强的支持向量,然后利用这些向量构造出一个超平面。不论是要将训练集中的数据进行分离,还是要将分类之间的间隔进行最大化,都可以利用这个超平面来进行,SVM方法也因此被叫做最大边缘(MaximumMargin)方法。2.4本章小结本章从电子邮件的工作原理出发,介绍了邮件协议以及收发过程,以及根据邮件的工作原理设计出的各种垃圾邮件过滤方法。之后重点介绍了深度学习的网络结构的算法原理和文本分类需要的各种技术。文本数据的预处理主要包括数据清洗和分词,经过预处理的文本还需要通过词向量方法转化为可以输入模型的数据,在下一章中将会用本章介绍的word2vec模型实现词向量转换,构造出训练以及测试数据集。
3基于深度学习的垃圾邮件分类方法的实现在上一章中已经介绍了深度学习中常用的CNN网络和LSTM网络的原理和特点,本章将会分别利用这两种网络来构建垃圾邮件分类器模型。使用深度学习方法对垃圾邮件进行分类的一般流程如图3.1所示。训练并保存网络模型构建神经网络(CNN、LSTM)训练并保存网络模型构建神经网络(CNN、LSTM)文本处理邮件文本调用保存的调用保存的模型完成分类图3.1基于深度学习的垃圾邮件分类过程3.1文本处理对于中文邮件文本,首先在按行读入(数据每一行为一封邮件),同时进行数据清洗,去掉其他非中文字符及标点符号等,经数据清洗后的文本格式如图3.3,文本中只保存了中文字符。图3.2清洗后的文本格式然后进行分词,并将分词后的结果保存在列表中,采用jieba分词工具对清洗后的文本进行分词,jieba分词有三种不同的分词模式:精确模式、全模式和搜索引擎模式,采用不同的模式分词效果也不同,以“今天天气真好”为例,采用不同的分词模式结果如图3.3所示。对清洗后的邮件文本采取精确分词模式来进行分词,分词后的结果如图3.4所示。图3.3不同模式下jieba分词结果图3.4分词后的文本格式接着之后就是构造完整的数据集以及标签,构造标签时我们分别访问垃圾邮件和正常邮件的文本,将其中的邮件文本取出,每封邮件作为列表的一个元素,会分别得到一个垃圾邮件的列表和一个正常邮件的列表,分别创建对应的标签列表,然后将正常邮件列表与垃圾邮件列表连接起来,两个标签列表按同样方式连接,最终返回两个数据列表,一个是数据集词汇列表x_text,以一封正常邮件和一封垃圾邮件为例,得到的x_text如图3.5所示,另一个是标签列表y,如图3.6所示,其中[0,1]标签代表正常邮件,[1,0]标签代表垃圾邮件。图3.5x_text的文本格式图3.6标签列表由于每封邮件的词汇数量是不同的,我们还需要对得到的样本用‘UNK’来填充,进行对齐操作,将其统一成固定的长度。当我们选定固定长度为50后,对齐操作完成后,得到的数据格式如图3.7所示。图3.7对齐后的文本格式最后利用word2vec模型进行样本的词向量表示,将每个样本用对应词的词向量堆叠的形式代替。这里我们指定词向量的训练维度为50,词向量化的结果如图3.8所示,每一个词由一个50维的向量表示。图3.8词向量的数据格式3.2基于CNN的邮件分类方法提起CNN我们第一时间想到的可能是图像处理,不同于图像问题输入为像素,文本分类的输入是文本构成的矩阵,矩阵的每一行就是一个词或字符。TextCNN[30]是利用卷积神经网络对文本进行分类的算法,一般结构如图3.12所示,可以分为输入层,卷积层、池化层和全连接层。接下来,我们通过构建一个TextCNN来对邮件文本进行特征提取与分类。图3.9TextCNN的网络结构3.2.1网络的实现用于垃圾邮件文本分类的CNN网络的输入层输入的是词向量,文本通过数据清洗、分词、对齐等操作后,再调用word2vec模型即可将文本转化为词向量,作为输入的词向量的形状为(n,100,50)。接下来是3个卷积层,分别使用尺寸为3、4、5的窗口大小在嵌入矩阵上做卷积操作。然后是步幅为1的最大池化层。然后使用dropout层,对网络性能进行优化。最后为全连接层,使用softmax函数得到预测标签。图3.10为CNN网络的结构图。全连接层全连接层dropout层dropout层最大池化层最大池化层最大池化层最大池化层最大池化层最大池化层4×4卷积层5×5卷积层3×3卷积层4×4卷积层5×5卷积层3×3卷积层输入层输入层图3.10CNN网络结构图3.2.2模型的训练保存及调用模型的训练过程,就是调用定义好的CNN网络,并向网络中传递合适的超参数,以获得更好的分类效果,训练过程中不断地更新网络中的参数,tensorflow框架下进行训练时必须通过withtf.Graph().as_default()语句定义一张计算图,然后通过withsess.as_default()语句声明会话定义训练过程,传递训练参数。在tensorflow架构下保存模型就是保存训练时的计算图,以及网络中的权重矩阵和偏置,我们可以定义每训练1000次保存一次模型,每次保存,会生成3个文件:“.meta”文件保存了当前图结构,“.data”文件保存了当前参数名和值,“.index”文件保存了辅助索引信息,如图3.11所示,其中的checkpoint文件保存了最近一次保存的模型的信息,模型保存成功后就可以通过这三个文件来调用模型。调用CNN网络模型前也要对测试集文本数据进行预处理,将其转化为词向量的形式,调用模型时首先要通过tf.train.import_meta_graph('x.meta')语句加载保存的计算图即meta文件,然后通过saver.restore(sess,'x')语句加载保存的训练参数,之后直接将词向量化后的测试集数据传入模型即可进行测试。图3.11模型保存生成的文件3.2.3参数调试网络的参数,对网络的性能有很大的影响,通过参数调试,可以将网络调整到最好的状态,取得最佳的实验效果。超参数是使用网络进行训练之前,我们自己设定的参数,CNN中的超参数主要包括窗口大小以及dropout值等。下面会依次对学习率、迭代次数、窗口大小、droupout值进行调试。设置不同的学习率,迭代次数以及初始化方式,进行多轮训练,依次记录相应的分类准确率,可以得到如图3.12的结果。其中,lr表示LearningRate即学习率;te表示TrainingEpochs即训练迭代次数;z表示tf.zeros()即将变量初始化为0;t表示tf.truncated_normal()即将变量初始化为标准截断正态分布的随机数。通过观察可知,当学习率为1,迭代次数为50,并用truncated_normal做初始化,准确率最高。图3.12不同学习率、迭代次数及初始化方式的准确率对比由于中文中的一个词多是由2、3、4或者5个字组成的,所以我们在设置窗口大小时可以在这些值的附近进行选择,通过设置不同的窗口大小对模型进行训练,可以得到图3.13,观察可知,当我们把窗口大小设置为3、4、5时准确率最高。图3.13窗口大小对准确率的影响Dropout能够改善网络的性能,防止过拟合,提高网络模型的泛化能力。dropout的不同取值对网络的准确率也有影响,保持其他参数不变,只改变droupout值的大小,进行多次训练,可以得到dropout取值与准确率的变化关系,如图3.14所示,观察可知,当我们把dropout值设为0.5时准确率最高。图3.14dropout值对准确率的影响3.3基于LSTM的邮件分类方法LSTM网络在处理与序列分类有关问题上具有很大的优势,在情感分析领域取得了很好的效果,但LSTM网络比较复杂,通常会比其他模型慢。下面,将利用LSTM网络来对垃圾邮件进行分类。3.3.1网络的实现用于垃圾邮件分类的LSTM网络的网络,使用tensorflow自带的rnn模型,基本单元lstm_cell是通过tensorflow中LSTM网络的基本单元BasicLSTMCell的实例化来进行定义,需要指定embeddingsize、sequencelength以及dropout的值。还需要声明LSTM循环单元中各门的计算参数w矩阵与偏置量b,定义LSTM网络前向传播的计算逻辑,计算遗忘门、输入门、输出门的计算结果。分别定义一层前向传播的网络和反向传播网路。定义网络的损失函数和优化方法,损失函数使用的是交叉熵函数cross_entropy,优化方法使用的是Adagrad。整体的网络结构如图3.15所示。维度:256长度:文本长度维度:256长度:文本长度维度:300文本向量表示分词原始文本文本向量表示分词原始文本词向量表示词向量表示分类结果隐藏层隐藏层分类结果隐藏层隐藏层128维降为1维256维降为128维128维降为1维256维降为128维图3.15LSTM分类过程3.3.2模型的训练保存及调用LSTM网络的训练保存和调用与CNN相似,训练模型之前首先定义计算图,保存模型时要先实例化一个saver对象,定义好模型的保存频率,模型调用时,要先加载计算图,再加载保存的参数。3.3.3参数调试LSTM网络中的参数也有很多,其中对网络性能影响较大的有LSTM单元中的单元数量以及训练批次的大小,接下来对这两个参数进行调试。保持其他情况不变,改变单元数量分别进行训练,观察准确率的变化,得到了图3.16,由图可知,LSTM单元中的单元数对准确率的影响大致是:当单元数量较少时准确率随着单元数的增加而增大,但当单元数超过某一数量时,准确率随着单元数的增大而逐渐变低。从我们测试的几组单元数来看,当单元数为96时准确率最高,所以我们可以把单元数设为96。图3.16单元数对准确率的影响批次的大小会影响收敛速度,其他情况相同时,采用不同批次大小对网络进行训练,观察准确率的变化,可以得到图3.17,可以看到批次大小对准确率的影响并没有很大,且呈现出了一定的震荡性,在进行测试的几个数值里,当批次大小为20时准确率最高,可以把网络的批次大小设置成20。图3.17批次大小对准确率的影响3.4实验结果分析前面我分别构建了CNN网络模型和LSTM网络模型来对垃圾邮件文本进行分类,模型的训练过程均采用了同一个数据集,下面我们将会比较分析这两种网络模型的分类效果。3.4.1数据集介绍数据集来源于国际文本检索会议提供的公开垃圾邮件语料库trec06c,其中含有正常邮件21766份,垃圾邮件42854份,这些邮件均来自于真实邮件,保存了原有的格式和内容,如图3.18所示。图3.18trec06c中的文本形式trec06c语料库中包含三个文件夹,其中data里是数据文件,full里是index文件,说明了哪个路径的文件是什么类型,格式如图3.19所示。图3.19index文件内容按照index文件中的文件类型与路径的对应关系,我们可以把spam邮件和ham邮件的文本内容分别提取到两个文本文档中,并将一封邮件的内容存成一行,可以得到如图3.20所示的ham邮件文档和图3.21所示的spam邮件文档。任意选取取其中的5153封正常邮件以及5239封垃圾邮件作为训练数据,其中的十分之一会用于训练过程中的验证集,另取1149封正常正常邮件以及1074封垃圾邮件作为测试集,用于测试训练好的模型的性能。图3.20ham邮件文本内容图3.21spam邮件文本内容3.4.2评价标准使用网络的准确率作为评价标准,准确率是指正确分类的邮件数量占邮件总数的比例。它是模型工作是否有效性,预测结果是否可信的最直观的数据,也是评估一个模型是否可信的最可靠的依据。表3.1网络模型的分类情况实际是垃圾邮件数实际是正常邮件数被分类为垃圾邮件数AB被分类为正常邮件数CD如表3.1所示,此时,总邮件数N=A+B+C+D,则分类准确率accuracy=(A+D)/N,我们在网络训练过程中,模型的准确率也是这么算出来的。3.4.3实验结果用于垃圾邮件分类的CNN以及LSTM网络是在tensorflow框架下搭建,在训练过程中可以利用tensorflow自带的可视化工具tensorboard来观察网络模型的训练情况。图3.22和3.23分别是CNN和LSTM随着训练次数的增加,准确率的变化情况。图3.22CNN训练过程中的准确率变化准确率准确率图3.23LSTM训练过程中的准确率变化通过图3.22和3.23我们可以知道,当训练次数达到3000次时,模型基本上就达到了收敛,所以,可以考虑每训练500次保存一次模型,保存前3000次的训练模型,然后用测试集,分别测试模型分类的准确性。在测试集上调用保存好的模型,记录模型运行的准确性,可以的都表3.2所示的结果。从表3.2中,我们可以看到与LSTM网络比起来,CNN在垃圾邮件分类问题上表现得更好,准确率更高,随着训练轮次的增加CNN网络的最终准确率将会达到96.7%,而LSTM网络的准确率会达到93.1%。我认为LSTM的准确率不如CNN主要是:一方面,LSTM网络对处理有时序性的文本具有优势,而邮件文时序性并不明显,这种情况下,LSTM就不具有优势了;另一方面,CNN网络在卷积层使用了多个卷积核大小对文本进行特征提取,抓住了文本的多个不同的n-gram的特征,获取的信息更加全面,因此CNN使用起来,分类效果更好。表3.2网络模型的分类准确率训练次数CNN模型准确率LSTM模型准确率5000.9330.86110000.9510.88515000.9640.90420000.9670.91825000.9670.92530000.9670.9283.5本章小结本章利用深度学习方法实现了对垃圾邮件的文本分类,第一步工作是对文本进行预处理以及向量化表示,经过数据清洗、分词、贴标签、对齐等操作后调用gensim模块的word2vec模型对文本进行向量化表示,这一步之后,文本文档转化为了向量数据,可以直接作为网络模型的输入。接着分别构建了CNN和LSTM网络对邮件进行特征提取并分类,对于网络中的参数在一定范围内进行了参数的优化,最终调用了保存的模型对这两种网络分类的准确性做了测试,发现CNN网络的准确率更高。
4垃圾邮件分类系统的设计与实现上一章中分别构建了CNN和LSTM网络来对邮件文本进行分类,实现两种网络模型的训练、保存和调用,最后分析结果发现CNN网络的分类效果更好,因此,接下来会调用一个训练好的CNN模型来完成一个简单的基于邮件文本的垃圾邮件分类系统。4.1系统框架本系统可以分为数据预处理与向量化表示、CNN网络模型的加载与调用、UI界面运行3个模块。系统的工作流程如图4.1所示。点击检测调用CNN网络模型进行预测邮件文本预处理及向量化表示将待检测文本点击检测调用CNN网络模型进行预测邮件文本预处理及向量化表示将待检测文本输入检测框点击清除清除所有内容将结果输出到UI界面将预测标签转为邮件类型点击清除清除所有内容将结果输出到UI界面将预测标签转为邮件类型图4.1系统框架4.2环境配置本次实验需要进行一定的环境配置,主要是深度学习的一些开源工具的安装与配置,所用到的工具及其版本信息如表4.1所示。表4.1实验环境及配置工具名称版本信息CPUAMD锐龙53500U操作系统Win10编辑器Pycharm2020编程语言环境配置工具Python3.6Anaconda32020.07深度学习框架Tensorflow1.15自然语言处理工具Gensim3.7.0分词工具Jieba0.42.1界面设计工具PyQt5.1Anaconda的下载安装首先我们需要安装一个python的代码编辑器,我选择的是pycharm,可以在官网选择合适的版本进行下载,下载好安装包后按照提示选择合适的安装路径进行安装。安装完成后我们就可以通过pycharm来编辑python代码了,但此时缺少了python解释器,代码是无法运行的。这就需要安装anaconda3来解决,anaconda是python的发行版,集成了很多python的第三方库,可以帮助我们更加方便地管理配置出需要的python运行环境。首先从清华大学的镜像网站下载合适的版本(官网下载速度很慢),我下载的是anaconda3-2020.07-windows-x86_64本,如图4.2所示。图4.2选择合适的Anaconda版本下载完成后依据安装提示选择合适的路径进行安装,注意安装路径中不能含有空格及中文字符,路径名尽量简洁。安装完成后,配置环境变量,右键单击此电脑,选择属性,进入高级系统设置,选择环境变量,选择path变量,点击编辑,新建一个路径,输入刚刚的安装路径即可,如图4.3所示。图4.3Anaconda环境变量配置配置完成后可以打开命令提示符,通过conda版本查看命令来验证安装是否成功,安装成功时将会出现版本信息,如图4.4所示。图4.4成功安装Anaconda4.2.2深度学习各种包的安装Anaconda安装完成后,可以先创建一个虚拟python环境,如图3.6所示,创建了一个版本为3.6的python虚拟环境,并将这个虚拟环境的名字命名为py36。图4.5python虚拟环境的创建创建完成后,可以通过conda命令查看已创建的虚拟环境,如图4.6所示,可以看到,此时py36环境已创建成功。图4.6虚拟环境查看下面需要激活py36函数,如图4.7所示,然后就可以使用pip或者conda命令在这个虚拟环境中安装各种深度学习需要用到的包了。图4.7环境激活、包安装命令仿照上面的命令安装tensorflow、gensim等工具包,安装完成后可以查看所有已安装工具,图4.8所示为已成功安装的部分工具包。图4.8查看已成功安装的工具包4.2.3PyQt5的安装PyQt5的安装与上面提到的深度学习工具包的安装类似,都可以通过pip命令直接安装,如图4.9所示。图4.9PyQt5的安装然后为了在pycharm中使用PyQt5的工具QTDesigner,需要在pycharm中进行一些配置,如图4.10所示。图4.10QTDesigner的配置使用QTDesigner可以直接通过拖动部件进行界面设计,生成的qt文件可以通过pyuic工具转化为可运行的python代码,所以还需要对pyuic进行配置,配置过程如图4.11所示。图4.11pyuic的配置4.3系统实现本系统的功能是在界面内输入垃圾邮件文本的内容,根据文本内容判断是否为垃圾邮件,并在界面中输出判断结果。实现的核心是一个做标签预测的函数,函数的输入为一个字符串,即一封邮件的文本内容,首先需要对这个字符串进行数据清洗、词向量化表示,将文本转化为CNN网络模型的输入向量。然后调用之前保存的CNN网络模型对这个向量做出预测,判断预测出的标签,若标签为[1,0]则这封邮件为垃圾邮件,若标签为[0,1]则邮件为正常邮件,最后将判断结果打印输出。4.4效果展示最终的效果就是通过UI界面,输入正常邮件文本内容,点击检测后,会在检测结果中输出“正常邮件“字样,如图4.12所示。当输入的文本为垃圾邮件时,会在检测结果中输出“垃圾邮件”字样,如图4.13所示。4.12正常邮件检测结果4.13垃圾
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年电商运营(店铺推广)试题及答案
- 2025年中职建筑(建筑测量基础)试题及答案
- 2025年大学大一(人工智能技术应用)人工智能基础试题及答案
- 2025年大学兽医学(兽医内科学)试题及答案
- 2025年中职饲草栽培与加工(青贮技术)试题及答案
- 2025年高职(口腔修复专业)全口义齿制作试题及答案
- 2025年高职第一学年(学前教育)学前教育学试题及答案
- 2025年大学农村电气技术(新能源发电技术应用)试题及答案
- 2025年高职(应用化工技术)化工设备设计基础试题及答案
- 2026年农业种植(山药种植技术)试题及答案
- 2026长治日报社工作人员招聘劳务派遣人员5人参考题库完美版
- 2025年经营分析报告
- 慢性心衰心肌代谢记忆的干细胞干预新策略
- 11340《古代小说戏曲专题》【纸考】2023.12
- 江苏省南通市启东市2023-2024学年九年级上学期期末考试英语模拟试题(含听力)附答案
- 挡土墙、围墙石砌体作业安全措施
- 工程勘察设计收费标准(2002年修订本)完整版
- GB/T 34956-2017大气辐射影响航空电子设备单粒子效应防护设计指南
- 三菱扶梯介绍PLUS概述课件
- 江西乐平工业园区污水处理厂提标改造工程环评报告书
- 劳务作业分包劳务分包技术方案
评论
0/150
提交评论