jerryxjr1220 发表于 2017-4-14 13:18:59

python小练习(091):基于keras快速搭建神经网络(实战篇)之中文垃圾邮件自动识别

今天继续来分享基于keras搭建的神经网络实现中文垃圾邮件的自动识别。

上一次的小练习分享了如何处理英语文章,那么其实处理中文语句也是差不多的过程,只不过需要多一步中文的分词,我们可以用jieba来实现。

我从我的邮箱中,随机抽取了300封邮件并人工做好了标记,垃圾邮件标记为, 非垃圾邮件标记为。

邮件我只选取了发件人和主题作为分类依据,格式如下:
网易有钱【有钱福利】投资1块钱,提现50元!3月21日
平安银行集团安全出行意外保障理财调查赠险中心耙徽马免费赠送壹佰万安全出行意外保障登记赠险筷级龙3月20日
Microsoft 帐户团队Microsoft 帐户安全代码23月19日
Microsoft 帐户团队Microsoft 帐户异常登录活动3月19日
随手记团队随手记@您,您有一个888元现金大礼包,马上签收>(AD)3月18日

这300封邮件都保存在mail.txt文件中,方便读取。

数据源准备好以后,接下来就要做数据清洗和词向量转化,这样才能输入计算机被机器学习。
def filtermail(s):
    sigbol = ',。“”~!@#¥%……&*()——+=【】{}、|;:‘’《》?!#$^&()[]{};:",.<>/?\\-'
    for sig in sigbol:
      s = s.replace(sig, '')
    return s
我定义了一个函数,用来剔除无用的符合
然后用jieba分词进行中文语句的分词,做成词汇表,然后依次统计词频。最后再把得到词向量做成训练模型。

我用了前250组数据进行训练,用最后的50组数据进行模拟测试。

来看看结果吧。
Number 1: Predict: [[ 0.986349880.01365006]] , Label : []
Number 2: Predict: [[ 0.203951    0.79604894]] , Label : []
Number 3: Predict: [[ 0.263268860.73673117]] , Label : []
Number 4: Predict: [[ 0.972696660.02730336]] , Label : []
Number 5: Predict: [[ 0.338453020.66154695]] , Label : []
Number 6: Predict: [[ 0.506049870.49395013]] , Label : []
Number 7: Predict: [[ 0.352380070.6476199 ]] , Label : []
Number 8: Predict: [[ 0.616325560.38367444]] , Label : []
Number 9: Predict: [[ 0.238836230.76116377]] , Label : []
Number 10: Predict: [[ 0.133836670.86616331]] , Label : []
Number 11: Predict: [[ 0.040039070.95996094]] , Label : []
Number 12: Predict: [[ 0.792943780.20705624]] , Label : []
Number 13: Predict: [[ 0.977425220.02257477]] , Label : []
Number 14: Predict: [[ 0.857883160.14211683]] , Label : []
Number 15: Predict: [[ 0.520558240.47944167]] , Label : []
Number 16: Predict: [[ 0.74914420.2508558]] , Label : []
Number 17: Predict: [[ 0.941221360.05877867]] , Label : []
Number 18: Predict: [[ 0.943172340.05682766]] , Label : []
Number 19: Predict: [[ 0.975563170.02443691]] , Label : []
Number 20: Predict: [] , Label : []
Number 21: Predict: [[ 0.870723370.1292766 ]] , Label : []
Number 22: Predict: [[ 0.978815790.02118419]] , Label : []
Number 23: Predict: [[ 0.465542910.53445703]] , Label : []
Number 24: Predict: [[ 0.550396320.44960371]] , Label : []
Number 25: Predict: [[ 0.626104240.37389573]] , Label : []
Number 26: Predict: [[ 0.398544280.60145569]] , Label : []
Number 27: Predict: [[ 0.461355750.53864431]] , Label : []
Number 28: Predict: [[ 0.904503350.09549663]] , Label : []
Number 29: Predict: [[ 0.834621730.16537824]] , Label : []
Number 30: Predict: [[ 0.522255180.47774485]] , Label : []
Number 31: Predict: [[ 0.770606520.22939353]] , Label : []
Number 32: Predict: [[ 0.645188570.35481146]] , Label : []
Number 33: Predict: [[ 0.039670790.96032917]] , Label : []
Number 34: Predict: [[ 0.787036780.21296316]] , Label : []
Number 35: Predict: [[ 0.911659840.08834018]] , Label : []
Number 36: Predict: [[ 0.791464210.20853582]] , Label : []
Number 37: Predict: [[ 0.628483410.37151659]] , Label : []
Number 38: Predict: [[ 0.810827080.18917286]] , Label : []
Number 39: Predict: [[ 0.802876    0.19712406]] , Label : []
Number 40: Predict: [[ 0.712078150.28792191]] , Label : []
Number 41: Predict: [[ 0.826389970.17361   ]] , Label : []
Number 42: Predict: [[ 0.9101544   0.08984561]] , Label : []
Number 43: Predict: [[ 0.420753780.57924622]] , Label : []
Number 44: Predict: [[ 0.731060560.26893941]] , Label : []
Number 45: Predict: [[ 0.830039740.16996031]] , Label : []
Number 46: Predict: [[ 0.994761170.00523886]] , Label : []
Number 47: Predict: [[ 0.934268590.06573144]] , Label : []
Number 48: Predict: [[ 0.907248560.09275148]] , Label : []
Number 49: Predict: [[ 0.766092    0.23390794]] , Label : []

