Skip to main content

微博社交机器人检测工具包 - Weibo Social Bot Detection Toolkit

Project description

pybotfinder

pybotfinder 是一个面向计算社会科学研究的 Python 包, 用于对微博(Weibo)用户进行社交机器人检测。 该工具包基于随机森林分类模型, 依据用户资料和最近发布的30条内容, 提取身份与行为模式特征, 支持研究者在社交媒体分析、舆情研究和自动化用户识别任务中, 快速地完成机器人检测。


安装

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 是模型输出的概率值,不是统计意义上的置信区间,应结合具体应用场景理解

训练数据来源

模型基于以下数据训练:

  • 机器人样本 (4994个账号ID): 来自 bot.txt,主要为自动化营销账号和少部分LLM驱动的机器人账号
  • 人类样本 (5091个账号ID): 来自以下文件:
    • human.txt (2782个): 主要为通过实时推文中以常用虚词为搜索词采集的账号和少部分手动采集的人类账号
    • government.txt (597个): 政府机构账号,通过微博政务榜单采集
    • influencer.txt (931个): 影响者账号,通过微博V影响力榜单采集
    • media.txt (781个): 媒体账号,以"新闻"为关键词搜索相关的认证账号采集

标签分布说明:

  • 账号ID总数:10,085个(机器人:4,994个,人类:5,091个)
  • 由于部分账号在数据采集时可能已被封禁、删除或设置为私密,无法提取到有效的profile数据,这些账号被排除在训练数据之外
  • 实际成功提取特征并参与训练的样本:9,839个(机器人:4,780个,人类:5,059个)
  • 数据集划分:训练集7,871个(80%),测试集1,968个(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 原创微博评论数标准差 数值

时间特征 (10个)

特征名称 描述 类型
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) 97.00%
交叉验证F1分数 0.9714 (±0.0055)
测试集F1分数 (宏平均) 0.9699
测试集F1分数 (加权平均) 0.9700

各类别性能

类别 精确率 (Precision) 召回率 (Recall) F1-score
人类 (类别0) 0.9483 0.9960 0.9716
机器人 (类别1) 0.9956 0.9425 0.9683

注意事项

  1. Cookie获取:

    • Cookie需要从微博网页版获取
    • 访问 https://weibo.com 并登录
    • 打开浏览器开发者工具(F12)
    • 在Network标签中找到任意请求,复制请求头中的Cookie值
    • Cookie格式示例: SUB=xxx; SUBP=xxx; ...
    • Cookie用于访问微博API采集用户数据,请妥善保管
  2. 模型文件:

    • 包内已包含训练好的模型文件 (bot_detection_model.pkl)
    • 无需额外下载或训练,安装后即可使用
  3. 数据采集:

    • 预测时需要采集用户数据,请确保网络连接正常
    • 采集过程可能需要几秒钟时间
    • 如果用户的profile数据采集失败(账号不存在、被封禁或Cookie无效),预测将返回错误信息,不会进行预测
  4. 返回值说明:

    • label: 预测标签,0表示人类,1表示机器人
    • label_name: 标签名称,'人类' 或 '机器人'
    • bot_score: 机器人得分,是模型预测该账号为机器人的概率值(范围0-1)
      • bot_score 接近1表示模型认为该账号很可能是机器人
      • bot_score 接近0表示模型认为该账号很可能是人类
      • 重要提示bot_score 是模型输出的概率值,不是统计意义上的置信区间或假设检验的p值,应结合具体应用场景理解和使用,避免过度解读
  5. 模型评估说明: 模型评估结果仅反映其在测试集上的性能,未必能够直接外推至真实应用情境。因此,在实际部署或研究应用之前,建议基于具体应用场景下的人工标注数据对模型进行进一步评估。

许可证

本项目采用 MIT 许可证。详见 LICENSE 文件。

Project details


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.2.tar.gz (1.3 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pybotfinder-0.3.2-py3-none-any.whl (1.3 MB view details)

Uploaded Python 3

File details

Details for the file pybotfinder-0.3.2.tar.gz.

File metadata

  • Download URL: pybotfinder-0.3.2.tar.gz
  • Upload date:
  • Size: 1.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for pybotfinder-0.3.2.tar.gz
Algorithm Hash digest
SHA256 bbabedb74fee1b203cdf5229d6497264eb79ef2b20114f80ecfdf8f788b73c07
MD5 83f0bff5be62ac9181bb60afbf01d0c0
BLAKE2b-256 9dbfeebe7db0f1286c997b9ce51ff61434e43f97e51e83e6d5cab6548b2620f9

See more details on using hashes here.

File details

Details for the file pybotfinder-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: pybotfinder-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for pybotfinder-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 391ffbd7bd356cd11ac09ddb612ffb9522676f95deb4c9910ade757320e38c1a
MD5 3b77409aaceaba393ae481b59f100eae
BLAKE2b-256 0e025c9c05f6d3cb633165439c23cdb5d7e6c872b66a6cd669e4b2c0d89b803a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page