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

2018-02-03 13:27:48 +08:00
 waylybaye

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

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

产品角度的一点点分享

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

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

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

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

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

技术角度的一点点小分享

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

顺便求个关注

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

7067 次点击
所在节点    分享创造
47 条回复
f0rger
2018-02-03 19:10:33 +08:00
支持一波,本来还想建议说增加个自定义号码的,结果就出了,接下来要支持正则了吧
thankfish
2018-02-03 20:33:17 +08:00
熊猫发在 v2 的第一天两个账号都支持了(欧区和中区)。和 up 的习惯完全一样,我也认为这些就是骚扰短信,肥肠好用。这种细心的照顾其他用户需求的行为再给个赞,有好作品了继续支持。
goodbest
2018-02-03 20:59:42 +08:00
我认为 iOS12 的时候苹果一定会开放 iMessage 的短信过滤 API,然后“再一次改变世界”
手动 doge
CatCode
2018-02-03 21:15:09 +08:00
还是很喜欢这个 APP 的。
只是最近 B 站会员购买漫展门票和东航买机票的短信被当作广告拦截了。已经提交了样本为正常短信。
waylybaye
2018-02-03 22:59:59 +08:00
@tulongtou #18 主要是 CoreML 没有提供学习的机制,我自己要在手机上实现下分类算法感觉挺麻烦的 😂
Liir
2018-02-03 23:01:40 +08:00
有的时候会抽风,把不应该过滤的验证码短信都过滤了,把应该过滤的广告短信全都放进来了。然后把他放进来的垃圾短信拿到 app 里面去验证,却能正确识别……
waylybaye
2018-02-03 23:02:01 +08:00
@wangkq #19 模型更新的方式是更新 App,如果开了 App Store 自动更新就啥都不用管了

@wwqgtxx #20 感谢支持 🤪

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

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


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


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

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

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

@Aether #39 这个没办法,苹果只给了判断的接口,没给其它权限。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/428192

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX