一.背景需求

需求:发送垃圾聊天信息是拉人用户一种拉人手段,众多的垃圾信息识别浪费了人力的投入。为了能够智能识别垃圾聊天信息,利用现有的历史聊天数据,采用机器学习相关算法进行学习,能够较高的准确率自动识别垃圾信息

二.相关技术

2.1基于规则

通过对垃圾关键字等进行匹配,来判断是否为垃圾信息,缺点在于需要频繁更新相关关键词或者特征

2.2文本分类

对垃圾内容进行分词、统计,然后对内容进行主题分类,从而实现信息的分类,主要的方法有:KNN、贝叶斯、SVM等

2.2.1 KNN分类法

  • 主要思想:从训练数据中找到与测试数据最接近的K条记录,然后根据这K条记录的类别来决定测试数据类别
  • 优点:简单易理解,无需训练
  • 缺点:时间空间复杂度较高,计算量大,样本不平衡时出现

2.2.2贝叶斯分类法

  • 主要思想:对于给定测试数据,求解该数据在现有的条件(特征)下,出现在各个类别的概率,在哪个类别出现的概率最大,就认为该测试数据属于哪个类别。贝叶斯定理:点击查看原图
  • 优点:使用较为广泛(邮件过滤),训练测试速度较高。
  • 缺点:无法处理特征之间不满足相互独立的情况

2.2.3SVM分类法

  • 主要思想:假设数据集是二维的点坐标,将数据集分割开来的直线就为分割超平面;假设数据集是三维的,那么将数据集分割开来的就是一个平面;如果数据集是N维的,那么需要一个N-1维的对象对数据进行分割,该对象称为超平面,分布在超平面一侧的所有数据都属于某一个类别,而另一侧的属于另外一个类别。SVM基本思想是指将那些离分隔超平面最近的那些点,到分隔面的距离最大化,即找到最优超平面
  • 优点:能够解决非线性模型,分类效果较好,鲁棒性高
  • 缺点:计算量大,难于理解,经典的算法只支持二分类问题

2.3总结

2.3.1特点及要求

  • 识别准确率要求较高
  • 关键词会更新
  • 训练和测试样本较大

2.3.2结论

选择贝叶斯分类算法,原因如下:

  • 在垃圾邮件/信息识别有成熟的模型
  • 分类效果较好
  • 训练测试速度快
  • 有足够的数据支撑该算法需要的特征
  • 文本分类中的特征满足相互独立条件

三.垃圾信息识别

垃圾信息识别依据历史的垃圾聊天信息和正常聊天信息,采用贝叶斯分类算法进行训练学习,利用训练出来的模型对新的信息进行预测分类。

  • 训练流程包括:文本预处理(清洗)->文本分词->特征提取->贝叶斯训练->目标模型
  • 预测流程包括:文本预处理(清洗)->文本分词->根据模型预测分类

3.1主流程

防拉人项目_垃圾信息识别_流程图1.jpg


3.2子流程

3.2.1预处理(清洗)模块

清洗模块主要是对信息做预处理工作,对各种垃圾信息的变种进行清洗:利用已有特征(yy, channel, charge, number)作为基础,对这四种特征词的衍生词汇进行替换;对变型的数字进行替换;对特殊字符进行过滤。

防拉人项目_垃圾信息识别_流程图2.jpg


3.2.2分词模块

分词模块主要是对文本进行分词,利用分好的词语进行特征提取;每条信息的词语即为它们的候选特征。

  • 扩展词:扩展词主要是对一些新词汇进行保留,比如“花千骨”是一个游戏名称,保持该词在分词的时候被分为“花千骨”,而不是“花”,“千骨”等;
  • 停用词:停用词主要对一些不重要的词进行去除,比如“的”,本身对句子的含义不造成任何影响和作用,去掉这些停用词;分词工具:

分词工具:

名称
支持语言
速度
词典及扩展性
IKAnalyzer(Java) 英文字母、数字、中文词汇等分词处理,兼容韩文、日文字符 83 万字/秒 支持用户词典扩展定义、支持自定义停止词
Imdict(中科院) 中文、英文、数字 259517字/秒 仅coredict核心字典、bigramdict词典,不含人名、地名词典。不支持自定义词典
paoding 中文 100万字/秒 支持不限制个数的用户自定义词库

总结:我们采用IKAnalyzer分词工具,分词速度较快,Java语言开发,而且能够自定义停用词和扩展词。

3.2.3特征选取模块

特征选择模块主要是对垃圾聊天信息和正常聊天信息进行特征提取,即提取能够分别有效代表两类的特征词,例如yy能够较为明显代表垃圾聊天信息,yy是一个特征词。

特征提取算法:

  • 频次差:利用单词在垃圾信息中和正常信息中的频次差作为该单词的权重;
  • 信息增益:信息增益是指信息或者信息熵的有效减少量。对于一个特征(单词)w,系统有它和没有它的时候信息量各是多少,这两者之间的差值就是该词w给系统带来的信息量,信息量越大,说明该词w越能够区分类别;
  • 卡方检验:利用观察实际值与理论值的偏差来决定理论是否正确,使用“词w与类别C不相关”做原假设,计算出来词w的卡方值越大,说明对原假设偏离越大,即词w可能与类别C相关;

总结:对于垃圾信息中特征的对比,我们采用频次差和信息增益的方法计算每个单词的权重,并且将单词按照权重排序,取前K个;频次差和信息增益两种方法得到的特征词基本一致。

3.2.4贝叶斯训练模块

贝叶斯训练模块主要对训练数据进行训练,得到分类模型。

算法的伪代码(盗图):

image2015-8-14 18-47-5.png


3.2.5预测模块

预测模块主要对新数据进行预测分类。利用上述步骤中的贝叶斯模型,分别计算该条新数据在不同类别中出现的概率,出现概率最大的类即为新数据的类别。

防拉人项目_垃圾信息识别_流程图5.jpg


四.测试

4.1测试数据

  • 训练集:测试集=9:1;1:1
  • 正常信息:垃圾信息=1:1
  • 总数量在400万条左右

4.2测试流程

K-交叉验证:K折交叉验证,是将初始采用分割成K个子样本,一个单独的子样本用来作为验证模型的数据(测试数据),其他K-1个样本用来训练。交叉验证重复K次,平均K次的结果得到一个单一评估。其中10折交叉验证是最常用的。

五.总结

通过垃圾信息识别的学习过程,学习了用数据挖掘方法解决实际问题。解决实际问题的时候有好多细节的问题(⊙o⊙)…