当遇到拆字、拼音、谐音变异时,如何基于 BERT-CRF 做敏感实体识别?
解读
面试官真正想考察的是:
- 你是否理解中文“对抗式文本”在监管场景下的多样性(拆字、拼音、谐音、偏旁替换、简繁混合、数字谐音、emoji 夹杂等)。
- 你是否能把“传统”BERT-CRF 实体识别框架升级成可落地、可迭代、可解释的工业级方案,而不是只背论文。
- 你是否具备数据-模型-策略-系统四位一体的闭环思维,能兼顾效果、性能与合规。
知识点
- 中文对抗变体分类:字形拆合(⻊+青=请)、拼音首字母(xjp)、谐音(席大大→习大大)、偏旁替换(讠习)、简繁混写、Unicode 同形字、数字谐音(748)、emoji 指代(👑🐻)。
- BERT-CRF 的固有短板:WordPiece 子词切分会破坏拆字结构;拼音与汉字在语义空间分布差异大;CRF 转移矩阵对 OOV 变体无约束。
- 工业级方案三件套: 对抗还原→增强表征→可控解码。
- 合规红线:必须支持白名单可解释输出与实时干预回滚,满足《生成式 AI 管理办法》要求。
答案
我给面试官一个 5 分钟能讲清楚、30 天能上线的“BERT-CRF 增强”路线,分四层:
-
数据层:对抗还原与合成
- 线上埋点收集 7 天真实变异 query,用基于混淆矩阵的变异还原器(FST+规则+人工)回写标准实体,形成种子库。
- 用字形拼音双通道回译策略批量合成:字形通道通过康熙部首拆解+Unicode 同形字映射;拼音通道通过模糊音+首字母+数字谐音。合成后走“敏感实体字典+人工抽检”双校验,保证正负样本比例 1:3 防止 CRF 偏置。
-
编码层:多粒度 Embedding
- 在 BERT 输入侧追加**“拼音+字形”并行分支**: – 拼音分支:将每个字符转为带声调拼音序列,用 1D-CNN 得到 char-level 拼音向量。 – 字形分支:五笔编码+部首 ID 双 Embedding,接 Bi-GRU。
- 三个向量(原始字、拼音、字形)做门控融合后送入 BERT,保证 WordPiece 之后仍能还原变异信号。
- 训练阶段用Whole Word Masking 并把敏感实体整体 mask,提升实体边界感知。
-
解码层:CRF 增强
- 转移矩阵引入外部敏感词典约束:若标签 B-POL 后接非 I-POL,则置 −1e6 掩码,实现“白名单先行,模型补漏”。
- 对高频变异实体(如“xjp”)额外加**“实体级记忆槽”:在 CRF 发射分数上直接 +δ,δ 由线上回流的置信度动态更新,实现热更新无重启**。
-
系统层: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 审计。
拓展思考
- 如果未来变异方式从“字符级”升级到“语义级”(如“那个在湖里游泳的人”指代“毛泽东”),BERT-CRF 的局部标注范式会失效,需要引入指代消解+外部知识图谱,甚至用大模型自监督的 prompt 探测做二次校验。
- 当业务要求“零误杀”时,可把 CRF 改成基于白名单的受限解码,把所有发射分数设为字典匹配度,模型只负责补全边界,牺牲 3% 召回换取几乎为零的误杀,满足金融/政府场景。
- 在千亿参数大模型落地时代,BERT-CRF 不会消失,而是作为**“小快灵”护栏与千亿模型协同:千亿模型负责泛化理解,BERT-CRF 负责低延迟、可解释、可审计的实体兜底,两者通过知识蒸馏+共享对抗样本库**长期共生。