垃圾短信太多?试试基于机器学习的「熊猫吃短信」

作为一个依赖网络的技术宅,经常受到垃圾短信的骚扰,但直到 iOS 11苹果才终于开放了一个接口允许过滤短信。随后我尝试了几款App,但要么像腾讯管家这样需要上传短信进行云查达到较高准确率,要么需要自己一个个的编写关键词规则。作为一个非常在意隐私的懒人,我决定自己做一个(

无需任何配置,开箱即用

首先这个App不能使用网络,要在手机上离线识别。其次不需要手动配置规则,因为关键词的简单组合会在很多场景下得到错误的结果。最重要的是:要有很高的准确率。但也要有自动修正、进化的机制,因为没有什么算法能完美识别垃圾短信。

「熊猫吃短信」的诞生与成长

我把自己从使用 iPhone 4 开始到现在收到的两万多条短信导出来,清洗掉重复的通知短信后,花了好几天时间一条条的手动标注所有短信。(标注过程由于重看了几年间的所有短信,心情很复杂,又划水了几天……)

标注完数据后使用机器学习训练了几个模型来自动识别垃圾短信,交叉对比后最终选择了一个识别率和召回率都最好的算法。

它很完美的满足了我的需求(毕竟训练数据来自于我…)帮我拦截了所有垃圾短信。我在群里发布了「熊猫吃短信」的第一个测试版本。测试过程中收集到的几千条新的短信样本也被补充到模型之中,让熊猫有了一定的普适度。

被过滤后的短信会出现在一个新的标签页中

随后我发布了「熊猫吃短信」的正式版本,得到了很好的反馈。在多次的版本迭代中,用户也自愿提交了4W多条各种各样的短信样本,帮助熊猫在更多领域进行准确的判断。

能够识别各种类型的广告

无法解决的问题

当然在这个过程中,熊猫也收到了一些差评,不过这些差评其实熊猫无能为力…

  1. 无法隐藏信息的红色角标,以及阻止同步后在其它设备上提醒。

说是过滤器,其实只是一个判断器,在系统层面App唯一能做的就是判断收到的短信是不是垃圾短信,然后所有的剩余操作都是 iOS 系统完成的。包括被判定为垃圾短信后不响铃提示,但是信息的红色角标会照常显示,同时还会同步到 Mac/Watch 上继续提示。

2. 无法进行单条短信的过滤

iOS 的过滤单位是对话,一个号码即使发了几十条正常短信,但只要发一条垃圾短信,系统并不会把这条短信单独过滤,而是会过滤掉这个号码的整个对话。好在用户平时收到的各种短信大部分都是随机端口发送的,基本没有这个问题,只有一些五位数的总机号码会混着发,于是我添加了一个「不过滤五位数号码」的设置项来处理此类问题。