「熊猫吃短信」不仅会 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、熊猫吃短信。

7096 次点击
所在节点    分享创造
47 条回复
merlinX
2018-02-05 08:37:51 +08:00
说实话,有一点很蠢,我是 watch 用户,然后所有被熊猫在手机上拦截掉的短信,只要我带着手表,都会在手腕上震动提醒下...应该是苹果的锅?
waylybaye
2018-02-05 09:49:49 +08:00
@merlinX 是啊,只有 iPad 能安装后也阻止,Mac/Watch 都不行…
merlinX
2018-02-05 10:54:21 +08:00
@waylybaye 能提供个 watch 版本解决这个嘛?。。
waylybaye
2018-02-05 18:46:14 +08:00
@merlinX 目前不行,watchOS 没有这个接口……
draftbk
2018-02-06 17:16:43 +08:00
求问最开始的短信样本哪里找
waylybaye
2018-02-06 23:58:15 +08:00
@draftbk 自己标注
draftbk
2018-02-07 11:37:21 +08:00
"花了很多天时间重新标注了几万条短信样本"..嗯之前漏看了,好辛苦!

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

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

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

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

© 2021 V2EX