微博社交机器人检测工具包 - Weibo Social Bot Detection Toolkit
Project description
pybotfinder
微博社交机器人检测工具包 - Weibo Social Bot Detection Toolkit
基于随机森林的微博社交机器人检测系统,提供开箱即用的预测功能。
安装
pip install pybotfinder
快速开始 - 预测
Python API
from pybotfinder import BotPredictor
# 初始化预测器(使用包内默认模型)
predictor = BotPredictor(cookie="YOUR_WEIBO_COOKIE")
# 预测单个用户
result = predictor.predict_from_user_id("1042567781")
print(f"预测结果: {result['prediction']['label_name']}")
print(f"机器人得分: {result['prediction']['bot_score']:.4f}")
命令行
pybotfinder-predict --user-id 1042567781 --cookie "YOUR_WEIBO_COOKIE"
预测结果格式
{
'user_id': '1042567781',
'prediction': {
'label': 1, # 0=人类, 1=机器人
'label_name': '机器人', # '人类' 或 '机器人'
'bot_score': 0.95 # 机器人得分(范围0-1,值越大表示越可能是机器人)
}
}
返回值说明:
label: 预测标签,0表示人类,1表示机器人label_name: 标签名称,'人类' 或 '机器人'bot_score: 机器人得分,是模型预测该账号为机器人的概率值(范围0-1)bot_score接近1表示模型认为该账号很可能是机器人bot_score接近0表示模型认为该账号很可能是人类- 注意:
bot_score是模型输出的概率值,不是统计意义上的置信区间,应结合具体应用场景理解
训练数据来源
模型基于以下数据训练:
- 机器人样本 (4480个账号ID): 来自
bot.txt,主要为自动化营销账号和少部分LLM驱动的机器人账号 - 人类样本 (4578个账号ID): 来自以下文件:
human.txt(2269个): 普通用户账号,通过实时推文中以常用虚词为搜索词采集government.txt(597个): 政府机构账号,通过微博政务榜单采集influencer.txt(931个): 影响者账号,通过微博V影响力榜单采集media.txt(781个): 媒体账号,以"新闻"为关键词搜索相关的认证账号采集
标签分布说明:
- 由于部分账号在数据采集时可能已被封禁、删除或设置为私密,实际成功提取特征并用于训练的样本数可能少于账号ID总数
- 实际成功提取特征的样本总数:约9060个
- 数据集划分:训练集7248个(80%),测试集1812个(20%)
训练特征
模型使用46个特征进行训练,包括:
Profile-level特征 (10个)
| 特征名称 | 描述 | 类型 |
|---|---|---|
screen_name_length |
昵称长度 | 数值 |
screen_name_digit_count |
昵称中数字数量 | 数值 |
description_length |
描述长度 | 数值 |
description_has_sensitive_word |
描述中是否包含敏感词 | 二值 (0/1) |
gender_n |
性别(未知=1,其他=0) | 二值 (0/1) |
followers_count |
粉丝数 | 数值 |
friends_count |
关注数 | 数值 |
followers_friends_ratio |
粉丝/关注比例 | 数值 |
statuses_count |
微博总数 | 数值 |
is_default_avatar |
是否使用默认头像 | 二值 (0/1) |
Posts-level特征 (36个)
基本统计 (2个)
| 特征名称 | 描述 | 类型 |
|---|---|---|
posts_count |
收集到的帖子数量 | 数值 |
original_ratio |
原创微博比例 | 数值 (0-1) |
原创内容特征 (7个)
| 特征名称 | 描述 | 类型 |
|---|---|---|
avg_text_length_original |
平均文本长度 | 数值 |
avg_punctuation_count_original |
平均标点符号数 | 数值 |
std_punctuation_count_original |
标点符号数标准差 | 数值 |
avg_pic_count_original |
平均图片数 | 数值 |
avg_video_count_original |
平均视频数 | 数值 |
std_video_count_original |
视频数标准差 | 数值 |
vocabulary_diversity_original |
原创内容词汇多样性(unique词语/总词语) | 数值 (0-1) |
原创互动特征 (6个)
| 特征名称 | 描述 | 类型 |
|---|---|---|
avg_likes_original |
原创微博平均点赞数 | 数值 |
std_likes_original |
原创微博点赞数标准差 | 数值 |
avg_reposts_original |
原创微博平均转发数 | 数值 |
std_reposts_original |
原创微博转发数标准差 | 数值 |
avg_comments_original |
原创微博平均评论数 | 数值 |
std_comments_original |
原创微博评论数标准差 | 数值 |
时间特征 (7个)
| 特征名称 | 描述 | 类型 |
|---|---|---|
avg_post_interval |
平均发帖间隔(秒) | 数值 |
std_post_interval |
发帖间隔标准差(秒) | 数值 |
peak_hourly_posts |
峰值小时发帖数 | 数值 |
peak_daily_posts |
峰值日发帖数 | 数值 |
avg_daily_posts |
平均每天发帖数量 | 数值 |
std_daily_posts |
每天发帖数量标准差 | 数值 |
hour_distribution_mean |
24小时分布均值 | 数值 (0-23) |
hour_distribution_std |
24小时分布标准差 | 数值 |
hour_distribution_kurtosis |
24小时分布峰度 | 数值 |
hour_distribution_skewness |
24小时分布偏度 | 数值 |
情感特征 (8个,基于SnowNLP,原创和转发分开计算)
| 特征名称 | 描述 | 类型 |
|---|---|---|
avg_sentiment_positive_original |
原创帖子积极情感平均值 | 数值 (0-1) |
std_sentiment_positive_original |
原创帖子积极情感标准差 | 数值 |
avg_sentiment_negative_original |
原创帖子消极情感平均值 | 数值 (0-1) |
std_sentiment_negative_original |
原创帖子消极情感标准差 | 数值 |
avg_sentiment_positive_repost |
转发评价积极情感平均值 | 数值 (0-1) |
std_sentiment_positive_repost |
转发评价积极情感标准差 | 数值 |
avg_sentiment_negative_repost |
转发评价消极情感平均值 | 数值 (0-1) |
std_sentiment_negative_repost |
转发评价消极情感标准差 | 数值 |
其他特征 (3个)
| 特征名称 | 描述 | 类型 |
|---|---|---|
location_ratio |
包含地理位置的微博比例 | 数值 (0-1) |
repost_user_entropy |
转发用户信息熵 | 数值 |
vocabulary_diversity_repost |
转发评价词汇多样性(unique词语/总词语) | 数值 (0-1) |
模型评估
整体性能
| 指标 | 数值 |
|---|---|
| 准确率 (Accuracy) | 98.29% |
| 交叉验证F1分数 | 0.9732 (±0.0030) |
| 测试集F1分数 (宏平均) | 0.9829 |
| 测试集F1分数 (加权平均) | 0.9829 |
各类别性能
| 类别 | 精确率 (Precision) | 召回率 (Recall) | F1-score |
|---|---|---|---|
| 人类 (类别0) | 0.9702 | 0.9967 | 0.9833 |
| 机器人 (类别1) | 0.9966 | 0.9688 | 0.9825 |
注意事项
-
Cookie获取:
- Cookie需要从微博网页版获取
- 访问 https://weibo.com 并登录
- 打开浏览器开发者工具(F12)
- 在Network标签中找到任意请求,复制请求头中的Cookie值
- Cookie格式示例:
SUB=xxx; SUBP=xxx; ... - Cookie用于访问微博API采集用户数据,请妥善保管
-
模型文件:
- 包内已包含训练好的模型文件 (
bot_detection_model.pkl) - 无需额外下载或训练,安装后即可使用
- 包内已包含训练好的模型文件 (
-
数据采集:
- 预测时需要采集用户数据,请确保网络连接正常
- 采集过程可能需要几秒钟时间
- 重要:如果用户的profile数据采集失败(账号不存在、被封禁或Cookie无效),预测将返回错误信息,不会进行预测
-
返回值说明:
label: 预测标签,0表示人类,1表示机器人label_name: 标签名称,'人类' 或 '机器人'bot_score: 机器人得分,是模型预测该账号为机器人的概率值(范围0-1)bot_score接近1表示模型认为该账号很可能是机器人bot_score接近0表示模型认为该账号很可能是人类- 重要提示:
bot_score是模型输出的概率值,不是统计意义上的置信区间或假设检验的p值,应结合具体应用场景理解和使用,避免过度解读
-
模型评估说明:
- 模型评估结果只代表在测试集上的表现,不代表真实情境表现
许可证
本项目采用 MIT 许可证(仅限非商业用途)。详见 LICENSE 文件。
重要提示:
- 本软件仅限非商业用途使用
- 禁止商业使用,包括但不限于在商业产品、服务中使用或用于商业盈利
- 如需商业使用,请联系作者获取授权:xiaomeng7-c@my.cityu.edu.hk
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
pybotfinder-0.3.0.tar.gz
(1.9 MB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pybotfinder-0.3.0.tar.gz.
File metadata
- Download URL: pybotfinder-0.3.0.tar.gz
- Upload date:
- Size: 1.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2bad9ed9cbe66e05b1175d47a6db132712fe948002fe04c0cab7ca559e1f3a3b
|
|
| MD5 |
a8e15762fd6e704c707d4aac8e803c04
|
|
| BLAKE2b-256 |
420366a5fb8f3cff8e56d6d866908a775fe0a05e33f2dbca5eab39beb065d93e
|
File details
Details for the file pybotfinder-0.3.0-py3-none-any.whl.
File metadata
- Download URL: pybotfinder-0.3.0-py3-none-any.whl
- Upload date:
- Size: 1.9 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f5fd1d08d88ac109ccb4cccb5ea72d73c9c74b32f34a04559b3c28f2c3225173
|
|
| MD5 |
8d8e8d9b94c2ff46063bb55dbb7a0d9a
|
|
| BLAKE2b-256 |
f4dece5cf197f3decfd66e173ea33350e23d103a3fe4b1de3859a3956cee69ce
|