App 端免签名接口(设备注册 + detail + CDN 直链),一体化流水线 下载→抽音→传COS→记录→删本地,AI 作品四档判定,四份文档: README(使用指南)、PROGRESS(批次进度)、RE(逆向全过程)、AI(判定规则)。 Co-Authored-By: Claude Code <noreply@anthropic.com>
11 KiB
AI 判定规则详解
本文档逐条解释
douyin/aiclass.py的判定逻辑:信号从哪来、四档怎么定、 每个词表为什么这么选、已知误收和否决理由。改规则之前必读; 每个坑在test_aiclass.py里都有对应测试(29 个),改完务必跑通。 各批筛选结果和下载进度见 PROGRESS.md §4.5。
1. 判定对象:三个文本源,地位不同
每条记录抽出三段文本,权重严格递减:
| 来源 | 构成 | 地位 |
|---|---|---|
| body(作品文本) | desc + 所有 hashtags 的 name |
主信号场,能定 strong / topic |
| author(作者昵称) | author.nickname |
只能兜底成 author 档,绝不往上顶 |
| music(音乐标题) | music.title,但先剥壳(见 §6) |
同上 |
「作者昵称 / 音乐标题」回答的是谁发的,不是作品是什么。实测
@牛牛Ai 发普法解说、@你好,我是大福 发真人游泳视频——昵称带 AI 的作品
多数不是 AI。所以 author/music 的命中只能在作品自身毫无信号时兜底成
author 档(classify() 里 if tier == "none" 才采纳)。
2. 四档体系
档位之间不重叠,一条记录取最强的一档:
platform > strong > topic > author > none
| 档 | 依据 | 含义 | 可信度 |
|---|---|---|---|
platform |
爬虫打的 ai.is_aigc |
抖音官方 AIGC 标 | 最高,且唯一能抓到「作者什么都没标但确实是 AI」的作品——实测 1744 条文案零 AI 字样 |
strong |
body 里有明确「这是 AI 做的」信号 | 见 §3 的四路信号 | 高 |
topic |
body 只提到 AI 本身 | 在讲 AI(教程/新闻/大模型),不一定是 AI 做的 | 中 |
author |
只有昵称/音乐标题带 AI | 兜底档,会误收 | 低 |
none |
无信号 |
⚠️ 已知 bug:爬虫层把「risk_infos 有内容」就当 is_aigc=true,把
虚构演绎/个人观点等免责声明也算进了 platform 档,全库误算 1029 条。正确做法
是认 risk_infos.type ∈ {44, 47, 76, 328}(44=作者声明、47=疑似、76/328=平台判定),
修法在 PROGRESS.md §7 待办。raw.is_aigc_media 全库皆 false,别信。
3. strong 档的四路信号(body 里任一成立)
3.1 aigc token
独立的 aigc 字样直接 strong。边界规则见 §5。
3.2 生成工具名单 _GEN_TOOLS——命中即 strong,不要求 ai 同现
用了生成工具 = 片子是 AI 做的,这是最强的文本证据。名单 70+ 个,分三类:
- 中文工具:即梦、可灵、海螺(注意这个在歧义表,见 3.5)、海艺、小云雀、 妙鸭、一帧秒创、腾讯智影、讯飞智作、硅基智能、魔音工坊、元气口播、万兴播爆、 闪剪、声音克隆/语音克隆/克隆音色/音色克隆……
- 英文工具:dreamina、jimeng、seedance、seedream、kling、vidu、pixverse、 pika、luma、runway、sora、viggle、heygen、midjourney、comfyui、flux、 nanobanana、stable diffusion、liblib、suno、udio、veo3、hunyuanvideo、 cogvideo、controlnet、domoai、synthesia、deepbrain……
- 生成动词:文生视频、图生视频、文生图、图生图、生成式
选词标准(2026-08 扩充时定的):「这串字在中文短视频文案里不可能有别的意思」。
全部在 12.7 万条真实数据上验过——要么零命中(备着以后用),要么命中全是真 AI。
反过来,这些被明确拒收:tripo(撞 tripod 三脚架)、seaweed(海藻)、
lora(撞 valorant,实测命中 3 条全是无畏契约)、captions、playground。
3.3 AI 漫剧专有名词 _MANJU——单独出现即 strong
AI 漫剧已形成固定圈子,这些词在 18.4 万条数据里几乎只出现在 AI 作品上 (括号=全库命中/仍漏掉的):
- 圈内词:漫剧(1568/64)、治愈系漫画(80/0)、渡灵书(62/0)、超级裂变(46/0)、 二次元动漫(33/0)、月落小溪(25/4)、七罪创世(21/0)、晚夏小梦(67/4)、 灵绘漫客(12/0)、neowow(12/0)、猫箱跨次元相遇(114/12) 等
- 红果片名(字节免费短剧 App 的 AI 漫剧):万妖图录传、发配边关、 罪妻开荒养出战神、斩仙台、杂灵根……来源是新闻报道热榜,不是红果完整片库, 红果不公开片库,遇到新片名往这加
实测拒收的(题材 ≠ AI 标记):西游记(+26 真·玄奘故里游记)、孙悟空(+16)、 宫崎骏(+10 龙猫童年)、民间故事、睡前故事、国漫推荐(+4《剑来》真人制作)、 原创动漫(+18 手绘二次元)、创作者激励计划、未来导演扶持计划、开放赛道(后三个是 抖音通用活动)。
为什么「红果」两个字不能进表:红果主体是真人短剧,AI 漫剧只是一个赛道。 实测 3 条命中 2 条真人短剧(《家里家外2》《冷御失守》)、1 条演员面试。 要抓红果的 AI 漫剧只能靠具体片名。
3.4 ai + 创作语境词 _GEN_CTX——同现才成立
单独的 ai 只能算 topic。必须跟 41 个创作/生成语境词之一同现才升级 strong:
短剧、漫剧、动画、视频、绘画、创作、制作、生成、分身、配音、换脸、特效、导演、
数字人、虚拟人、成片、写真、转绘、扩图、提示词……
反过来,中文泛词(动画/绘画/分身/动漫)不跟 ai 同现就一律不算——830 条
#原创动画 全是手绘,早期版本单独算信号误收几千条。剪映(375)/关键帧(314)/
蒙版(203)/转场 是剪辑术语,根本不是 AI 信号。
3.5 歧义工具 _AMBIG_GEN——必须跟 ai/aigc 同现
工具名本身是常用词,单独出现几乎全是误判(数据来自全库统计):
| 词 | 误判实例 | 真命中 |
|---|---|---|
| 豆包 | 224 条:狗名、豆沙包、「反强包之神」 | 145 条,全带 AI 字样 |
| 海螺 | 13 条:三峰「海螺」帐篷 | 全带 AI 字样 |
| 元宝 | 11 条:316 不锈钢元宝勺 | 全带 AI 字样 |
| 万相 | 17 条:《龙神万相》、万相集 | 全带 AI 字样 |
| 星流 | 「明星流量」子串 | 全带 AI 字样 |
| 清影 | 「起舞弄清影」 | 全带 AI 字样 |
真命中无一例外同时带 AI 字样,所以这道门槛不掉召回。同机制的还有
_AMBIG_CHAT(豆包、元宝、混元,归 topic 档)。
4. topic 档:在讲 AI,不一定是 AI 做的
- 模型名单
_CHAT_TOOLS:chatgpt、deepseek、kimi、通义、千问、qwen、文心、 ernie、智谱、glm、copilot、gemini、grok,及中文泛词 人工智能、大模型、 神经网络、机器学习、深度学习 - 独立成词的
_CHAT_RE:gpt、claude、llm、agi、ai agent(要求词边界, 避免 gpt 撞上别的串)
命中即 topic;若同时撞了 §3 的 strong 信号,取 strong。
5. 归一化与词边界:AI 的三种写法、词中词的两难
5.1 AI 的冒充写法
ai 的第二个字符实际匹配四种:i、小写 l、罗马数字 Ⅰ/ⅰ(U+2160/U+2170):
Al(大写 A + 小写 L):标签抖音al出现 129 次,文案有#Al创作#AⅠ漫剧:罗马数字冒充,与Al同套路
5.2 独立词边界
_AI/_AIGC:前后不能接字母数字(挡 email、detail、again、hair), 但允许接中文(AI绘画要命中)_alt()(工具/模型/漫剧名单共用的编译器):纯 ASCII 词只挡字母、 不挡数字和中文——数据里满地Seedance2.0、sora2、runninghub0.21、libtv创作者,一刀切\b会丢 3500+ 条真命中- 但真正的词中词要挡:
udio藏在Grass Studio/theonestudio里 17 次、flux藏在Fluxxwave曲名里 1 次(都是音乐标题混进 author 档的)
6. 音乐标题剥壳
抖音默认原声的标题就是个壳,里面是作者昵称复读,不含作品信息:
jsonl: @<昵称>创作的原声
csv: @<昵称>创作的原声 - <昵称> ← 后缀那半截也要剥
不剥会怎样:昵称带 AI 会连「创作」一起命中 _GEN_CTX,作者昵称就从
music 这条路偷偷升到 strong——实测 771 条这样混进来(@冠宇Aigc 的猴子炒菜、
@牛牛Ai 的大案纪实)。剥完后音乐标题只剩 16 条还有命中,这条路本来就没什么
价值,只配给 author 档兜底。注意 csv 的壳多一截 - 昵称,剥壳正则必须两种都覆盖,
否则 bug 在 csv 输入上复发。
7. 明确否决的信号(放开只进误判,实测一条真的都捞不到)
| 否决词 | 污染来源 |
|---|---|
| 数字人 | 数字人民币 |
| 分身 | 微信分身、五五分身材 |
| 换脸 | 「这套穿搭能换脸」 |
| lora | 无畏契约 valorant |
| tripo | tripod 三脚架 |
| seaweed | 海藻 |
| 度加 | 「亏损幅度加大」 |
| 万彩 | 「29万彩礼」 |
| 生数 | 「诞生数副名场面」 |
| 节点 | 「关键节点」 |
| 抽卡 | 原神 |
| 捏脸 | 燕云十六声 |
| 国漫 | 《剑来》真人制作 |
| 对口型 | 真人对口型 |
测试锚点:test_rejected_candidates_stay_none、test_digital_rmb_is_not_a_digital_human、
test_hongguo_platform_name_is_not_an_ai_signal。
8. 维护指南
加新工具名:
- 先问「这串字在中文短视频文案里有没有别的意思」。没有 →
_GEN_TOOLS; 是常用词但真命中都带 AI →_AMBIG_GEN;是对话模型 →_CHAT_TOOLS; 常用词模型 →_AMBIG_CHAT - 在真实数据上跑一遍验证:命中应全为真 AI,或至少零命中
- 加测试用例到
test_aiclass.py(用真实文案,别造) - 红果新片名 →
_MANJU片名区;通用活动标签别收
判档结果怎么用:clean_ai.py --tier platform,strong 是默认推荐组合
(可下载清单的标准切法);topic 档是「讲 AI 的新闻科普」,多数采集场景不要;
--platform-needs-text 用于卡「平台标了 AIGC 但文案零信号」的带货视频,但会误伤
@栖光 类 AI 古风美图作者(文案一个 AI 字都不写),这批要按是否带货再分
(lists/platform无佐证_*.txt)。
9. 测试对照表(改规则的回归网)
| 测试 | 守什么 |
|---|---|
test_platform_label_wins_even_with_no_ai_text |
platform 档优先,文案零信号也成立 |
test_strong_*(5 个) |
四路 strong 信号:复合词、工具名、aigc、Al 冒充 |
test_topic_*(2 个) |
纯 AI 提及、模型名只给 topic |
test_author_never_upgrades_a_scored_item |
昵称/music 绝不把已定级的作品往上顶 |
test_default_original_sound_is_not_a_work_signal / test_sound_wrapper_csv_form_is_stripped |
音乐壳剥壳(jsonl + csv 两种写法) |
test_english_words_containing_ai_are_not_signals |
email/detail/hair 不算 |
test_editing_jargon_is_not_ai / test_generic_chinese_words_alone_are_not_ai |
剪辑术语、中文泛词单独不成立 |
test_ambiguous_tool_*(2 个) |
歧义工具单独不算、带 AI 才算 |
test_roman_numeral_impersonates_ai / test_strong_handles_capital_A_lowercase_L |
两种 AI 冒充写法 |
test_rejected_candidates_stay_none + 同组 |
§7 否决清单 |
test_manju_*(3 个) |
漫剧词单独成立、红果不成立、题材词不收 |
test_veo3_beats_a_weak_author_signal |
强信号压弱信号 |