BSS(@BayesSpamSniperBot) 是一个具备自学习能力的,基于贝叶斯定理实现的开源 Telegram 广告拦截机器人
常见的 Telegram 广告机器人是大多是基于关键字的,通过匹配关键字进行文本拦截,非常容易被发垃圾广告的人绕过。
这不禁让我想起了保罗.格雷厄姆在《黑客与画家》一书在2002年介绍的情况:
当时电子邮件兴起,也有非常多的垃圾邮件,常见的垃圾广告拦截方式是关键字匹配+邮件地址黑名单,但是既低效也容易被绕过。
保罗.格雷厄姆就创造性地使用贝叶斯算法(Bayes Theorem)实现了一个广告拦截器, 效果竟然出奇地好。
对于 Telegram 的垃圾广告而言,这不是类似的问题嘛?那我可以用类似的解决方案来解决 Telegram 广告的问题嘛
- 将机器人添加到您的群组
- 给予机器人管理员权限(删除消息(delete message ),封禁用户权限(ban user ))
- 机器人将自动开始工作
机器人会自动识别群内广告,然后删除文本消息,如果发送垃圾文本超过3次,将会被封禁。
本机器人的设计理念就是最小化打扰管理员与用户,提供简单的操作命令,并最大可能地自动化, 所以本机器人只提供以下三个命令(支持”/”开头自动补全):
删除垃圾消息并封禁用户, 需要管理员权限。
在某条你想封禁的信息下回复 /markspam
, 机器人就会自动把该条消息删除被封禁用户.
与常见的群管理机器人不同,这条命令不仅会删除垃圾消息并封禁用户, 因为这条消息还被管理员标记成垃圾文本,有非常高的置信度,所以系统就会以这条垃圾文本为训练数据,对模型进行实时更新。
下次类似的发言不仅会被识别,所有使用本机器人的群组都会受益,也会把类似的文本标记成垃圾广告
查看封禁账户列表, 需要管理员权限。
查看已封禁的用户列表,并主动解封。
投喂垃圾信息来训练,无任何权限要求,可私聊投喂或在群组内投喂.
私聊投喂:
群组内投喂:
Telegram Bot 支持两种与 Telegram 服务器交互的模式,分别是:
- Webhook: Telegram 服务器会在 Bot 收到新消息时主动回调此前 Bot 注册的地址,Bot Server 只需要处理回调的消息
- Long Polling: Bot Server 一直轮询 Telegram 服务器,看是否有新消息,有就处理,本项目使用的是此模式
Bot Server 收到消息之后,会派发到单独的 telegram_bot_worker
处理,然后根据预训练的模型判断是否是垃圾文本,如果是,调用 bot API 删除消息
Bot Server 收到消息之后,会派发到单独的 telegram_bot_worker
处理, telegram_bot_worker
会调用 bot API 删除消息并封禁用户,并插入一条训练数据,标记为垃圾文本(spam)
保存训练数据会触发 hook, 创建一个训练消息,投递到消息队列 training
, 会有另外的 worker classifier_trainer
订阅 training
消息,并使用新消息重新训练和更新模型
本项目纯粹用爱发电,如果想支持本项目,有以下的方式进行贡献:
- 通过
/feedspam
命令投喂训练数据 - 加入 BSS 支持群,或作者私人频道,在群里发广告
- Sponsor 作者
贝叶斯算法本质是个概率算法,如果它没有见过类似的广告,那么它就没法判断是否垃圾广告 :(
稍安勿躁,你需要做只是使用 /markspam
删除消息并封禁用户,就可以帮助训练这个bot, 所有使用这个 bot 的用户都会因此受益