
我最早做未成年人内容审核时犯过一个大错以为把成人内容审核模型的标签体系改一改就能直接覆盖未成年人场景。上线之后第一周就被现实打脸——成年人视角下的安全内容在未成年人视角里根本不算安全。一支点燃的蜡烛、一段校园生活记录、一句玩笑式的危险挑战台词单看任何一个维度都不违规但组合到一起就是需要处置的内容。这逼着我重新设计了一套面向短视频未成年人内容安全审核的多模态大模型训练与审核系统。这篇文章就把这套系统的设计方案完整拆开讲包括数据怎么建、模型怎么选、审核链路怎么搭、训练指标怎么定、上线之后会遇到哪些坑。内容偏工程实践适合正在做内容安全、大模型应用或视频理解方向的同学参考。1. 一个被频繁低估的问题未成年人审核不是成人风控的换皮1.1 内容风险清单与判断逻辑的差异先把两个场景的风险清单摆在一起看差异其实非常明显。成人内容审核的核心对象通常比较明确露骨色情、血腥暴力、违法信息、侵权内容。这一类内容的判断边界相对清晰视频里出现露骨画面就是违规出现真实血腥画面就是违规关键词命中违禁词就是违规。它更像一道硬门槛过了线就拦截没过线就放行。未成年人内容审核完全不是这个逻辑。大量需要处置的内容并不触碰明文红线但对心智发育有直接负面影响。我把常见的类别梳理了一遍大概包括以下几类软色情与不当性暗示没有露骨画面但通过穿着、动作、运镜、文案暗示性内容危险行为模仿模仿危险动作、危险挑战、不当实验画面看似日常但存在安全风险不良价值观引导炫富拜金、未成年恋爱剧情化、矮化努力学习等诱导消费与诈骗针对未成年人的充值引导、虚假抽奖、私下加好友等隐私泄露风险未成年人露脸、定位信息暴露、学校信息暴露不当社交诱导陌生人索要联系方式、私下见面引导等这组类别的共同特征是判断标准不是是否违规而是是否适龄。适龄性判断高度依赖语境——同样一个点打火机的画面出现在魔术教学里和出现在危险挑战里结论完全不同同样一句跟我走出现在校园剧情和出现在拐骗诱导里风险等级也不同。所以未成年人审核不像成人审核那样过了线就拦截而是要在多个维度上做语境推理再把各维度信号汇总成最终判断。1.2 传统内容安全方案在这里会大面积失效很多团队做未成年人审核第一反应是复用已有的内容安全能力但实际跑下来会发现常用的三类手段全部打折扣。第一类是关键词过滤。短视频里大量危险内容根本不会出现敏感词。比如一条视频画面是几个孩子模仿从高处跳下配文只有一句太爽了没有任何触发词。反过来大量正常内容反而会命中敏感词——挑战、加好友、免费领这些词在教育类、科普类、娱乐类内容里很常见。用关键词做粗筛可以但作为主要判断手段会同时出现高漏报和高误报。第二类是单帧图像识别模型。短视频是连续动作大量风险信息存在于动作过程而不是某一帧静止画面里。孩子翻出窗外、从高处跳落、往嘴里塞不明物体这些行为只在连续几秒内能看清。抽帧正好抽到关键动作的概率很低而如果为了捕捉动作把抽帧密度加大计算成本又成倍上升。第三类是单模态文本模型。短视频里有语音、有字幕、有画面内的文字贴纸但文本无法表达画面信息。语音说点一下试试画面里是打火机和酒精字幕写着挑战这三个信号在文本模态里各自普通组合起来就是一个典型的危险行为引导场景。单模态模型再强在这个场景下也缺信息。这些手段不是说完全没用而是它们适合做前置过滤不适合做最终决策。1.3 多模态大模型的定位不是更聪明的图像模型这套系统的核心思路是把审核问题定义为跨模态推理问题而不是单模态识别问题。多模态大模型在这里的价值是能把画面里发生了什么语音在表达什么意图字幕/贴纸文字在暗示什么三路信号放在同一个语义空间里对齐推理。它回答的是这条视频整体在表达什么、对未成年人有什么影响而不是这一帧里有没有出现违规元素。我用一个场景说明这种差距某个视频画面是一个教室语音内容是学生朗读课文字幕写着学霸的一天看起来完全正常。但画面角落里一个学生的手机上弹出了成人应用的推送界面持续了不到两秒。单帧图像模型会认为画面是教室场景文本模型会认为语音和字幕完全合规只有把画面内容、语音内容、字幕内容以及时间轴对齐关系综合起来才能推断出这条视频存在不当信息展示的风险。文章后面讲的训练数据、模型结构、系统管线都是围绕这个跨模态推理定位展开的。2. 训练数据才是这套系统的真正护城河模型结构可以抄训练代码可以开源但未成年人内容审核的数据资产没法抄。这一部分我想重点讲清楚数据上到底难在哪、怎么解。2.1 未成年人场景的数据为什么这么难搞第一个约束是合规获取成本极高。涉及未成年人的数据采集要处理肖像权、隐私权、监护人授权等一系列问题不可能像爬取普通公开数据那样随意收集。很多团队索性放弃自采转向开源数据集但开源数据集和真实审核场景的目标分布差异非常大。第二个约束是真实违规样本稀缺且分散。短视频平台每天上传的内容里真正涉及未成年人风险的类别占比往往只有千分之几甚至更低。我在项目初期从历史积累的处置记录里捞样本捞出来后发现大量违规样本是低质重复的——同一个模板换了个背景、换了个人拍模型学会识别这批样本很容易但遇到新拍法效果立刻衰减。第三个约束是人工标注的一致性非常差。我给标注团队一份危险行为的标注规范同一段视频三个标注员可能给出三种结论。因为未成年人内容安全的很多判断依赖语境和主观理解没有客观标准。2.2 标签体系设计先回答要给谁看和危险在哪数据生产之前必须先解决标签定义问题。设计标签体系时我遵循两条原则。第一条原则是面向场景分类而不是面向内容分类。同一个标签体系要回答这条视频拍的是什么场景——校园、家庭、户外、才艺、剧情、科普等等同时回答这条视频包含哪类风险。这两个维度分开标注场景维度帮助模型理解语境风险维度帮助模型做最终决策。只标风险维度的话模型很难区分正常教学视频里演示用火安全和危险视频里诱导点火挑战。第二条原则是风险等级必须细化。不建议用安全/不安全二分类而是每类风险再分等级。比如不当性暗示从轻微到严重至少分三档危险行为模仿也要区分演示但安全演示但有风险明确诱导模仿等场景。等级标签的作用有两个一是让模型学得更细二是配合后端的处置策略——不同等级走不同审核路径不用一刀切。还有一个容易被忽略的部分反例样本的质量。模型误报往往不是因为正样本太少而是因为看似危险但实际安全的边界样本缺失。蜡烛点燃是生日派对打火机出现是魔术表演孩子躺倒在地是游戏剧情。这些安全但容易误判为危险的样本我建议单独建一个数据集专门积累这件事比很多人想象的更要紧。2.3 数据生产闭环从种子样本到主动学习回环具体的数据生产流程我按下面这个闭环来跑。第一步是先收集种子样本。从历史人工处置记录、用户举报记录、运营巡查记录中把已确认的违规样本全部捞出来形成第一批正样本池。同时从全量内容里随机抽一批负样本再单独挖一批边界样本人工审核时争议比较大的内容。第二步是跑模型初筛。用种子样本训一个v0版本模型跑全量待审内容把置信度落在中间区间比如0.3到0.7的样本挑出来送人工标注。这些样本是模型最吃不准的也是信息量最大的。第三步是标注质量控制。每一条样本至少两人独立标注结果不一致的交由更高一级复核。定期用一批黄金样本已经达成一致结论的内容检验标注员的一致性标注准确率低于阈值的需要重新校准。第四步是数据回流。新标注的数据按周期合入训练集重新训练模型后再做一轮初筛。循环往复每一轮主动学习都会让模型对边界样本的判断更准。第五步是隐私处理。所有送入训练的数据都要做人脸模糊、设备信息脱敏、地理位置信息去除。涉及未成年人形象时尤其严格宁可少用一些样本也不能在这个环节出问题。3. 模型结构为了看懂视频在讲什么而不是单纯识别画面数据问题解决之后模型结构设计就变成核心议题。这里要做的选择很多我按关键决策点逐个说明。3.1 三流输入画面、语音、文本一个都不能少我用了三路输入分别是视频帧、语音内容和视频内文字。语音内容不是直接传音频波形而是先做ASR转写成文本再作为文本序列输入。视频内文字包括字幕和画面中出现的标语、贴纸文字通过OCR抽取后同样文本化。为什么要单独保留OCR这一路值得多说一句。短视频里大量信息是通过字幕和贴纸表达的而这类文字往往和语音不一致。比如画面上贴出关注我领福利的大字语音通篇在讲教学内容这里OCR文本的价值就体现出来了。我见过只做画面语音两路输入的方案在涉及文字贴纸的风险类型上漏报率明显偏高。画面这路输入不直接用整段视频的所有帧而是先做抽帧。抽帧策略后面小节单独讲这里先说明整体架构三路输入分别经过各自的编码器提取特征再进入融合层做跨模态对齐和语义推理。3.2 时序建模从单帧到片段才是视频理解的分水岭未成年人审核场景里有大量风险类型依赖时间维度判断。危险动作模仿的全程轨迹、不当互动的前后因果、隐私泄露的背景连续变化都需要模型理解片段级信息而不是单帧信息。抽帧策略我采用场景切分加关键帧采样两段式先对视频做镜头边界检测把长视频切成若干镜头再在每个镜头内按内容变化程度采样关键帧。普通内容的2分钟视频最终可能只抽20到30帧但风险动作能被覆盖到的概率比均匀抽帧高不少。时序建模层面我在框架里同时保留两个分支帧级分支直接对关键帧做分类处理单帧就能判别的风险比如画面里出现明显的成人向内容片段级分支把关键帧序列和音频、文本在时间轴上对齐用序列模型捕捉行为轨迹和跨模态共现关系。最终两个分支的特征拼接后统一做风险预测。这样一个模型同时覆盖看静态画面和看动态过程两类任务比强行做成纯时序模型更稳。3.3 融合策略与基座选型效果、成本和可维护性的三角取舍关于特征融合早期拼接方案确实最简单——把三路特征向量直接拼起来喂给分类头。工程上稳定、调试方便、不容易崩但它的问题是模态间信息交互不足模型很难学到画面和语音矛盾时该信哪个这类跨模态规律。后来我升级成交叉注意力融合让三路特征的每个token在融合层里互相做注意力计算。效果确实更好尤其是在语音和画面不一致这类高难度样本上准确率提升明显。但代价是训练时间加长、显存占用增多、超参数调试变难。我的建议是不要一上来就上交叉注意力。先用拼接方案跑通全流程积累一批可靠的训练数据再升级融合层。这个升级通常会在下一轮迭代中带来一次可感知的效果提升但前提是前期的数据质量已经稳定否则模型变复杂只会让错误更难定位。基座选型上我的经验是选中等规模的预训练多模态模型不要追求参数最大的那种。原因很实际一是推理成本要按每天千万级视频去算模型太大压不住二是训练和迭代周期大模型每次微调要几天甚至几周中等模型可以做到按天迭代三是部署灵活中等模型可以同时支撑线上实时推理和离线批处理。4. 审核系统设计模型只是审核链路里的一环模型训得好不好决定审核效果的上限但系统管线设计决定这个上限能兑现多少。这一章讲的是模型之外的部分。4.1 多级管线快速拦截、深度审核、人工兜底整个审核流程我拆成四层每层审的深度不同、成本不同、目标也不同。第一层是轻量前置过滤。主要用规则和单模态小模型目标是以最低成本处理掉绝大多数明显正常的内容同时拦截掉那些连关键词层面都能确认违规的内容。这一层不需要追求高精度核心指标是处理速度和零漏放高危内容。第二层是中等规模多模态模型。前置过滤后剩下的内容全部进这一层做完整的多模态推理输出每个风险类别的置信度。这一层承担了超过九成的实际审核决策。第三层是大模型疑难兜底。第二层置信度落在中低区间的样本送入大模型做深度判断。大模型的优势在于长上下文理解能力强能把整段视频的全局信息串起来同时产出自然语言的判断理由。第四层是人工复核。大模型也无法确定的内容以及置信度落在特定高风险窗口内的内容最终由人审兜底。这套设计解决了一个核心矛盾如果全量内容都走大模型算力成本会高到无法承受如果全量内容都只走小模型效果又达不到要求。分层的意义就是让不同成本、不同能力的组件用在最合适的样本上。4.2 召回与成本的矛盾未成年人审核永远要偏向召回审核系统的目标函数和常规推荐系统的目标函数不一样。推荐系统追求的是在约束下最大化指标审核系统永远要把漏掉危险内容视为最严重的错误。漏掉一条高危内容比误拦一百条正常内容更致命。但无条件追求召回也会出问题。如果阈值调得过松大量正常内容进入人工复核队列人审成本会直线上升反而拖慢高危内容的处置时效。我遇到的实际问题是阈值收得太紧中危内容堆积在人工队列里等审到的时候已经过了黄金处置时间阈值放得太松低危误判大量产生体验和效率双输。解决办法是分级召回加分级处置。高风险类别用非常激进的召回策略宁肯让大量疑似样本进入大模型兜底也要保证不漏中低风险类别则用相对保守的阈值把进入人工队列的内容控制在可处理范围内。每条样本按风险等级和置信度综合排序高优先级保证先审。4.3 审核结果回写让每一次审核都变成一次训练数据生产系统里最容易忽略却最关键的环节是审核结果的数据回写。线上每次审核的输入视频、模型预测结果、处置动作、后续用户申诉结果都应该结构化落库并按周期回流到训练集。这一环的价值在于真实线上内容的分布和变化趋势只有从回写数据里才能看到。比如某个时间段突然出现一类新的风险内容形态主动学习流程会捕捉到大量低置信度样本如果这些数据不回流模型就会一直停留在上一个版本的理解水平。申诉数据尤其重要——申诉通过的内容往往就是模型误判的高发类型应该优先进入下一轮的训练和调优。5. 训练工程里的硬仗损失函数、样本平衡与评估模型结构和系统管线定下来后训练环节还有三场硬仗要打。5.1 极端不平衡恶意样本只占沧海一粟未成年人风险类别在全量内容里的占比极低某些类型可能只有万分之几。在这种分布下直接训练多分类模型模型很快会学会永远输出正常因为这样也能获得接近百分百的准确率。我在训练里用了几种手段组合。第一是焦点损失它对易分类样本的梯度进行衰减让模型把注意力集中在难分类样本上。第二是在线难例挖掘每个批次里动态筛出loss最高的样本参与梯度更新。第三是人工过采样对每个风险类别设定最低样本数不足的用数据增强补足。第四是类别间不平衡采用分级权重高危类别权重显著高于低危类别。这里有一个我自己踩过的坑过采样比例不是越高越好。把稀有类别过采样到和正常内容一样多之后模型确实在这类样本上表现变好但对正常内容的误报也会上升因为模型学到的类别先验被扭曲了。实操中过采样比例控制在1:5到1:10区间比较安全具体需要按类别抽测。5.2 多任务联合训练让标签之间互相借力我没有把模型训练成单标签多分类而是做成多标签多任务结构。具体来说共享一个多模态编码器后面接多个预测头风险类别识别头输出每条视频命中了哪些风险类型场景分类头输出视频的上下文场景严重程度头输出该视频的总体风险等级适龄区间头输出适合观看的年龄段建议。多任务联合训练的好处有三层。第一层是标签相关性互补——一条视频同时标了危险行为模仿和校园场景模型能学到场景对风险判断的影响。第二层是样本利用率提升一个样本即便只标注了其中一个任务也能参与其他任务的梯度更新。第三层是抗过拟合多任务共享编码器会形成正则化效果在数据量不大的类别上尤其明显。5.3 评估指标不能只看一个F1值审核系统的评估和推荐系统评估也有很大区别。推荐系统可以接受整体指标略下降换取某类指标上升审核系统则必须分层分类地评估每类风险的表现。我最终沉淀的评估体系包含几个层次。第一层是分风险类别的加权召回率高危类别权重按业务严重程度设定漏掉一条高危类别内容的惩罚远大于误报一条低危内容。第二层是整体误报率它的意义在于控制人工审核压力。第三层是人工复检率即多少人审队列里的内容实际被判有风险这个指标直接反映模型把多少正常内容错误地推进了人审环节。评估集的构建也有讲究不能简单随机抽样。因为正常内容占比太高随机抽出来一个评估集正常内容会淹没风险样本模型随便答安全都能拿到很高的准确率。我按分层抽样构建评估集每个风险类别取固定数量正常内容按比例取一部分再混合成最终评估集这样每个类别的召回率才有统计意义。6. 上线之后真正折磨人的那几件事模型上线不是终点上线之后遇到的工程问题比训练阶段更让人头疼。挑几个我印象最深的展开讲。6.1 误判的三种典型形态以及对应的处理手段第一种是边界误判。蜡烛点燃画面被打火机火源类风险拦截生日派对视频误判成不当点火引导。这类问题最普遍根因是风险类别的边界本来就有模糊地带。我的处理方式是把这些样本系统回流专门标注成边界安全类别让模型学习区分语境。实测两轮迭代后误伤率能下降一大截。第二种是上下文误判。比如动漫作品里的打斗镜头模型按真实暴力内容拦截了新闻素材里的真实画面模型按风险内容处置了。这类问题说明模型对内容体裁的区分能力不够。解决办法是在训练数据里为动漫、影视剪辑、新闻纪实、纪录片等特殊体裁单独建类或者在做场景分类任务时增加体裁维度。第三种是跨模态错误对齐。语音在讲消防安全知识画面演示点火操作模型把整条视频判成了危险行为引导。这种演示安全操作和诱导危险行为之间的区分即使人工审核都要仔细判断。我的经验是不要把希望全放在模型自动学会上而是显式地在训练数据里加入大量教学演示样本同时在大模型兜底环节增加一条提示规则让模型先判断内容体裁再判断风险。6.2 模型的稳定性比效果更让人操心大模型的推理结果不是完全确定的。同一个视频、同一个模型版本在大模型兜底环节可能出现两次推理风险等级不同的情况。这在审核场景里很麻烦因为审核决定需要可解释、可追溯。我把大模型兜底环节的推理温度设为固定值并把随机种子固定下来。虽然不能做到百分之百稳定但实际运行中同一视频重复推理的结果一致性已经足够支撑审核决策。更重要的手段是保留旧版本模型的预测快照。每次灰度发布新模型之前先把旧模型的预测结果落到明细表新模型上线后如果发现某类误报激增可以一键比对新旧模型的预测差异快速定位问题并回滚。6.3 人机协同人审队列不是简单的机器审完给人看人机协同最忌讳的是让人审去做机器做不了的低效劳动。如果模型把大量明显安全的内容推进人审队列人审很快会疲倦真正的风险内容反而被人忽略。我的做法是按可疑程度排序组织人审队列。模型输出的置信度不直接等于可疑程度我会把置信度落在中间区间的样本排在第一位这类样本最有价值人工判断的增量信息最多。置信度很高或很低的样本要么直接处置要么抽样抽检不进入全量人审队列。这样人审的注意力集中用在模型最没有把握的内容上人机协同才是有效率的。另外每天统计人审通过率是一个重要的运营指标。如果某天某类风险的人审通过率突然从20%掉到5%大概率不是人工变严了而是模型对该类风险的判定阈值变化了需要立刻介入检查。这套系统从技术选型到落地整体链路比预想中曲折得多。踩过最深的坑是把内容审核简单理解成模型分类后来才意识到真正的审核是一个需要数据、模型、系统、人工协同的完整工程。如果你也在做类似的方向我的建议是先从数据闭环和标签体系做起一上来就钻研模型结构或者追热点大模型大概率会在上线后被人审环节的实际问题反复教育。