朴素贝叶斯算法--过滤垃圾短信

文章目录

    • 1. 基于黑名单过滤
    • 2. 基于规则过滤
    • 3. 基于概率统计过滤
    • 4. 总结

上一节我们讲到,如何用位图、布隆过滤器,来 过滤重复数据。今天,我们再讲一个跟过滤相关的问题,如何过滤垃圾短信?

1. 基于黑名单过滤

可以维护一个骚扰电话号码和垃圾短信发送号码的黑名单。

  • 黑名单的搜集,有很多途径,比如,公开的网站下载,用户自主标记。标记个数超过一定阈值的号码,我们就可以定义为骚扰电话,并将它加入到我们的黑名单中。
  • 如果黑名单中的电话号码不多的话,我们可以使用散列表、二叉树等动态数据结构来存储,对内存的消耗并不会很大。如果我们把每个号码看作一个字符串,并且假设平均长度是16个字节,那存储50万个电话号码,大约需要10MB的内存空间。对于手机这样的内存有限的设备来说,这点内存的消耗也是可以接受的。
  • 黑名单中的电话号码很多呢?比如有500万个。这个时候,如果再用散列表存储,就需要大约100MB的存储空间。为了实现一个拦截功能,耗费如此多的手机内存,显然有点不合理。
  • 布隆过滤器最大的特点就是比较省存储空间,所以,用它来解决这个问题再合适不过。如果我们要存储500万个手机号码,我们把位图大小设置为10倍数据大小,也就是5000万,那也只需要使用5000万个二进制位(5000万bits),换算成字节,也就是不到7MB的存储空间。比起散列表的解决方案,内存的消耗减少了很多。
  • 时间换空间,把黑名单存储在服务器端上,把过滤和拦截的核心工作,交给服务器端来做。手机端只负责将要检查的号码发送给服务器端,服务器端通过查黑名单,判断这个号码是否应该被拦截,并将结果返回给手机端。这个解决思路完全不占用手机内存。不过网络通信是比较慢的,所以,网络延迟就会导致处理速度降低。而且必须联网。
  • 布隆过滤器会有判错的概率!如果它把一个重要的电话或短信,当成垃圾拦截了,对于用户来说,这是无法接受的。这是一个很大的问题。

2. 基于规则过滤

如果某个垃圾短信发送者的号码并不在黑名单中,那这种方法就没办法拦截了。所以,基于黑名单的过滤,还不够完善,再继续看基于规则的过滤。

  • 通过短信的内容,来判断是垃圾短信。预先设定一些规则,如果短信符合这些规则,就判定它是垃圾短信。规则可以有很多,比如:
  1. 短信中包含特殊单词(或词语),比如一些非法、淫秽、反动词语等;
  2. 发送号码是群发号码,非正常的手机号码,比如+60389585;
  3. 短信中包含回拨的联系方式,比如手机号码、微信、QQ、网页链接等,因为群发短信的号码一般都是无法回拨的;
  4. 短信格式花哨、内容很长,比如包含各种表情、图片、网页链接等;
  5. 符合已知垃圾短信的模板。与模板匹配,就可以判定为垃圾短信。

可以综合多条规则进行判断。比如,满足2条以上才会被判定为垃圾短信;
或者每条规则对应一个不同的得分,某条短信的总得分超过某个闽值,才会被判定为垃圾短信。

以上规则还有很多细节需要处理。比如,第1条规则中,我们该如何定义特殊单词;第2条规则中,我们该如何定义什么样的号码是群发号码等等。

这里只讲一下,如何定义特殊单词?
可以基于概率统计的方法,借助计算机强大的计算能力,找出哪些单词最常出现在垃圾短信中,将这些最常出现的单词,作为特殊单词,用来过滤短信。
这种方法的前提是,有大量的样本数据,也就是说,要有大量的短信(比如1000万条短信),并且每条短信都做好了标记,它是垃圾短信还是非垃圾短信。

对这1000万条短信,进行分词处理(借助中文或者英文分词算法),去掉“的、和、是”等没有意义的停用词(Stop words),得到n个不同的单词。针对每个单词,统计有多少个垃圾短信出现了这个单词,有多少个非垃圾短信会出现这个单词,求出每个单词出现在垃圾短信中的概率,以及出现在非垃圾短信中的概率。如果某个单词出现在垃圾短信中的概率,远大于出现在非垃圾短信中的概率,就把这个单词作为特殊单词。
在这里插入图片描述

