# AI 判定规则详解 > 本文档逐条解释 `douyin/aiclass.py` 的判定逻辑:信号从哪来、四档怎么定、 > 每个词表为什么这么选、已知误收和否决理由。改规则之前必读; > 每个坑在 `test_aiclass.py` 里都有对应测试(29 个),改完务必跑通。 > 各批筛选结果和下载进度见 [PROGRESS.md](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. 维护指南 **加新工具名**: 1. 先问「这串字在中文短视频文案里有没有别的意思」。没有 → `_GEN_TOOLS`; 是常用词但真命中都带 AI → `_AMBIG_GEN`;是对话模型 → `_CHAT_TOOLS`; 常用词模型 → `_AMBIG_CHAT` 2. 在真实数据上跑一遍验证:命中应全为真 AI,或至少零命中 3. 加测试用例到 `test_aiclass.py`(用真实文案,别造) 4. 红果新片名 → `_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` | 强信号压弱信号 |