前言

网上关于应用机器学习的方法识别垃圾邮件文章很多.
核心思想是对邮件进行分词,或对分词作优化,进而应用各算法达到识别垃圾邮件的目的.
我的观点是, 这种思路

  • 对一般文章,如帖子,博客,甚至严肃的论文都会有不错的分类效果.
  • 但用于识别垃圾邮件则远远不足.

分类基本要素

作者不是研究算法的,只是根据多年识别垃圾邮件的经验,认为分类的基本要素包括:

  • 分类算法
  • 大量高质量的样本
  • 数据清理
  • 特征的提取 (如果是分词, 则还应该加上"词库")

分类算法,开源的很多.

10万~100万高质量样本,只要有耐心,总能收集到.对公司来说这不是问题.

数据清理,很难.垃圾邮件发送者会想尽一切办法

  • 让机器无法识别或错误识别.
  • 而让人能做到在杂乱无章的信息中整理出受益人信息.

特征的提取, 不仅仅是分词. 邮件或垃圾邮件有更多自己的特性,如
伪造收件人, 附件的多样性(doc,rar,jpg等), 是不是转发, 是不是往复.


几个特殊邮件例子

有很多干扰反垃圾程序的情况…这只举几个特殊的例子.

1 正文是图

最近正文是一张图加上几句随机文字的邮件特别多

垃圾邮件识别分析 python 数据集 垃圾邮件识别属于()问题_垃圾邮件识别分析 python 数据集

2 通过字体背景或大小干扰分词

垃圾邮件识别分析 python 数据集 垃圾邮件识别属于()问题_垃圾邮件识别分析 python 数据集_02

3 邮件服务商私自追加的广告

垃圾邮件识别分析 python 数据集 垃圾邮件识别属于()问题_垃圾邮件_03

4 伪造url迷惑收件人

垃圾邮件识别分析 python 数据集 垃圾邮件识别属于()问题_垃圾邮件识别分析 python 数据集_04

5 表格(table)拼的文字

垃圾邮件识别分析 python 数据集 垃圾邮件识别属于()问题_垃圾邮件识别分析 python 数据集_05

6 成%人%用%品%公司的会议信件,或采购信件


数据清理和特征提取

除了分词,还有很多特征需要提取,下面只提几个

  • 信头的和理性,完整性等需要检查, 如: 是否有Message-ID 等
  • 是否凌晨发信
  • 是否只有一个收件人
  • 主题长度是否太短, 是否包含乱码等
  • 正文是否太短, 正文是不是有一张大图等
  • 是不是回信等
  • 正文html中是不是有font标签, size是多少等
  • 正文是不是有url等
  • 附件属性,大小,类型, 名称等
  • …等等

特征提取后, 做标记, 作为一般性的分词结果.继续应用算法.
这样才有能做好垃圾邮件识别.

在本文作者自己开发内容过滤系统中,提取了大概上百特征.

在线识别垃圾邮件

最后

除了通用的分类方法. 在每个不同的领域,提出个性化的特征才能做好分类.这就需要对这个领域有非常深刻的了解.