3.1 输出内容审查:分类与敏感信息识别 当模型吐出一段话,你怎么判断它"能不能发"?直觉上很多人会说:上关键词过滤,命中"色情""暴力"这类词就拦。但真正做过内容安全的人都知道,纯关键词方案在真实业务里会迅速破产——它要么漏过用谐音、拆字、跨语种伪装的有害内容,要么把"我在讲网络安全课,下面演示一段钓鱼邮件样本"这类正常教学文本一棍子打死。本节要解决的,正是这个"看似简单、实则坑极多"的问题。 一、为什么输出审查远比"关键词过滤"复杂 关键词过滤有三个结构性弱点。第一是绕过成本极低:攻击者用谐音("涩情")、分隔符("色·情")、繁体或跨语种写法,就能让字面匹配失效,而防御方要穷举所有变体几乎不可能。第二是语义盲区:一段内容危险,往往不依赖某个具体词。
当模型吐出一段话,你怎么判断它"能不能发"?直觉上很多人会说:上关键词过滤,命中"色情""暴力"这类词就拦。但真正做过内容安全的人都知道,纯关键词方案在真实业务里会迅速破产——它要么漏过用谐音、拆字、跨语种伪装的有害内容,要么把"我在讲网络安全课,下面演示一段钓鱼邮件样本"这类正常教学文本一棍子打死。本节要解决的,正是这个"看似简单、实则坑极多"的问题。
关键词过滤有三个结构性弱点。第一是绕过成本极低:攻击者用谐音("涩情")、分隔符("色·情")、繁体或跨语种写法,就能让字面匹配失效,而防御方要穷举所有变体几乎不可能。第二是语义盲区:一段内容危险,往往不依赖某个具体词。比如"把鞭炮塞进信箱再点燃"这句话里没有任何违禁词,但明显在传播危险行为。关键词方案对此完全无能为力。第三是误伤代价高:在客服、教育、医疗等场景,正常文本里出现敏感词太常见了,一刀切会导致大量合法回复被拦,用户体验直接崩塌。
举个真实例子:某客服机器人曾被诱导输出一段"如何制作简易爆炸物"的步骤,攻击者把关键词全用拼音首字母和 emoji 替代,纯关键词方案毫无感知,而一个语义分类器因为抓住了"混合氧化剂与燃料""密封容器内点燃"这类危险行为的语义结构,成功判为高风险拦截。这说明:语义层不是可有可无的奢侈,而是关键词方案的必要补位。
因此生产级输出审查,几乎无一例外要做成"多层协同"的架构,用不同手段互相补位。下面三层是业界验证过的成熟组合。
它负责快、准、低成本地兜住那些"板上钉钉"的违禁模式:明确的违禁词库、手机号/身份证/银行卡的正则、特定组织机构名称黑白名单。规则层的特点是零延迟、可解释、好审计——运营能直接看到"命中了哪条规则",便于复核与申诉。
但规则层的天花板也明显:它不"理解"语义,只能匹配字面。我们一般把规则层定位成"粗筛 + 兜底":命中高置信黑名单直接拦截;命中可疑模式(如疑似身份证号但校验位不对)则转交下一层精判,而不是自己下最终结论。
这里指用专门训练或微调的文本分类器,把输出判定到若干风险类别:暴力、色情、仇恨言论、自残、欺诈、政治敏感等。相比规则,分类器能捕捉语义层面的风险,代价是需要标注数据和持续迭代。
落地时有三个关键设计。一是用多标签分类而非单一二分类,因为一段文本可能同时踩多个类别(既含欺诈又含色情),单一二分类会丢信息。二是保留置信度,每条判定都带一个 0~1 的分数,作为后续分级处置的依据——这是把"机器判定"接到"业务策略"的桥梁。三是成本可控:一个蒸馏后的轻量分类模型,单条推理常在毫秒级,足以放在主链路上实时跑,不必异步排队。
当规则层和分类层都不确定、或业务对误判零容忍时,把待审文本连同一份清晰的审核标准,再喂给一个(通常更强的)模型做判断。自审层的价值在于处理"规则说不清、分类器拿不准"的灰色地带,比如一段看似正常的客服回复,其实在委婉引导用户绕过退费政策。
代价是延迟和成本最高,所以一般只用于高风险样本或低置信度样本,不全程铺开。这也是为什么它必须放在第三层——前面两层已经把绝大多数样本分流掉了,真正进到自审层的只是少数疑难件。
内容审查回答"这段内容危不危险",敏感信息识别回答"这里面有没有不该出现的特定实体"。两者正交,必须并行做。典型目标包括:个人身份信息(姓名、电话、证件、住址、邮箱)、企业内部资产(内网地址、密钥、代码结构)、受版权保护的材料片段。
识别手段是"实体识别(NER)+ 正则 + 知识库匹配"的组合。PII 用正则加 NER:结构化字段(手机号、身份证)用正则高效覆盖,非结构化姓名地址用 NER 召回。密钥用特征正则(如某些云厂商 Access Key 的固定前缀模式)。内部术语、项目代号则靠企业知识库检索匹配。
处置策略必须与判定结果联动,而不是一刀切"全拦"。我建议分四档,把"误伤成本"也纳入设计——客服场景下,如果把用户正常咨询当违规拦了,体验损失可能比漏过一条边缘内容更大。
| 档位 | 触发条件 | 处置动作 |
|---|---|---|
| 高置信违规 | 规则命中黑名单 / 分类高置信 | 直接拦截 + 告警 |
| 中置信风险 | 分类中置信 / 自审判灰 | 安全替换(遮罩敏感片段)后放行或转人工 |
| 低置信可疑 | 分类低置信 | 打标记录 + 抽样人工复核 |
| 正常 | 各层均未命中 | 直接返回 |
实战里有个常被忽视的点:自审模型的"审核标准"必须写成可执行的判定清单,而不是一句"请判断是否有害"。模糊的指令会换来飘忽的判定。我们给自审模型的提示里,通常明确列出每类风险的判定边界、给出正负样例、并要求输出"判定类别 + 置信度 + 一句话理由",方便后端做分级和审计。
上线不是终点。审查管线必须用指标持续校准,否则会悄悄劣化。核心看四个数:
调优的抓手通常是阈值:分类置信度阈值往上调,漏拦变多、误伤变少;往下调则相反。经验做法是先从严(保召回),再根据误伤反馈逐步放宽,并用灰度流量验证。
读完这一节,你应当能搭出一条"规则粗筛 → 分类精判 → 自审兜底 → 敏感实体识别 → 分级处置"的最小可用审查管线,并说清每一层为什么不能省。落地起点建议从小到大:先上规则层兜住最明确的违禁模式(当天就能见效),再接一个多标签分类模型处理语义风险,最后把自审层只挂在低置信样本上控制成本。三层不必一次到位,但顺序不要颠倒——规则层永远是该最先有的那块基石。