3. 基于概率统计过滤

基于规则的过滤器,看起来很直观,也很好理解,但是它也有一定的局限性。一方面,这些规则受人的思维方式局限,规则未免太过简单;另一方面,垃圾短信发送者可能会针对规则精心设计短信,绕过这些规则的拦截。对此,我们再来看一种更加高级的过滤方式,基于概率统计的过滤方式。

基于概率统计的过滤,基础理论是基于朴素贝叶斯算法。先通过一个非常简单的例子来看下,什么是朴素贝叶斯算法?
假设事件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)的时候,我们也就不需要这个值。

4. 总结

今天,讲了基于黑名单、规则、概率统计三种垃圾短信的过滤方法,这三种方法,还可以应用到很多类似的过滤、拦截的领域,比如垃圾邮件的过滤等等。

在讲黑名单过滤的时候,我讲到布隆过滤器可能会存在误判情况,可能会导致用户投诉。

实际上,我们可以结合三种不同的过滤方式的结果,对同一个短信处理,如果三者都表明这个短信是垃圾短信,才把它当作垃圾短信拦截过滤,这样就会更精准。

在实际的工程中,还需要结合具体的场景,以及大量的实验,不断去调整策略,权衡垃圾短信判定的准确率(是否会把不是垃圾的短信错判为垃圾短信)和召回率(是否能把所有的垃圾短信都找到),来实现我们的需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2020深度文本匹配最新进展:精度、速度我都要!

文 | QvQ编 | 兔子酱在过去的几年里,信息检索(IR)领域见证了一系列神经排序模型的引入,这些模型多是基于表示或基于交互的,亦或二者的融合。然鹅,模型虽非常有效,尤其是基于 PLMs 的排序模型更是增加了几个数量级的计算…

开源开放 | Gowild 狗尾草“七律”知识图谱进入 OpenKG,开放 8000 万中文百科知识三元组数据...

项目网站: https://ai.gowild.cn/kgOpenKG发布地址: http://openkg.cn/dataset/7lore狗尾草科技:https://www.gowild.cn1.七律开放知识图谱简介作为人工智能技术的重要分支,知识图谱自2012年被提出并成功应用后,就获得了迅速发展,…

向量空间 Vector Space -- 推荐系统

文章目录1. 算法解析2. 基于相似用户做推荐3. 基于相似歌曲做推荐4. 总结音乐App的功能越来越强大,不仅可以自己选歌听,还可以根据你听歌的口味偏好, 给你推荐可能会喜爱的音乐,有时候,推荐的还非常适合你的口味。1. 算…

阿里P8架构师谈:分布式事务的解决方案,以及原理、总结

分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在这几年越来越火的微服务架构中,几乎可以说是无法避免,本文就围绕分布式事务各方面与大家进行介绍。 事务 1.1 什么是事务 数据库…

美团NLP中心算法实习生内推啦!