从结果统计,准确率达到了83%,虽然还不是很高,但毕竟中文的分词难度比英语要大许多,而且我仅仅是根据邮件主题和发件人进行的分类,数据源的信息也并不是十分充分。

源代码及注解:
**** Hidden Message *****

jerryxjr1220 发表于 2017-4-14 13:59:55

本帖最后由 jerryxjr1220 于 2017-4-14 14:03 编辑

其实这次的鱼C大扫除活动完全可以用自动识别来做,只要有足够的数据源作为训练资料,500条以上的辨别好的数据应该足够了。然后用爬虫爬所有版面的帖子,转化词向量,导入训练模型,然后就能自动识别哪些是垃圾帖。
@~风介~ @冬雪雪冬 @SixPy @小甲鱼 @不二如是

不二如是 发表于 2017-4-14 15:40:55

是个好主意,可以作为活动彩蛋
但现在先让“鱼油,热闹一下”

新手·ing 发表于 2017-4-14 18:39:43

{:10_245:}天啊天啊

ELI_ 发表于 2017-4-15 09:52:47

很好的邮件过滤策略

Py小学生 发表于 2017-6-26 10:51:51

必须D

fhd2017 发表于 2017-8-30 10:04:39

好文章 学习一下

macmac 发表于 2017-9-11 12:35:50

前来学习

wolf.jiang 发表于 2017-12-19 13:50:06

{:5_109:}

colin044 发表于 2017-12-19 17:54:03

什么鬼还得回复才能看

月亮下的么么哒 发表于 2018-1-17 12:09:31

666

svcvit 发表于 2018-3-6 16:00:13

感谢分享,学习一下

zhuyuanzhang110 发表于 2018-3-12 11:15:53

感谢楼主!

小小米 发表于 2018-3-13 16:29:46

学习

daoyuantech 发表于 2018-5-29 15:47:25

学习学习

wandyking 发表于 2018-7-18 22:38:34

特意过来学习python, 同时学习神经网络, 最近要用到

gyyy1995 发表于 2018-10-8 22:17:28

超级清楚

NGLING 发表于 2018-10-27 09:55:53

学学

zhanghanzhu 发表于 2018-11-27 23:16:07

{:5_109:}

追风少年123456 发表于 2019-5-3 19:14:52

前来学习
页: [1] 2
查看完整版本: python小练习(091):基于keras快速搭建神经网络(实战篇)之中文垃圾邮件自动识别