V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
waylybaye
V2EX  ›  分享创造

「熊猫吃短信」不仅会 ML 还支持自定义规则了

  •  1
     
  •   waylybaye · 2018-02-03 13:27:48 +08:00 · 7272 次点击
    这是一个创建于 2469 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前情传送门 → 熊猫吃短信:全新的基于机器学习的垃圾短信过滤应用

    在最近的几个版本迭代中,我新收集到了四万多条短信样本,并扩充到了熊猫的模型中。我个人很喜欢 ML 这种流程,只要不停的喂数据就好了,不用改一行代码,它就能变的更好……

    熊猫吃短信 on AppStore

    产品角度的一点点分享

    由于用户群扩大,在一条短信是不是垃圾短信上有了越来越多的分歧… 比如,有些人认为「送你一张优惠券」应该是正常短信,有些人认为要看优惠券面值和门槛来区分,我认为所有这种都是骚扰短信……

    再比如理财类的短信,「 XX 基金推荐购入」,短信本身是否有价值,取决于是否是用户订阅的,发给 A 用户可能是有用的信息,发给 B 用户就是骚扰短信了。

    我在中间一个版本中,花了很多天时间重新标注了几万条短信样本,从二值分类(正常和垃圾短信)改成了多值分类(正常、广告、不重要、公益等),试图解决一部分问题,但是多值分类会让机器学习的模型成倍增长,并且超过扩展的内存限制( iOS 短信扩展的内存限制非常低)后来经过多次尝试后我最终选择了降维后的三分类(正常、广告、不重要)模型( 200Kb 大小)。

    用户的需求总是不同的,我尽可能的让熊猫的预测结果满足大部分的期望。虽然我很希望用 ML 来解决所有问题,但是目前还没有办法在手机上动态调整模型,就算可以,一个用户喂上十几条短信也是很难将熊猫吃了几万条短信形成的思维改过来的……

    所以最终我还是加了号码、关键词黑、白名单的功能,让用户可以简单粗暴的自定自己的需求。对于常见的短信模式不建议加关键词来拦截,比如退订,你要相信熊猫有足够的智力分辨带「退订」的是不是垃圾短信…… 建议只对一些特有的情况加关键词,比如「 XX 手机报」「 XX 中学」等

    技术角度的一点点小分享

    起初我用 python 训练的模型,转换成 CoreML 后会有一点点结果不一样,因为分词算法不一样。由于把带词库的算法移植到 iOS 上很难(光是加载词库就超过 iOS 扩展的内存限制了,直接就会 OOM )所以我就反过来用 pyobjc 直接调用 CoreFoundation 的分词算法,保证训练和预测时分词一模一样。除了性能有点低外,效果还不错,就是这个分词算法有点笨(

    顺便求个关注

    全干的独立开发者一枚,靠卖 App 为生。会 Python、移动开发、前端,略懂设计。目前作品有 HyperApp、Ping、Cloud Speed、熊猫吃短信。

    47 条回复    2018-02-07 11:37:21 +08:00
    3a3Mp112
        1
    3a3Mp112  
       2018-02-03 13:30:50 +08:00
    「 XX 基金推荐购入」 不管对任何用户来说都应该是垃圾短信。 支持我的点个赞
    waylybaye
        2
    waylybaye  
    OP
       2018-02-03 13:36:10 +08:00
    @3a3Mp112 好像有人专门订阅了此类推荐的,我只是拿这个做个类比(
    wadjj
        3
    wadjj  
       2018-02-03 13:38:48 +08:00 via iPhone
    我觉得这里存在的问题是苹果的机制本质上不是根据单条内容来决定过滤的,因为一条垃圾被过滤整个号码就被过滤。在这个前提下,就不可能完美,只能在过严或过松之间平衡。
    wadjj
        4
    wadjj  
       2018-02-03 13:40:52 +08:00 via iPhone
    我觉得本身苹果的机制需要改,逻辑模型就应该是垃圾 不重要 正常,只有发纯粹的垃圾信息的号码才应该被彻底干掉,不重要信息可以弱提醒
    lzmbbg
        5
    lzmbbg  
       2018-02-03 13:51:59 +08:00 via iPhone
    今天收到两条澳门短信没识别
    waylybaye
        6
    waylybaye  
    OP
       2018-02-03 13:53:14 +08:00
    @wadjj 是的,粒度应该更小些,可以只过滤单条内容就行了。其实短信这种东西已经快被边缘化了,又不开放,估计很难出现创新了
    waylybaye
        7
    waylybaye  
    OP
       2018-02-03 13:53:45 +08:00
    @lzmbbg 澳门的是 iMessage 吧,iMessage 不让过滤…
    ch3nOr
        8
    ch3nOr  
       2018-02-03 14:00:33 +08:00   ❤️ 1
    很好用,继续加油。
    lzmbbg
        9
    lzmbbg  
       2018-02-03 14:33:11 +08:00 via iPhone
    @waylybaye 原来如此,谢谢。
    oh
        10
    oh  
       2018-02-03 14:42:38 +08:00 via iPhone
    原来楼主就在 V2 啊… 支持一下
    如果有什么需要帮助的也可以说哈
    oh
        11
    oh  
       2018-02-03 14:42:54 +08:00 via iPhone
    有什么想找合作的也可以说
    EchoChan
        12
    EchoChan  
       2018-02-03 14:46:44 +08:00 via iPhone
    支持!
    waylybaye
        13
    waylybaye  
    OP
       2018-02-03 15:04:47 +08:00
    @ch3nOr @EchoChan 感谢支持 🤪

    @oh 你这话说的我有点懵 …
    tulongtou
        14
    tulongtou  
       2018-02-03 15:15:51 +08:00 via iPhone
    可以做到每个用户自己有模型嘛?就是要注册完单独存自己的过滤规则这样的
    nathanw
        15
    nathanw  
       2018-02-03 15:25:47 +08:00 via iPhone
    之前卸载了,但发现过滤依然存在,系统设置禁用也是一样,希望提供个禁用功能,仅提供自定义
    cai314494687
        16
    cai314494687  
       2018-02-03 15:27:10 +08:00
    熊猫吃短信 有几次把我收的验证码都过滤掉了
    waylybaye
        17
    waylybaye  
    OP
       2018-02-03 16:18:10 +08:00
    @tulongtou 这个有点难,其实也不方便,因为要喂上几百条才能有可以用的一个模型吧,我感觉大部分用户是没有这个兴趣自己从头调教的…

    @nathanw 你把过滤选项全取消就可以了。禁用或者卸载过滤器后系统好像并不会重置信息的标志位。

    @cai314494687 那是一个号码混着发正常短信和垃圾短信的吧,这种情况还真没好办法,如果需要的话只能给号码加白名单
    tulongtou
        18
    tulongtou  
       2018-02-03 17:54:08 +08:00 via iPhone
    @waylybaye 可以有一个默认的模型啊,就像先在这样写在 APP 里,然后自己喂就可以扩展自己的模型,然后存到 iCloud 里,这样即使换手机也不会丢掉模型。当然用户也可以选择把自己的模型上传给你
    wangkq
        19
    wangkq  
       2018-02-03 18:39:29 +08:00
    已支持,有个问题想请教一下,以后的规则是通过软件更新还是怎样
    wwqgtxx
        20
    wwqgtxx  
       2018-02-03 18:39:41 +08:00 via iPhone
    其实目前看熊猫吃短信的准确性还是可以接受的,支持作者一下
    f0rger
        21
    f0rger  
       2018-02-03 19:10:33 +08:00 via iPhone
    支持一波,本来还想建议说增加个自定义号码的,结果就出了,接下来要支持正则了吧
    thankfish
        22
    thankfish  
       2018-02-03 20:33:17 +08:00
    熊猫发在 v2 的第一天两个账号都支持了(欧区和中区)。和 up 的习惯完全一样,我也认为这些就是骚扰短信,肥肠好用。这种细心的照顾其他用户需求的行为再给个赞,有好作品了继续支持。
    goodbest
        23
    goodbest  
       2018-02-03 20:59:42 +08:00
    我认为 iOS12 的时候苹果一定会开放 iMessage 的短信过滤 API,然后“再一次改变世界”
    手动 doge
    CatCode
        24
    CatCode  
       2018-02-03 21:15:09 +08:00
    还是很喜欢这个 APP 的。
    只是最近 B 站会员购买漫展门票和东航买机票的短信被当作广告拦截了。已经提交了样本为正常短信。
    waylybaye
        25
    waylybaye  
    OP
       2018-02-03 22:59:59 +08:00
    @tulongtou #18 主要是 CoreML 没有提供学习的机制,我自己要在手机上实现下分类算法感觉挺麻烦的 😂
    Liir
        26
    Liir  
       2018-02-03 23:01:40 +08:00
    有的时候会抽风,把不应该过滤的验证码短信都过滤了,把应该过滤的广告短信全都放进来了。然后把他放进来的垃圾短信拿到 app 里面去验证,却能正确识别……
    waylybaye
        27
    waylybaye  
    OP
       2018-02-03 23:02:01 +08:00
    @wangkq #19 模型更新的方式是更新 App,如果开了 App Store 自动更新就啥都不用管了

    @wwqgtxx #20 感谢支持 🤪

    @f0rger #21 我感觉普通用户懂正则的应该很少吧,加了会多很多复杂度,其实支持也非常简单…
    Nobitasean
        28
    Nobitasean  
       2018-02-03 23:04:33 +08:00
    把我阿里小号的整个号码来的短信都给吃掉了
    waylybaye
        29
    waylybaye  
    OP
       2018-02-03 23:05:04 +08:00
    @thankfish #22 感谢支持,熊猫最早的版本非常凶,就是因为我太不能容忍广告了 🤪

    @goodbest #23 bugOS 12 不是要推迟到 19 年了么(滑稽
    waylybaye
        30
    waylybaye  
    OP
       2018-02-03 23:11:23 +08:00
    @CatCode #24 感谢支持,我下个版本会更新下模型。航空公司的有个棘手的地方是它会用同一个号码发订单消息以及广告,导致订单信息可能会被牵连。要是只有一条订单消息结果被吃了的话,那就是模型没训练好……


    @Liir #26 弱弱的问一句广告短信是新收到的吧 😂 安装前收到的和 iMessage 广告是不会过滤的… 如果是新收到的普通短信 App 内识别成功但没过滤,最可能是 iOS 内存满了,导致收到短信时过滤器的没法分配内存… 一般这种情况,重启就好了……


    @Nobitasean 阿里小号不是都成 App 内消息了么。它发的短信发件人是不一样的么?
    Liir
        31
    Liir  
       2018-02-03 23:29:30 +08:00
    @waylybaye 是普通短信,重启后恢复正常了。
    tulongtou
        32
    tulongtou  
       2018-02-03 23:59:10 +08:00 via iPhone
    模型更新不能通过 http 么?
    whlvi
        33
    whlvi  
       2018-02-04 00:05:52 +08:00 via iPhone   ❤️ 1
    支持一波 全家桶已购齐😝
    waylybaye
        34
    waylybaye  
    OP
       2018-02-04 00:06:43 +08:00
    @Liir 这个问题很诡异,我暂且把它甩锅为 iOS 的 bug 🤣 你要是遇到了第二次,可以再告诉我,不过我好像也没啥好办法了,模型已经优化到极致小了(

    @tulongtou 可以的,CoreML 模型也可以编译后下发的,不过我现在还没搞无监督学习,提价后自动学习自动下发这一套打算以后再搞。
    venster
        35
    venster  
       2018-02-04 01:26:19 +08:00   ❤️ 1
    @oh #10 我替楼主提一个:被过滤的短信不被统计入未读短信计数
    dxppp
        36
    dxppp  
       2018-02-04 06:51:08 +08:00
    楼主的帖子点击图标就可以打开链接是怎么实现的
    oh
        38
    oh  
       2018-02-04 09:36:07 +08:00 via iPhone
    @venster
    哈哈 我指的是运营推广方面 或者如果楼主想做其它项目的话也可以一起玩
    因为喜欢这样的开发者 但为什么要等其它项目呢 因为我不会 iOS 开发 233333
    Aether
        39
    Aether  
       2018-02-04 09:50:25 +08:00
    可能每个人的需求不一样。对我来说,短信里有 [ ] [ ] TD 退订 验证 10000 欢迎 字样……的都是垃圾短信。或者说,非联系人发来的短信都应该是单独一列静音无提示。

    但过滤之后还短信图标上还显示红点,我的感想是:傻。
    waylybaye
        40
    waylybaye  
    OP
       2018-02-04 12:10:25 +08:00
    @oh #38 2333 我新项目都是基于 iOS 的…

    @Aether #39 这个没办法,苹果只给了判断的接口,没给其它权限。
    merlinX
        41
    merlinX  
       2018-02-05 08:37:51 +08:00
    说实话,有一点很蠢,我是 watch 用户,然后所有被熊猫在手机上拦截掉的短信,只要我带着手表,都会在手腕上震动提醒下...应该是苹果的锅?
    waylybaye
        42
    waylybaye  
    OP
       2018-02-05 09:49:49 +08:00
    @merlinX 是啊,只有 iPad 能安装后也阻止,Mac/Watch 都不行…
    merlinX
        43
    merlinX  
       2018-02-05 10:54:21 +08:00
    @waylybaye 能提供个 watch 版本解决这个嘛?。。
    waylybaye
        44
    waylybaye  
    OP
       2018-02-05 18:46:14 +08:00
    @merlinX 目前不行,watchOS 没有这个接口……
    draftbk
        45
    draftbk  
       2018-02-06 17:16:43 +08:00
    求问最开始的短信样本哪里找
    waylybaye
        46
    waylybaye  
    OP
       2018-02-06 23:58:15 +08:00
    @draftbk 自己标注
    draftbk
        47
    draftbk  
       2018-02-07 11:37:21 +08:00
    "花了很多天时间重新标注了几万条短信样本"..嗯之前漏看了,好辛苦!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1745 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:44 · PVG 00:44 · LAX 08:44 · JFK 11:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.