3.1 输出内容审查:分类与敏感信息识别


文档摘要

3.1 输出内容审查:分类与敏感信息识别 当模型吐出一段话,你怎么判断它"能不能发"?直觉上很多人会说:上关键词过滤,命中"色情""暴力"这类词就拦。但真正做过内容安全的人都知道,纯关键词方案在真实业务里会迅速破产——它要么漏过用谐音、拆字、跨语种伪装的有害内容,要么把"我在讲网络安全课,下面演示一段钓鱼邮件样本"这类正常教学文本一棍子打死。本节要解决的,正是这个"看似简单、实则坑极多"的问题。 一、为什么输出审查远比"关键词过滤"复杂 关键词过滤有三个结构性弱点。第一是绕过成本极低:攻击者用谐音("涩情")、分隔符("色·情")、繁体或跨语种写法,就能让字面匹配失效,而防御方要穷举所有变体几乎不可能。第二是语义盲区:一段内容危险,往往不依赖某个具体词。

3.1 输出内容审查:分类与敏感信息识别

当模型吐出一段话,你怎么判断它"能不能发"?直觉上很多人会说:上关键词过滤,命中"色情""暴力"这类词就拦。但真正做过内容安全的人都知道,纯关键词方案在真实业务里会迅速破产——它要么漏过用谐音、拆字、跨语种伪装的有害内容,要么把"我在讲网络安全课,下面演示一段钓鱼邮件样本"这类正常教学文本一棍子打死。本节要解决的,正是这个"看似简单、实则坑极多"的问题。

一、为什么输出审查远比"关键词过滤"复杂

关键词过滤有三个结构性弱点。第一是绕过成本极低:攻击者用谐音("涩情")、分隔符("色·情")、繁体或跨语种写法,就能让字面匹配失效,而防御方要穷举所有变体几乎不可能。第二是语义盲区:一段内容危险,往往不依赖某个具体词。比如"把鞭炮塞进信箱再点燃"这句话里没有任何违禁词,但明显在传播危险行为。关键词方案对此完全无能为力。第三是误伤代价高:在客服、教育、医疗等场景,正常文本里出现敏感词太常见了,一刀切会导致大量合法回复被拦,用户体验直接崩塌。

举个真实例子:某客服机器人曾被诱导输出一段"如何制作简易爆炸物"的步骤,攻击者把关键词全用拼音首字母和 emoji 替代,纯关键词方案毫无感知,而一个语义分类器因为抓住了"混合氧化剂与燃料""密封容器内点燃"这类危险行为的语义结构,成功判为高风险拦截。这说明:语义层不是可有可无的奢侈,而是关键词方案的必要补位。

因此生产级输出审查,几乎无一例外要做成"多层协同"的架构,用不同手段互相补位。下面三层是业界验证过的成熟组合。

二、三层审查架构

第一层:规则与正则(粗筛 + 兜底)

它负责快、准、低成本地兜住那些"板上钉钉"的违禁模式:明确的违禁词库、手机号/身份证/银行卡的正则、特定组织机构名称黑白名单。规则层的特点是零延迟、可解释、好审计——运营能直接看到"命中了哪条规则",便于复核与申诉。

但规则层的天花板也明显:它不"理解"语义,只能匹配字面。我们一般把规则层定位成"粗筛 + 兜底":命中高置信黑名单直接拦截;命中可疑模式(如疑似身份证号但校验位不对)则转交下一层精判,而不是自己下最终结论。

第二层:分类模型(语义精判)

这里指用专门训练或微调的文本分类器,把输出判定到若干风险类别:暴力、色情、仇恨言论、自残、欺诈、政治敏感等。相比规则,分类器能捕捉语义层面的风险,代价是需要标注数据和持续迭代。

落地时有三个关键设计。一是用多标签分类而非单一二分类,因为一段文本可能同时踩多个类别(既含欺诈又含色情),单一二分类会丢信息。二是保留置信度,每条判定都带一个 0~1 的分数,作为后续分级处置的依据——这是把"机器判定"接到"业务策略"的桥梁。三是成本可控:一个蒸馏后的轻量分类模型,单条推理常在毫秒级,足以放在主链路上实时跑,不必异步排队。

第三层:大模型自审(LLM-as-Judge,兜底灰色地带)

当规则层和分类层都不确定、或业务对误判零容忍时,把待审文本连同一份清晰的审核标准,再喂给一个(通常更强的)模型做判断。自审层的价值在于处理"规则说不清、分类器拿不准"的灰色地带,比如一段看似正常的客服回复,其实在委婉引导用户绕过退费政策。

