• 木木匠
    2019-01-11
    我觉得这种分类过滤,最好的可能是机器学习,通过大量的垃圾短信样本来训练特征,最后可以达到过滤短信和邮件的目的,而且这种方法应该效果更好,至于电话拦截,实际上就是电话号码黑名单的问题,我觉得用布隆过滤器可以满足通用场景,一般实际场景中,对于这种电话是提示谨慎接听,但是我们可以本地和云端结合处理,解决部分的误报问题,当判断是黑名单的时候再去云端查,确认是否是真的黑名单。这样用布隆过滤器+云端也是一种方式
     1
     23
  • slvher
    2019-01-11
    对于短信文本,机器学习尤其是 NLP 方向的很多算法可用于 anti-spam。文本分类任务,特征工程做得稍用心的话,判别式模型(典型如 logistic regression)的效果通常好于生成式模型(典型如 naive-bayes)。

    对于电话号码数字,感觉用正则或定时拉取黑名单比 ml 模型简单可靠。
    
     18
  • C_love
    2019-01-14
    为啥P(W1W2...Wn|垃圾短信)是独立事件,能够拆成乘积,而P(W1W2...Wn)不是独立事件?

    作者回复: 也是也是。

     1
     12
  • 纯洁的憎恶
    2019-01-11
    黑名单过滤法基于经验判断,难以确保及时性。基于内容规则的过滤法容易被针对,而且动态调整规则的成本较高。基于朴素贝叶斯算法的内容概率过滤法,既可以确保及时性,又能够较好的基于实际情况的变化而变化,具备初步智能特性。因为贝叶斯方法是基于先验判断,然后根据现实反馈动态调整判断的算法。

    当绝对值不好计算时,可以结合场景需要,合理使用相对值代替绝对值,以简化计算难度、消除无法计算的因子。
    
     10
  • 小新村小学扛霸子
    2019-04-25
    P(W1,W2...Wn同时出现在一条短信中) = P(W1出现在短信中) * P(W2出现在短信中) *....* P(Wn出现在短信中)这样计算应该就可以吧
    
     7
  • Geek_477c02
    2019-01-13
    P( Wi出现在短信中 | 短信是垃圾短信)表示垃圾短信中包含 Wi这个单词的概率有多大。

    如果wi出现的概率是0怎么办,连乘导致结果是0了?
     1
     4
  • junjun
    2019-09-26
    以前把算法一直和程序联系起来,现在突然发现,算法存在我们生活的各个方面,任何地方都是算法,比如你今天准备吃啥,其实也是一个算法。
    
     2
  • ldd
    2019-04-08
    请问,基于黑名单的过滤方式,用布隆过滤器只能存储Bool值,即是否存储,但是还要实现“标记次数来判断是否达到阈值”,就需要额外的散列表了,需要的内存空间依然很大,方案上还不如直接用散列表来的更好吧?

    作者回复: 你说的这是一种情况,大部分情况,都不会命中,也就说,都不是骚扰电话。

    
     2
  • loda
    2019-04-06
    朴素贝叶斯讲的很好
    
     2
  • Clement
    2019-01-21
    图片上的数据和公式使用什么软件画出来的?

    编辑回复: iPad Paper

    
     2
  • 🐱您的好友William...
    2019-01-21
    1.为啥叫naive:因为假设了条件分布中各个feature是独立出现的,feature之间啥关系没有!所以很naive,很朴素,很“傻”,但是效果真的不一定差,而且在没开发出更好的模型之前直接进行统计计算就能得出结果,且可以做成online的,怎么看都不亏啊(反正你也得用统计数据做其他的事,顺道做了呗老弟)!

    2.如果概率为0了怎么办!可以使用laplacian smoothing,简单的来说就是在分子分母上面加数来保证不会有0的出现。直接使用很小的数是可以的(遵循频率学派频率为大),但更精确的在分母分子上加什么,这个其实是与贝叶斯学派所认为的先验分布有关,就是在不看sample时,我们的先验知识对这种情况的估计是多少(比如我在不统计工科学校男女比例的时候就有了一定的先验知识:7:1,之后我再统计其实是对我的先验估计的一种调整)。
    展开
    
     2
  • ban
    2019-01-13
    https://www.jianshu.com/p/5cf3a155b2f0
    找到另外一个相亲的例子
    
     2
  • 墨禾
    2019-01-11
    其实这个问题就是个分类预测问题,传统的机器学习方法中的分类预测算法都可以用
    
     2
  • 短迪大魔王
    2020-02-08
    f分母没那么简单,P(w)=P(A)P(W|A)+P(B)P(W|B),A是正常邮件,B是垃圾邮件。所以贝叶斯公式分母要展开,每一项都是独立计算
    
     1
  • 兴宇是谁
    2020-01-04
    小明不上学的概率:0.3。
    下雨的概率:0.4。
    同时发生的概率:0.3*0.4=0.12。
    但是从样本里看是0.2啊。
    这块想不明白哇老师。

    是垃圾短信情况下,同时包含某些词的概率可以拆成分别的乘积。类比小明不上学下雨的问题,真的可以这么拆么?
    展开
    
     1
  • 郑家庄赶大车的老郑
    2019-12-22
    所以小明因为下雨而不上学的概率是 P(B|A)=2/3。
    这说法虽然没错,但似乎有点歧义,把“而”改成“才”会不会更好?
    
     1
  • lttzzlll
    2019-02-17
    上一节我们讲了,布隆过滤器最大的特点就是比较省存储空间,所以,用它来解决这个问题再合适不过了。如果我们要存储 500 万个手机号码,我们把位图大小设置为 10 倍数据大小,也就是 5000 万,那也只需要使用 5000 万个二进制位(5000 万 bits),换算成字节,也就是不到 7MB 的存储空间。比起散列表的解决方案,内存的消耗减少了很多。

    这段话中:对于需要使用的内存空间有疑问,按照上一节的处理方式,把手机号码转换为整数,使用的内存空间应该是整数的范围 * 10 bits, 而不是手机号的数量 * 10 bits? 或者,这里不把手机号码转化为整数,用其他的哈希方法,把这500w个手机号映射到[0, 500W)这个区间内?

    作者回复: 布隆过滤器本身就是解决位图消耗空间比较多的问题。位图的大小是数据的范围。而布隆过滤器的大小应该是小于位图大小的,所以肯定就是数据的范围了。

     1
     1
  • Kudo
    2019-01-11
    朴素贝叶斯模型的一个基本假设是条件独立性,即假定w1, w2, ..., wn之间相互独立。这是一个较强的假设,正是这一假设,使朴素贝叶斯的学习与预测大为简化,且易于实现,其缺点是分类的准确率不一定高。
    
     1
  • 注定非凡
    2020-02-02
    算法解析1. 基于黑名单的过滤器1,维护一个骚扰电话号码和垃圾短信发送号码的黑名单。①:如果黑名单中的电话号码不多,可以使用散列表、二叉树等动态数据结构来存储,对内存的消耗并不会很大 每个号码看作一个字符串,并且假设平均长度是 16 个字节,那存储 50 万个电话号码,大约需要 10MB 的内存空间,但当号码超过500万个时,使用散列表就需要100MB空间,这个对用户的手机而言是不可接受的。②:布隆过滤器最大的特点就是比较省存储空间,所以,用它来解决这个问题很合适 存储 500 万个手机号码,把位图大小设置为 10 倍数据大小,也只需要5000 万 bits,换算成字节不到 7MB 的存储空间③:还有一种时间换空间的方法,可以将内存的消耗优化到极致 把黑名单存储在服务器端上,服务器端来做过滤和拦截的核心工作。手机端只将要检查的号码发送给服务器端,服务器端将判断结果返回给手机端,但网络通信通常比较慢2. 基于规则的过滤器


    1,基于规则的过滤方式
        ①:预先设定一些规则,如果某条短信符合这些规则,我们就可以判定它是垃圾短信
        ②:但如果短信只是满足其中一条规则,如果就判定为垃圾短信,会存在比较大的误判的情况。所以可以综合多条规则进行判断
        ③:或每条规则对应一个不同的得分,满足哪条规则,就累加对应的分数,某短信的总得分超过阈值,才会被判定为垃圾短信

    2,难点问题
        过滤规则要实到执行层面,其实还有很大的距离,还有很多细节需要处理,如第一条规则中,我们该如何定义特殊单词;第二条规则中,我们该如何定义什么样的号码是群发号码等等
    3,具体细节
        我们该如何定义特殊单词
        虽然可以基于概率统计的方法,借助计算机强大的计算能力,找出哪些单词最常出现在垃圾短信中,将这些最常出现的单词,作为特殊单词,用来过滤短信。
        不过这种方法的前提是,要有大量的样本数据,并且每条短信都做好了标记,它是垃圾短信还是非垃圾短信。
        如对 1000 万条短信,
        ①,进行分词处理(借助中文或者英文分词算法),去掉“的、和、是”等没有意义的停用词(Stop words),得到 n 个不同的单词
        ②,针对每个单词,统计有多少个垃圾短信出现了这个单词,有多少个非垃圾短信会出现这个单词,进而求出每个单词分别出现在垃圾短信,非垃圾短信中的概率。
        ③,如果某个单词出现在垃圾短信中的概率,远大于出现在非垃圾短信中的概率,则可这个单词作为特殊单词,用来过滤垃圾短信
    4,缺点问题
            一方面,这些规则受人的思维方式局限,规则未免太过简单;
            另一方面,垃圾短信发送者可能会针对规则,精心设计短信,绕过这些规则的拦截
    3. 基于概率统计的过滤器


    1,理论基础
        ①:这种基于概率统计的过滤方式,基础理论是基于朴素贝叶斯算法
    2,实践方法
        ①:基于概率统计的过滤器,是基于短信内容来判定是否是垃圾短信
        ②:需要把短信抽象成一组计算机可以理解并且方便计算的特征项,用这一组特征项代替短信本身,来做垃圾短信过滤
        ③:可以通过分词算法,把一个短信分割成 n 个单词。这 n 个单词就是一组特征项,全权代表这个短信。
        ④:因此,判定一个短信是否是垃圾短信的问题,就变成了,判定同时包含这几个单词的短信是否是垃圾短信
    3,

    使用概率,来表征一个短信是垃圾短信的可信程度。如果用公式将这个概率表示出来,就是下面这个样子:


    尽管我们有大量的短信样本,但是我们没法通过样本数据统计得到这个概率。没有样本,也就无法计算概率。所以这样的推理方式虽然正确,但是实践中并不好用。所以我们需要通过朴素贝叶斯公式,将这个概率的求解,分解为其他三个概率的求解。


    基于下面这条著名的概率规则来计算。

    独立事件发生的概率计算公式:P(A*B) = P(A)*P(B)

    如果事件 A 和事件 B 是独立事件,两者的发生没有相关性,事件 A 发生的概率 P(A) 等于 p1,事件 B 发生的概率 P(B) 等于 p2,那两个同时发生的概率 P(A*B) 就等于 P(A)*P(B)。
    基于这条独立事件发生概率的计算公式,我们可以把 P(W1,W2,W3,…,Wn 同时出现在一条短信中 | 短信是垃圾短信)分解为下面这个公式:



    在求解 p1 和 p2 倍数(p1/p2)的时候,我们也就不需要这个值。
    展开
    
    
  • 宇飞
    2020-01-10
    垃圾邮件,短信,骚扰电话,可以继续规则,黑名单方式判断,我觉得也可以基于随机森林的方式判断,抽取特征值归类,还有朴素贝叶斯算法
    
    
我们在线,来聊聊吧