本文共 3419 字,大约阅读时间需要 11 分钟。
可以维护一个骚扰电话号码和垃圾短信发送号码的黑名单。
如果某个垃圾短信发送者的号码并不在黑名单中,那这种方法就没办法拦截了。所以,基于黑名单的过滤,还不够完善,再继续看基于规则的过滤。
可以综合多条规则进行判断。比如,满足2条以上才会被判定为垃圾短信;
或者每条规则对应一个不同的得分,某条短信的总得分超过某个闽值,才会被判定为垃圾短信。以上规则还有很多细节需要处理。比如,第1条规则中,我们该如何定义特殊单词;第2条规则中,我们该如何定义什么样的号码是群发号码等等。
这里只讲一下,如何定义特殊单词?
可以基于概率统计的方法,借助计算机强大的计算能力,找出哪些单词最常出现在垃圾短信中,将这些最常出现的单词,作为特殊单词,用来过滤短信。 这种方法的前提是,有大量的样本数据,也就是说,要有大量的短信(比如1000万条短信),并且每条短信都做好了标记,它是垃圾短信还是非垃圾短信。对这1000万条短信,进行分词处理(借助中文或者英文分词算法),去掉“的、和、是”等没有意义的停用词(Stop words),得到n个不同的单词。针对每个单词,统计有多少个垃圾短信出现了这个单词,有多少个非垃圾短信会出现这个单词,求出每个单词出现在垃圾短信中的概率,以及出现在非垃圾短信中的概率。如果某个单词出现在垃圾短信中的概率,远大于出现在非垃圾短信中的概率,就把这个单词作为特殊单词。
基于规则的过滤器,看起来很直观,也很好理解,但是它也有一定的局限性。一方面,这些规则受人的思维方式局限,规则未免太过简单;另一方面,垃圾短信发送者可能会针对规则,精心设计短信,绕过这些规则的拦截。对此,我们再来看一种更加高级的过滤方式,基于概率统计的过滤方式。
基于概率统计的过滤,基础理论是基于朴素贝叶斯算法。先通过一个非常简单的例子来看下,什么是朴素贝叶斯算法?
假设事件A是“小明不去上学”,事件B是“下雨了”。我们现在统计了一下过去10天的下雨情况和小明上学的情况,作为样本数据。 我们来分析一下,这组样本有什么规律。在这10天中,有4天下雨,所以下雨的概率P(B)=4/10。10天中有3天,小明没有去上学,所以小明不去上学的概率P(A)=3/10。在4个下雨天中,小明有2天没去上学,所以下雨天不去上学的概率P(A|B)=2/4。在小明没有去上学的3天中,有2天下雨了,所以小明因为下雨而不上学的概率是P(BIA)=2/3。实际上,这4个概率值之间,有一定的关系,这个关系就是朴素贝叶斯算法,我们用公式表示出来,就是下面这个样子。 我们需要把短信抽象成一组计算机可以理解并且方便计算的特征项,用这一组特征项代替短信本身,来做垃圾短信过滤。可以通过分词算法,把一个短信分割成n个单词。这n个单词就是一组特征项,全权代表这个短信。因此,判定一个短信是否是垃圾短信,就变成了,判定同时包含这几个单词的短信是否是垃圾短信。
不过,这里并不像基于规则的过滤器那样,非黑即白。我们使用概率,来表征一个短信是垃圾短信的可信程度。 尽管有大量的短信样本,但是我们没法通过样本数据统计得到这个概率。你可能会说,我只需要统计同时包含W1,W2,W3,……Wn 这n个单词的短信有多少个(我们假设有x个),然后看这里面属于垃圾短信的有几个(假设y个),那包含W1,W2,W3,……Wn 这n个单词的短信是垃圾短信的概率就是y/x。But,实际情况,样本中不会有太多同时包含W1,W2,W3,……Wn 的短信的,甚至根本不存在这样的短信。没有样本,也就无法计算概率。
这个时候,朴素贝叶斯公式就可以派上用场了。通过朴素贝叶斯公式,将这个概率的求解,分解为其他三个概率的求解。如下。那转化之后的三个概率是否可以通过样本统计得到呢?
P(W1,W2,W3,……Wn 同时出现在一条短信中 | 短信是垃圾短信)这个概率照样无法通过样本来统计得到。但是我们可以基于下面这条著名的概率规则来计算。 独立事件发生的概率计算公式:P(AB)=P(A)X P(B) 事件A和事件B是独立事件,两者的发生没有相关性,那两个同时发生的概率 P(A*B)就等于 P(A)*P(B)。 基于这条独立事件发生概率的计算公式,把P(W1,W2,W3,……Wn 同时出现在一条短信中 | 短信是垃圾短信)分解为下面这个公式: 其中,P(Wi 出现在短信中 | 短信是垃圾短信)表示垃圾短信中包含Wi 这个单词的概率有多大。P(短信是垃圾短信)把样本中垃圾短信的个数除以总样本短信个数。
不过,P(W1,W2,W3,……Wn 同时出现在一条短信中)这个概率还是不好通过样本统计得到,原因前面说过了,样本空间有限。不过,我们没必要非得计算这一部分的概率值。为什么这么说呢?
实际上,我们可以分别计算同时包含W1,W2,W3,……Wn 这n个单词的短信,是垃圾短信和非垃圾短信的概率。假设它们分别是 P1 和 P2。我们可以通过对比 P1 和 P2 值的大小,来判断一条短信是否是垃圾短信。如果 P1 是 P2 的很多倍(比如10倍),我们确信这条短信是垃圾短信。
在求解 P1 和 P2 倍数(P1/P2)的时候,我们也就不需要这个值。今天,讲了基于黑名单、规则、概率统计三种垃圾短信的过滤方法,这三种方法,还可以应用到很多类似的过滤、拦截的领域,比如垃圾邮件的过滤等等。
在讲黑名单过滤的时候,我讲到布隆过滤器可能会存在误判情况,可能会导致用户投诉。
实际上,我们可以结合三种不同的过滤方式的结果,对同一个短信处理,如果三者都表明这个短信是垃圾短信,才把它当作垃圾短信拦截过滤,这样就会更精准。
在实际的工程中,还需要结合具体的场景,以及大量的实验,不断去调整策略,权衡垃圾短信判定的准确率(是否会把不是垃圾的短信错判为垃圾短信)和召回率(是否能把所有的垃圾短信都找到),来实现我们的需求。
转载地址:http://dqetf.baihongyu.com/