星标/置顶小屋,带你解锁最萌最前沿的NLP、搜索与推荐技术部门介绍搜索与NLP部是美团人工智能技术研发的核心团队,致力于打造高性能、高扩展的搜索引擎和领先的自然语言处理核心技术和服务能力,依托搜索排序,NLP(自然语…

B+树 -- MySQL数据库索引

文章目录1. 定义清楚问题2. 尝试学过的数据结构解决问题3. 改造二叉查找树来解决问题4. 总结为了加速数据库中数据的查找速度,我们常对表中数据创建索引。数据库索引是如何实现的呢?底层使用的是什么数据结构和算法呢? 1. 定义清楚问题 如何…

创建python的虚拟环境(图文教程),并使用。

创建python的虚拟环境 第一步:打开anaconda命令行,即打开anaconda prompt。 base的主环境切换到虚拟环境nlp (base) C:\Users\user>conda env list 查看环境列表 (base) C:\Users\user>conda create -n nlp python 创建一个虚拟环境&#xff0…

领域应用 | 到底什么时候使用图数据库?

本文转载自公众号:TigerGraph。图数据库作为近两年快速发展的新型数据受到了市场极大的关注。但对于很多行业而言,图数据库还是一个很新的概念,企业管理人员和技术人员面临着同样的问题:企业的业务适不适合使用图?到底…

常用的后端性能优化六种方式:缓存化+服务化+异步化等

后端优化的六种方法: 1.硬件升级 硬件问题对性能的影响不容忽视。 举一个例子:一个DB集群经常有慢SQL报警,业务排查下来发现SQL都很简单,该做的索引优化也都做了。后来DBA同学帮忙定位到问题是硬件过旧导致,将机械硬…

有钱可以多任性?OpenAI提出人肉模型训练,文本摘要全面超越人类表现!

文 | 小轶背景三个多月前,OpenAI的GPT-3在NLP界掀起轩然大波。就在上周,视金钱如粪土的OpenAI团队又在文本摘要方面推出了最新力作,全方位超越人类表现。其亮点在于:以人类偏好替代自动化评测方法(如ROUGE、BLUE&#…

数据挖掘第一次作业

我先大概写了写,还有一些读过的论文没有往上放,一些论文之间的联系线条没有搞出来。 就先这样吧!有空再搞,我现在想去玩板子啦!

A*搜索算法--游戏寻路

文章目录1. 算法解析2. 总结仙剑奇侠传这类MMRPG游戏中,有人物角色 自动寻路功能。当人物处于游戏地图中某位置时,点击另一个相对较远的位置,人物就会自动地绕过障碍物走过去。这个功能是怎么实现的呢?1. 算法解析 这是一个非常典…

阿里P8架构师谈:应用后端+移动端的性能优化指标,以及性能优化方法

性能优化专题 阿里P8架构师谈:MySQL数据库的索引原理、与慢SQL优化的5大原则 阿里P8架构师谈:Web前端、应用服务器、数据库SQL等性能优化总结 大型网站Web前端优化最佳实践,以及最全优化工具集锦 阿里P8架构师谈:多线程、架构、…

无主题

厦门月亮少 20191003 之前突然遇到个bug,解决好久无果,开始干点别的事情,大约四天后的今天,我打开程序想解决一下,然后,调试半天无果,妈妈突然微信和我聊天了,聊完以后往终端一瞥&a…

PyTorch Trick集锦

文 | z.defying知乎来源 | https://zhuanlan.zhihu.com/p/76459295前言本文整理了13则PyTorch使用的小窍门,包括了指定GPU编号、梯度裁剪、扩展单张图片维度等实用技巧,能够帮助工作者更高效地完成任务。1、指定GPU编号2、查看模型每层输出详情3、梯度裁…

论文浅尝 | 利用推理链进行视觉问题回答

论文笔记整理:吴杨,浙江大学计算机学院,知识图谱、NLP方向。http://papers.nips.cc/paper/7311-chain-of-reasoning-for-visual-question-answering.pdf动机在视觉问题回答中,较为复杂的问题经常需要多步骤的推理才能够回答&#…

阿里P8架构师谈:数据库、JVM、缓存、SQL等性能调优方法和原则

编辑 性能优化基本是BAT等一线互联网公司程序员必备的技能,以下为大家完整揭晓性能完整的优化方案和方法:包含web网站调优、数据库、JVM调优、架构调优等方案。 第一:Web网站调优 1、尽可能减少HTTP请求:图片合并 (cs…

知乎招聘搜索算法实习生!邀你共建知乎搜索引擎!

星标/置顶小屋,带你解锁最萌最前沿的NLP、搜索与推荐技术部门介绍搜索算法团队是知乎核心算法团队之一,负责知乎搜索框背后的各项算法工作。我们团队一直非常重视新技术在搜索场景的探索和落地,包括但不限于 NLP,排序,…

论文浅尝 | 主题感知的问答生成

Citation: XingC, Wu W, Wu Y, et al. Topic aware neural response generation[C]//Thirty-FirstAAAI Conference on Artificial Intelligence. 2017.动机人机对话在 AI 和 NLP 领域是一项具有挑战性的工作。现存的对话系统包括任务导向的对话系统和非任务导向的聊天机器人。在…

.halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

尊敬的读者: 网络安全是当今数字时代的一大挑战,各种勒索病毒如.halo病毒层出不穷,对用户和企业的数据安全构成了严重威胁。本文将介绍.halo勒索病毒,以及如何恢复被其加密的数据文件,同时提供预防措施。在面对被勒索…