第 2 部分:合成 PII 数据与确定性令牌化
如需循序渐进地动手学习,请从数据增强工作坊开始。本章记录现有实现及其运行约定。
2026-09-15 的 CPU 数据重新生成保留了历史哈希,并精确检查了 NFC 源文本重叠:训练集/验证集之间有 22 个共同来源,训练集/测试集之间有 36 个,验证集/测试集之间有 9 个;51 个唯一来源组分别出现在至少两个数据集中。新的工作坊示例会先划分来源族,再仅对单独示例中的训练集进行增强。它不会把这个历史数据集重新标记为无泄漏数据集。
实现与文档审查日期:2026-09-12。保留生成器 1.0.0、随机种子 42 和现有数据集哈希。
提取与替换是两个独立步骤
模型会输出候选 TYPE<TAB>ORIGINAL 行:
PERSON Taylor Sample
EMAIL synthetic.en.1494@example.com这些是合成示例。模型不会编辑源文档。类型和源文本匹配检查可以拒绝部分无效候选项,但不能证明某个值确实是 PII、类型正确,或所有 PII 实体都已找到。请将替换映射视为敏感信息。
数据集与评估范围
数据集包含 2,200 条记录,每个分区中韩语/英语的比例为 80/20。 实现变更后的数据重新生成保留了清单中的所有哈希。
| 数据集 | 记录数 | 韩语 | 英语 | SHA-256 |
|---|---|---|---|---|
| train | 1,600 | 1,280 | 320 | b98429fef0b103f24e8eaded069cbd2f6def5fbf8c083a5c7baf366c9fc1d21a |
| validation | 200 | 160 | 40 | 25ca38198d38e04be181e15b4e21a3c96d672f46f775ae1bc6c422ee4514f820 |
| test | 400 | 320 | 80 | 6f6ef9a6b42297738b292d5149f2e6e323f7bcd6f2325b6bfbc04ae6d9d0ec21 |
| 标签 | 在本实验中的含义 |
|---|---|
| PERSON | 人名 |
| RRN | 韩国居民登记号码形式的标识符 |
| DOB | 出生日期 |
| REL | 家庭或关系表达 |
| ADDRESS | 地址 |
| PHONE | 电话号码 |
| 电子邮件地址 | |
| ACCOUNT | 银行账号 |
| CARD | 支付卡号 |
这些是本实验专用的标注规则。例如,关系用语可以标注为正例,而公司总机号码可能出现在负例文档中。它们并非通用的敏感信息分类体系。
生成器使用固定模板、小型姓名词汇表和合成数字。 RRN/CARD 值无法通过示例中的校验和函数;但这本身不能证明它们符合官方标识符规则,也不能证明这些号码未被分配。PHONE 值是合成占位符,并非经过验证的国家号码格式或官方保留号段。 数据中没有使用客户数据,但这不等同于对标识符进行权威验证。
不同的记录和哈希并不能确保训练集/验证集/测试集之间的模板或实体词汇彼此独立。不要将此数据集描述为真实工作负载的泛化基准。为此目的,应使用单独的留出集和经过审查的标注。
可逆地替换源文本中的原始拼写
当前实现遵循以下顺序:
- 将源文本/值规范化为 NFC,并去除类型/值两端的空白字符。
- 删除完整的
<think>...</think>块,然后读取以制表符分隔的允许类型和非空值。 - 对候选项去重,并要求字面值或有限变体与源文本匹配。 解析和替换使用相同的数字边界规则。
- 优先采用字面预测,而不是由其他预测生成的变体。 若一个值对应多种类型,则按固定类型优先级处理;这并不表示推断出了语义事实。
- 在源文本中扫描一次,并优先匹配较长模式。
- 按类型和匹配到的 NFC 拼写在实际源文本中的顺序分配令牌。 相同拼写会复用同一令牌;不同空格/分隔符会分别处理。
- 跳过源文本中已经存在的令牌名称。
- 在映射中存储实际匹配到的拼写,并使用 NFC 源文本坐标记录左闭右开的
[start, end)替换跨度。
Source: 김가상 / 김 가 상 / [PERSON_1]
Candidate: PERSON 김가상
Masked: [PERSON_2] / [PERSON_3] / [PERSON_1]原有标记保持不变,并且可以还原每一种源文本拼写。令牌编号不必从 1 开始。令牌相同也不代表它们指向现实世界中的同一实体。
PERSON 变体仅覆盖以下有限情况:移除空白后,2–6 个字符的姓名中,以统一方式插入空格、制表符或换行符。数字变体只会规范化允许的数字/空白/分隔符字符。它们不会再删除臆造的字母来制造与源文本的匹配:如果源文本中没有 alias123456,就不能仅因为源文本中出现 123456 而接受它。包含字母和数字的原始值仍可按字面匹配。这些规则不是官方的电话号码/账号/身份验证器。
reassemble_text 会对已知令牌执行一次替换,并保留未知令牌。评估器会检查往返还原。相等性针对 NFC 源文本判断,并不保证逐字节还原原始 NFD 表示。
衡量剩余的源文本跨度,而不是占位符内容
较早的评估器会在掩码文本中搜索完整的 gold 字符串。这会产生两种错误结果:
- 如果只对 gold 实体
Alpha Beta中的Alpha做了掩码,完整字符串就会消失,导致系统错误地报告没有泄漏。 - 如果对字面值为
PERSON的 gold 值做了掩码,就会得到[PERSON_1],其中的标签会被错误地计作泄漏的源文本。
修正后的评估器会检查实际替换跨度的并集,确认每个 gold 值或允许变体的所有匹配项是否都被完全覆盖。它也会检查重复出现的值。若覆盖不完整,包括分隔符未覆盖的情况,都会按此保守指标计为未覆盖。生成的令牌名称中的字符不会被视为源文本泄漏。
Gold 记录只有值,没有标注偏移量,因此这些跨度是通过源文本匹配推断出来的。这不是新的 PII 检测机制,而且可能匹配到同一字符串在上下文中并不敏感的用法。请结合标注策略解释覆盖率,不要把它当作隐私保证。
各项指标的确切含义
| 结果字段 | 计算方式 |
|---|---|
| entity/per_type precision、recall、F1 | 对每个文档中规范化后的 (TYPE, ORIGINAL) 集合求 TP/FP/FN 之和 |
| documents.leak_rate | 存在未覆盖 gold 跨度的文档数除以文档总数 |
| entities.leak_rate | 至少有一个未覆盖匹配项的唯一 gold 键值对数除以唯一 gold 键值对总数 |
| entities.over_redaction_rate | 旧字段名,实际表示额外预测键值对比例:FP / 预测键值对 |
| entities.hallucination_rate | 与源文本不匹配的非空允许类型 TSV 行数除以这些行的总数 |
| parse.success_rate | 调用方提供的 parse_success 标志为 True 的文档比例 |
| tokenization.deterministic_rate | 候选顺序反转后,掩码文本、映射和跨度都相同的比例 |
| tokenization.round_trip_rate | 还原后等于 NFC 源文本的比例 |
实体 F1 并非跨度级别的 NER F1。每个文档中的重复键值对会被去重;同一键值对出现在不同文档中时会分别计数。类型会先去除首尾空白并转换为大写,值会先去除首尾空白并规范化为 NFC。有效变体可以完整掩码源文本,但其拼写可能与 gold 的精确拼写不同,因此会产生 FP/FN。旧的 over-redaction 字段不能直接衡量被不必要删除的字符数。
幻觉指标独立于解析标志,使用源文本匹配进行计算。未知类型和普通文本不纳入其行数分母。当前推理辅助程序会把空输出或至少包含一行可匹配源文本的输出标为可解析;这并不代表已严格验证每一行输出。 如果该标志为 False,评估器会排除实体预测。
分母为零时结果为零,包括实体集合为空时的 F1。重复的记录/预测 ID、针对未知记录的预测,以及无法与源文本匹配的 gold 标注都会被拒绝。错误消息不会回显原始实体值。
训练记录与验证
JSONL 记录包含 source_text、entities 和 target_tsv。加载器会构造系统/用户提示和 assistant 补全文本。训练器要求仅对补全部分计算损失;执行时仍应验证实际的分词器/模板、截断行为和损失掩码。不要将源文本、补全文本和映射写入普通日志或 MLflow 参数/标签。
回归测试在修复前复现了令牌冲突、有损变体还原、数字变体过度接受以及评估错误。 全部 50 项本地测试均通过。另有针对 2,200 条记录的 ground-truth oracle 检查,用于验证哈希保持、确定性、还原和覆盖情况。 Oracle 合理性检查结果并非模型预测,也不是微调后的 F1 测量结果。 未执行 GPU 训练或真实客户 PII 处理。