简单的线性回归算法屏蔽垃圾评论

2014-11-29 13:34:51
最近一段时间,一直跟app里的垃圾评论作斗争,也试过一些方法,最后有了这个简单的以线性回归模型为基础的垃圾特征检测方法,效果还不错。

最近我们的移动新闻客户端产品里,垃圾评论越来越多,因为我们是财经类的新闻客户端,

所以垃圾评论基本都是推荐股票QQ群 微信群的,一方面是我们的用户数越来越多、越来越活跃,
另一方面也是因为很多垃圾评论制造者也慢慢从pc端转到移动客户端。

先看几条评论数据:

以前,我们都是编辑人工审核评论,发现广告就及时删除,但是编辑平时的工作量都很大,
很难保证在第一时间处理,而且这些垃圾评论很多都是大半夜或者大清早发的。

所以,需要从技术上想想办法,尽可能屏蔽掉那些明显的广告,我也试了一些办法
1、屏蔽微信号
因为我们的评论系统原来已经有关键词屏蔽的功能,这些关键词很多都是有关部门要求屏蔽的。
比如,有人评论说“今天中午吃了方便面”,那么经过屏蔽之后就是“今天中午吃了***”
所以,我就把他们推销的微信号、qq群号码直接加入关键词列表。
后来发现他们有很多微信号,封了一个,又换一个,防不胜防。

2、屏蔽IP地址
这招是以前做另外的系统用过的,但是对于移动端,这招很难凑效,他们也不仅仅是一个IP,
有广西的,有河南的,也没法封干净。

3、线性回归模型
现在大家做什么都扯上大数据、机器学习,这里也参考机器学习里的很重要的一个方法“回归”(regression)。
回归就是找出结果和特征之间关系的一种统计学方法,

大体的数学公式是这样的

因变量y表示结果,如果结果只有两种,就是二元分类问题,比如(对和错,是垃圾评论、不是垃圾评论),通常可以用01来表示
如果结果有多种,就是多元分类问题,比如商品评论(很差、一般、很好)
自变量x是影响这一结果的很多因子,有时候我们也叫特征(feature)、维度。

如果只有一个自变量,那么就是一元回归,多个自变量就是多元回归

最后的(医不死如)表示不确定因素,当然我们这个模型的不确定因素越小越好。


如果因变量和自变量的关系是线性的,就是线性回归(linear regression),
否则就是非线性回归,比如逻辑回归(logistic regression),本质上也算是线性回归
所谓线性,就是一次函数的关系,是条直线,斜率是固定的。 

上面的公式,我们一般称为模型,机器学习(machine learning)就是找到这一模型的过程,
而回归是一种有监督(supervised learning)的机器学习方法,所谓有监督就是有一堆训练数据(training data),
从这堆已有的数据里找模型,
在我们的例子中,training data就是已知的经过编辑人工标记过的垃圾评论,通过这些评论,我们建立一个函数,
将未来的评论输入这个函数,得到一个二元的结果,是否是垃圾评论。

4、建立回归模型
下面就是要建立一个模型,我的想法很简单,
自变量就是垃圾评论里出现的高频词,比如“微信”、“股票”、“免费”、“盈利”等
不同的词的权重(或者说分数)不一样,这个权重就是上面公式中的系数。
这样最终一个评论会被打一个分数,超过多少分的,我就认为是垃圾评论。 
当然,前期这个关键词和系数是我人工根据已有垃圾评论学习出来的,不是由机器学习来的,将来数据多了的话,可以由机器来做。


5、数据预处理

后来发现他们的评论经常出现一些“微   信”“溦信”“溦^信”,比如

所以,我们要把评论中的标点符号事先都过滤掉,对于使用同音字的,我们就把中文汉字都转成拼音来比较。
经过这样的处理和这一个周的观察,基本上能过滤90%的垃圾评论。