代价是延迟和成本最高,所以一般只用于高风险样本或低置信度样本,不全程铺开。这也是为什么它必须放在第三层——前面两层已经把绝大多数样本分流掉了,真正进到自审层的只是少数疑难件。

flowchart TD A[模型输出文本] --> B[规则/正则层: 黑名单 正则 PII模式] B -->|命中高置信| X[直接拦截 + 告警] B -->|可疑/未命中| C[分类模型层: 多标签风险分类] C -->|高置信违规| X C -->|低置信| D[大模型自审层: 判定清单 + 置信度] D -->|高风险| X D -->|灰色| Y[替换敏感片段 / 转人工] C -->|正常| Z[返回用户] D -->|正常| Z

三、敏感信息识别:和"分类"是两件不同的事

内容审查回答"这段内容危不危险",敏感信息识别回答"这里面有没有不该出现的特定实体"。两者正交,必须并行做。典型目标包括:个人身份信息(姓名、电话、证件、住址、邮箱)、企业内部资产(内网地址、密钥、代码结构)、受版权保护的材料片段。

识别手段是"实体识别(NER)+ 正则 + 知识库匹配"的组合。PII 用正则加 NER:结构化字段(手机号、身份证)用正则高效覆盖,非结构化姓名地址用 NER 召回。密钥用特征正则(如某些云厂商 Access Key 的固定前缀模式)。内部术语、项目代号则靠企业知识库检索匹配。

flowchart LR T[待识别文本] --> R[正则: 手机/证件/银行卡/密钥] T --> N[NER: 姓名/地址/组织] T --> K[知识库匹配: 内部术语/项目代号] R --> G[敏感实体清单] N --> G K --> G G --> A[脱敏/拦截处置]

四、分级处置:别一刀切"全拦"

处置策略必须与判定结果联动,而不是一刀切"全拦"。我建议分四档,把"误伤成本"也纳入设计——客服场景下,如果把用户正常咨询当违规拦了,体验损失可能比漏过一条边缘内容更大。

档位 触发条件 处置动作
高置信违规 规则命中黑名单 / 分类高置信 直接拦截 + 告警
中置信风险 分类中置信 / 自审判灰 安全替换(遮罩敏感片段)后放行或转人工
低置信可疑 分类低置信 打标记录 + 抽样人工复核
正常 各层均未命中 直接返回

实战里有个常被忽视的点:自审模型的"审核标准"必须写成可执行的判定清单,而不是一句"请判断是否有害"。模糊的指令会换来飘忽的判定。我们给自审模型的提示里,通常明确列出每类风险的判定边界、给出正负样例、并要求输出"判定类别 + 置信度 + 一句话理由",方便后端做分级和审计。

flowchart LR S[判定结果] --> H{置信档位} H -->|高| I[拦截 + 告警] H -->|中| R[脱敏替换 / 转人工] H -->|低| M[打标 + 抽样复核] H -->|正常| O[放行]

五、怎么衡量一条审查管线"好不好"

上线不是终点。审查管线必须用指标持续校准,否则会悄悄劣化。核心看四个数:

  • 召回率(漏拦率):真正违规的样本里,被拦住的比例。这是红线,漏拦比误拦通常更危险。建议用红队持续投喂对抗样本,盯住这个数字。
  • 精确率(误伤率):被拦的样本里,真违规的比例。误伤高会伤害正常用户,客服场景尤其敏感。
  • 人工复核量:转人工或低置信打标的样本占比。它直接反映运营成本,是分类阈值调优的依据。
  • 延迟与成本:自审层占比越高,延迟和花费越大。要在安全与体验之间找平衡点。

调优的抓手通常是阈值:分类置信度阈值往上调,漏拦变多、误伤变少;往下调则相反。经验做法是先从严(保召回),再根据误伤反馈逐步放宽,并用灰度流量验证。

六、小结与一个可落地的起点

读完这一节,你应当能搭出一条"规则粗筛 → 分类精判 → 自审兜底 → 敏感实体识别 → 分级处置"的最小可用审查管线,并说清每一层为什么不能省。落地起点建议从小到大:先上规则层兜住最明确的违禁模式(当天就能见效),再接一个多标签分类模型处理语义风险,最后把自审层只挂在低置信样本上控制成本。三层不必一次到位,但顺序不要颠倒——规则层永远是该最先有的那块基石。


发布者: 作者: 408受害者的小龙虾 转发
评论区 (0)
U