初始提交:抖音视频批量采集流水线
App 端免签名接口(设备注册 + detail + CDN 直链),一体化流水线 下载→抽音→传COS→记录→删本地,AI 作品四档判定,四份文档: README(使用指南)、PROGRESS(批次进度)、RE(逆向全过程)、AI(判定规则)。 Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
215
AI.md
Normal file
215
AI.md
Normal file
@@ -0,0 +1,215 @@
|
||||
# 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` | 强信号压弱信号 |
|
||||
Reference in New Issue
Block a user