但是这样识别时候要先抓取微博账号的 profile 页信息、关系网络、微博文本等等信息,至少需花费上百秒,无法做到实时识别。
所有我舍弃了部分抓取耗时的字段,最终精度固定在 90% 上下。
一般来说,提升一个模型的 ACC、ROC、F1,通常具有以下方法
- 扩充数据集。
- 降维。
- 正则化
正则化我在初代模型就已经用上了,最开始模型甚至不收敛,使用正则化收敛后的最终模型精度在 85% 左右。
降维对这个 spammer 模型来说可能只是加快了训练过程,实测精度并没有显著提升。
而扩充数据集是一直在做的工作,目前可能还需要一个量变等到质变的时刻。
对于一个模型能提升精度的方法都做了,所有我只能换另外一个模型方法来提升精度了。
最终选定 AdaBoost,他是三种集成学习 Bagging、Boosting、Stacking 之一的 Boosting 方法下的一种名为 "Adaptive Boosting"方法(自适应增强)的缩写。
Boosting 的核心思想是 三个臭皮匠,赛过诸葛亮。一般来说,找到弱学习算法要相对容易一些,然后通过反复学习得到一系列弱分类器,组合这些弱分类器得到一个强分类器。
AdaBoost 算法的流程不算简单,感兴趣的可以搜索下。
最终我用 AdaBoost,在和上一篇推送一样,只抓取有限不耗时特征的前提下,精度从 90% 左右直接稳定到了 95% ,识别一个给定 uid 的微博账号的 spammer 属性,耗时在 5s 以内。
最后把这个最新模型上线,视作 alpha 版本,上篇推送的模型为一般版本,长期测试 alpha 版本后,最后会覆盖一般版本。
模型网页测试地址为
https://weibo-crawl-visual.buyixiao.xyz/weibo-spammer-evaluator
其中第一个 tab 是一般版本,最后一个 tab 为 alpha 版本。
同时新增了 API 接口调用,接口地址是:
https://api.buyixiao.xyz/weibo/spammer-account-evaluate
使用 Python 调用该接口的 demo 代码如下:
代码语言:javascript复制test_token = "在此处填入你申请的 token"
def test_spammer_evaluate(user_id):
resp = requests.get(url=f'https://api.buyixiao.xyz/weibo/spammer-account-evaluate', params={
'user_id': user_id, # 必选参数,检测的微博账号 id
'token': test_token, # 必选参数,校验接口
'alpha': true # 可选参数,是否采用最新的 alpha 内测模型
})
print(resp.url)
print(resp.json())
test_spammer_evaluate(user_id="2557129567")
点击阅读原文直达微博 spammer 识别模型网页~