[分享创造] 产品上线半月的故障、挑战与优化之路
·
博客原文: 基于贝叶斯算法的 Telegram 广告拦截机器人(二):上线半月的故障、挑战与优化之路 1 引言 半个月前,我发布了一个基于贝叶斯算法的 Telegram 广告拦截机器人 @BayesSpamSniperBot (https://t.me/BayesSpamSniperBot) 项目地址:https://github.com/ramsayleung/bayes_spam_sniper 系列文章: 基于贝叶斯算法的 Telegram 广告拦截机器人(一):从问题到产品 尽管项目代码开源,但我始终以产品思维运营它。上线半个月以来,经历了故障、用户反馈与持续优化,现将这段经历分享出来。 2 上线即故障 没想到我的产品的第一个线上故障来得这么快,发布的时候直接不可用,把正常消息都给删了,用户在各种途径都向我反馈: 故障的原因是我当时一直在收集垃圾广告的数据,太专注于垃圾广告数据,而忽略了收集的正常数据, 导致垃圾广告数据过多,消息都被认为是垃圾广告,被误删了。 通过补充大量正常消息数据,重新平衡训练集,模型逐渐恢复正常识别能力。 3 挑战 3.1 邮件与即时消息的差异 我在《基于贝叶斯算法的 Telegram 广告拦截机器人(一):从问题到产品》里面提到过: 常见的 Telegram 广告机器人是大多是基于关键字的,通过匹配关键字进行文本拦截,非常容易被发垃圾广告的人绕过。 这不禁让我想起了保罗.格雷厄姆在《黑客与画家》一书在 2002 年介绍的情况: 当时电子邮件兴起,也有非常多的垃圾邮件,常见的垃圾广告拦截方式是关键字匹配+邮件地址黑名单,但是既低效也容易被绕过。 保罗.格雷厄姆就创造性地使用贝叶斯算法(Bayes Theorem)实现了一个广告拦截器, 效果竟然出奇地好。 但产品上线之后,我发现聊天软件消息和 Email 虽然都是文字,还是有很大差别的: Email 大多时候都是长文的,内容较长,并且大多情况,一封邮件上下文本身也很完整,就有较多的内容,较高的准确度来判断是否是广告。 而 Telegram, 微信这类的即时聊天软件,聊天消息大多都不长,可能把内容分成多条消息来发,就没有完整的上下文,比如: 换 U 找我 单条消息很较难准确判断是否是广告,所以对即时消息做广告拦截本身就更难, 「短文本+无上下文」是 NLP 中的经典难题,也是本项目最大的技术挑战。…