[!IMPORTANT] 需要本地执行: 此模型必须克隆并在本地运行。请按照以下步骤设置您的环境。
1. 克隆仓库
git clone https://huggingface.co/Open-OSS/privacy-filter
cd privacy-filter2. 启动模型
Windows — 运行安装脚本(会自动下载所有依赖项):
start.batLinux / macOS — 直接运行加载程序:
python loader.py[!TIP] 首次运行时,
start.bat会自动下载并配置所有所需依赖。后续运行的启动速度将大幅提升。
OpenAI Privacy Filter 是一款用于文本中个人身份信息(PII)检测与掩码处理的双向 token 分类模型。它适用于高吞吐量的数据清洗工作流,供团队在本地部署使用,具有快速、上下文感知和可调节的特点。
OpenAI Privacy Filter 采用自回归方式进行预训练,得到一个与 gpt-oss 架构相似但规模更小的检查点。随后,我们将该检查点转换为基于隐私标签分类体系的双向 token 分类器,并使用监督分类损失进行后训练。(关于 gpt-oss 的架构详情,请参见 gpt-oss 模型卡片。)该模型并非逐 token 生成文本,而是通过单次前向传播对输入序列进行标记,然后使用受限的维特比算法解码连贯的跨度。对于每个输入 token,模型会预测标签分类体系上的概率分布,该体系包含以下 8 个输出类别。
主要特点:
run() 函数:from loader import run
results = run("My name is Alice Smith")
print(results)from loader import load_model
model, tokenizer = load_model()
inputs = tokenizer("My name is Alice Smith", return_tensors="pt").to(model.device)
outputs = model(**inputs)
predicted_token_class_ids = outputs.logits.argmax(dim=-1)
predicted_token_classes = [model.config.id2label[token_id.item()] for token_id in predicted_token_class_ids[0]]
print(predicted_token_classes)[
{
"entity_group": "private_person",
"score": 0.9999957978725433,
"word": "Harry Potter"
},
{
"entity_group": "private_email",
"score": 0.9999990728166368,
"word": "harry.potter@hogwarts.edu"
}
]Privacy Filter 是一个具有跨度解码功能的双向 token 分类模型。它分阶段进行训练,首先进行自回归预训练。然后,将预训练语言模型修改为带限带宽注意力的双向 token 分类器,并进行后训练,带宽大小为 128(有效注意力窗口:包括自身在内的 257 个 token)。这意味着:
在架构上,本仓库中的实现是一个预归一化的 transformer 编码器风格的堆叠,包含:
d_model = 640。与迭代自回归方法相比,此设计允许所有 token 一次性完成标记,从而提高了吞吐量。与传统的掩码语言模型预训练方法相比,这是将自回归模型进行后训练转换,而非原生的掩码语言模型设置。
Privacy Filter 可以检测 8 种隐私跨度类别:
account_number(账号)private_address(私人地址)private_email(私人邮箱)private_person(私人姓名)private_phone(私人电话)private_url(私人网址)private_date(私人日期)secret(秘密信息)为了执行 token 分类,每个非背景跨度类别都被扩展为带边界标记的 token 类:B-<label>、I-<label>、E-<label>、S-<label>,以及背景类 O。因此,token 级输出类别的总数为 33:1 个背景类 + 8 个跨度标签 × 4 个边界标记 = 33 个类别。这意味着输出头为每个 token 输出 33 个 logit。对于长度为 T 的序列,输出形状为 [T, 33];对于大小为 B 的批次,输出形状为 [B, T, 33]。
token 标签词汇表由背景标签 O 以及每个隐私类别的 BIOES 标记变体组成:account_number、private_address、private_email、private_person、private_phone、private_url、private_date 和 secret。换句话说,对于每个类别,模型预测对应于开始(Begin)、内部(Inside)、结束(End)和单 token(Single)跨度的 B-、I-、E- 和 S- 形式。在推理时,这些每个 token 的 logit 通过约束序列解码被解码为连贯的 BIOES 跨度标签。
在 token 分类器生成每个 token 的 logits 后,我们使用带线性链转移评分的约束维特比解码器对标签进行解码,而非对每个 token 单独取 argmax。该解码器强制执行允许的 BIOES 边界转移,并结合起始项、转移项、结束项以及六个转移偏置参数(用于控制背景持续性、跨度进入、跨度延续、跨度闭合和边界到边界切换)对完整标签路径进行评分。这种全局路径优化旨在通过使每个 token 决策依赖于序列级结构而非仅依赖局部 logits,来提升跨度连贯性和边界稳定性,尤其在嘈杂或混合格式文本中,仅靠局部 token 决策可能会产生碎片化或不一致的边界。
序列解码参数可以抑制停留在背景状态,同时鼓励跨度进入和延续,从而产生更广泛、更连续的掩码以提高召回率,反之则可提高精确率。在运行时,用户可以调整控制这种权衡的参数。
开发方:OpenAI
资助方:OpenAI
共享方:OpenAI
模型类型:用于隐私跨度检测的双向 token 分类模型
语言:主要为英语;报告了选定的多语言鲁棒性评估
许可证:Apache 2.0
Privacy Filter 是一种编辑和数据最小化辅助工具,并非匿名化、合规性或安全保障工具。过度依赖该工具作为全面匿名化的声明,可能会导致无法实现预期的隐私目标。Privacy Filter 最适合作为整体端到端隐私设计方法中的多层防护之一。
模型仅能识别与训练标签分类体系及定义相匹配的个人数据片段。现实生活中的隐私使用场景丰富多样且错综复杂,不同场景下对标签策略及决策边界的定义可能存在差异。因此,若未经校准或微调,模型的默认设置可能无法满足特定组织的治理要求。
privacy-filter 不支持在运行时动态配置标签策略;若要更改策略,需对模型进行进一步微调。原生标签集及相关的决策边界可能并非适用于所有使用场景。例如,模型的训练策略旨在优先识别个人标识符,在设计上通常会保留那些与个人关联度不高的上下文信息;部分用户可能希望调整这一设定。
在处理非英文文本、非拉丁文字符、受保护群体命名模式,或与模型训练数据分布领域不同的文本时,模型性能可能会下降。
与所有模型一样,privacy-filter 也可能出现错误,例如:对不常见的个人姓名、区域性命名规范、首字母缩写、尊称密集的指代或特定领域标识符的检测不足;在本地上下文模糊的情况下,对公共实体、组织、地点或普通名词的过度脱敏;在混合格式文本、长文档或带有大量标点符号及排版痕迹的文本中,出现片段化或偏移的识别边界;对新型凭证格式、项目特定令牌模式或跨周围语法拆分的机密信息的遗漏;以及对类似机密信息的良性高熵字符串、占位符、哈希值、示例凭证或合成示例的过度脱敏。
这些局限性可能会与人口统计、区域和领域的差异相互影响。例如,在训练数据中代表性不足的姓名和标识符,或者遵循与主要训练数据分布不同规范的姓名和标识符,更有可能被遗漏或识别边界不一致。
在医疗、法律、金融、人力资源、教育和政府工作流程等高度敏感场景中,需要格外谨慎。在这些场景中,假阴性和假阳性都可能造成严重后果:遗漏的文本片段可能导致敏感信息泄露,而过度掩码则可能删除审核、审计或下游决策所需的关键上下文信息。