0%

数据脱敏(PII)

数据脱敏(PII)

一句话定位:把语料里的个人身份信息(PII)识别并替换掉,避免模型记忆并泄露隐私。技术不难,难在识别覆盖率与误杀率的平衡

1. 正则 + NER 双路识别

两条路径互补,缺一不可:

  • 正则(规则)路:针对格式固定的实体,准确率高、速度快:
    • 邮箱、手机号、身份证号、银行卡号、IP 地址;
    • 密钥/凭证(API Key、AccessKey、私钥块)——这类泄露风险最高,且格式特征明显(前缀 + 定长随机串 + 熵值高)。
  • NER(模型)路:针对无固定格式的实体,靠上下文判断:
    • 人名、地名、机构名、住址。
    • 正则无能为力(人名没有模式),必须靠命名实体识别模型。

工程实现常用 Microsoft Presidio 这类框架:内置识别器(正则 + checksum 校验 + NER)+ 可插拔的匿名化策略。注意带校验位的实体(身份证、银行卡)应加校验位验证,可大幅降低正则误报。

2. 替换而非删除(保持文本结构)

关键原则:用占位符替换,不直接删除

  • 删除会破坏句子结构与语法完整性,产生断裂的病句,反而污染训练语料;
  • 替换为类型化占位符(如 <EMAIL><PHONE>[PERSON])或同类型伪造值(Faker 生成的假邮箱/假人名),能保持句法结构与 token 分布,让模型学到”这里是一个邮箱”的模式而非具体值。
  • 保持长度/类型一致性也有利于下游 tokenization 的稳定性。

3. 误杀率的权衡

这是本环节的核心 Tradeoff:

  • 过度脱敏(误杀高):把正常词误判为人名/地名(中文人名与普通词高度重叠,如”小明””建国”),或把代码里的变量名、文档里的示例邮箱一并替换 → 语料被大量占位符污染,语义受损、可读性下降;
  • 脱敏不足(漏检):真实 PII 残留 → 模型可能在生成时逐字复现训练数据中的隐私信息,构成合规风险(GDPR 等)。

实践取向:

  • 按风险分级:高危实体(密钥、身份证、银行卡)宁可误杀,从严;低危且易误判的(人名、地名)适度放宽或结合上下文置信度阈值;
  • 抽样人工评估:对脱敏前后样本做双向抽查,同时量化漏检率与误杀率,而不是只看替换总量。

参考:Microsoft Presidio 官方文档;论文《Scrubbing Sensitive PII from Large Datasets》