当遇到拆字、拼音、谐音变异时,如何基于 BERT-CRF 做敏感实体识别?

解读

面试官真正想考察的是:

  1. 你是否理解中文“对抗式文本”在监管场景下的多样性(拆字、拼音、谐音、偏旁替换、简繁混合、数字谐音、emoji 夹杂等)。
  2. 你是否能把“传统”BERT-CRF 实体识别框架升级成可落地、可迭代、可解释的工业级方案,而不是只背论文。
  3. 你是否具备数据-模型-策略-系统四位一体的闭环思维,能兼顾效果、性能与合规。

知识点

  1. 中文对抗变体分类:字形拆合(⻊+青=请)、拼音首字母(xjp)、谐音(席大大→习大大)、偏旁替换(讠习)、简繁混写、Unicode 同形字、数字谐音(748)、emoji 指代(👑🐻)。
  2. BERT-CRF 的固有短板:WordPiece 子词切分会破坏拆字结构;拼音与汉字在语义空间分布差异大;CRF 转移矩阵对 OOV 变体无约束。
  3. 工业级方案三件套: 对抗还原→增强表征→可控解码
  4. 合规红线:必须支持白名单可解释输出实时干预回滚,满足《生成式 AI 管理办法》要求。

答案

我给面试官一个 5 分钟能讲清楚、30 天能上线的“BERT-CRF 增强”路线,分四层:

  1. 数据层:对抗还原与合成

    • 线上埋点收集 7 天真实变异 query,用基于混淆矩阵的变异还原器(FST+规则+人工)回写标准实体,形成种子库。
    • 字形拼音双通道回译策略批量合成:字形通道通过康熙部首拆解+Unicode 同形字映射;拼音通道通过模糊音+首字母+数字谐音。合成后走“敏感实体字典+人工抽检”双校验,保证正负样本比例 1:3 防止 CRF 偏置。
  2. 编码层:多粒度 Embedding

    • 在 BERT 输入侧追加**“拼音+字形”并行分支**: – 拼音分支:将每个字符转为带声调拼音序列,用 1D-CNN 得到 char-level 拼音向量。 – 字形分支:五笔编码+部首 ID 双 Embedding,接 Bi-GRU。
    • 三个向量(原始字、拼音、字形)做门控融合后送入 BERT,保证 WordPiece 之后仍能还原变异信号。
    • 训练阶段用Whole Word Masking 并把敏感实体整体 mask,提升实体边界感知。
  3. 解码层:CRF 增强

    • 转移矩阵引入外部敏感词典约束:若标签 B-POL 后接非 I-POL,则置 −1e6 掩码,实现“白名单先行,模型补漏”。
    • 对高频变异实体(如“xjp”)额外加**“实体级记忆槽”:在 CRF 发射分数上直接 +δ,δ 由线上回流的置信度动态更新,实现热更新无重启**。
  4. 系统层:LLMOps 闭环

    • 推理侧用ONNX+TensorRT 量化到 INT8,单卡 T4 吞吐 3200 QPS,P99 延迟 18 ms。
    • 部署双通道护栏:先过敏感字典正则(<1 ms),再过 BERT-CRF,最后过自研轻量级反垃圾大模型做二次校验,确保误杀率 <0.3%
    • 监控看板实时统计“变异类型-召回-误杀”三维矩阵,一旦某类变异召回低于 85% 即触发自动标注→微调→灰度→全量的 LLMOps 流水线,全程无人值守但留人工红色按钮可一键回滚。

结果:上线 30 天,在 20 亿条 UGC 文本中,拆字/拼音/谐音整体召回从 78% 提升到 93.4%,误杀从 1.8% 降到 0.27%,通过网信办 A/B 审计。

拓展思考

  1. 如果未来变异方式从“字符级”升级到“语义级”(如“那个在湖里游泳的人”指代“毛泽东”),BERT-CRF 的局部标注范式会失效,需要引入指代消解+外部知识图谱,甚至用大模型自监督的 prompt 探测做二次校验。
  2. 当业务要求“零误杀”时,可把 CRF 改成基于白名单的受限解码,把所有发射分数设为字典匹配度,模型只负责补全边界,牺牲 3% 召回换取几乎为零的误杀,满足金融/政府场景。
  3. 在千亿参数大模型落地时代,BERT-CRF 不会消失,而是作为**“小快灵”护栏与千亿模型协同:千亿模型负责泛化理解,BERT-CRF 负责低延迟、可解释、可审计的实体兜底,两者通过知识蒸馏+共享对抗样本库**长期共生。