OpenAI 隐私过滤器是一个双向令牌分类模型,用于文本中的个人身份信息(PII)检测和屏蔽。它适用于高吞吐量的数据清理工作流,团队需要一个可以在本地运行、速度快、具有上下文感知能力且可调整的模型。
OpenAI 隐私过滤器采用自回归方式进行预训练,得到一个与 gpt-oss 架构相似但规模更小的检查点。然后,我们将该检查点转换为基于隐私标签分类体系的双向令牌分类器,并使用监督分类损失进行后训练。(有关 gpt-oss 的架构详情,请参见 gpt-oss 模型卡片。)该模型并非逐令牌生成文本,而是通过单次前向传播对输入序列进行标记,然后使用受限的维特比算法解码连贯的跨度。对于每个输入令牌,模型预测标签分类体系上的概率分布,该体系包含以下 8 个输出类别。
主要特点:
pipeline API:from transformers import pipeline
classifier = pipeline(
task="token-classification",
model="openai/privacy-filter",
)
classifier("My name is Alice Smith")AutoModelForTokenClassification 模型使用:import torch
from transformers import AutoModelForTokenClassification, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("openai/privacy-filter")
model = AutoModelForTokenClassification.from_pretrained("openai/privacy-filter", device_map="auto")
inputs = tokenizer("My name is Alice Smith", return_tensors="pt").to(model.device)
with torch.no_grad():
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)pipeline API:import { pipeline } from "@huggingface/transformers";
const classifier = await pipeline(
"token-classification", "openai/privacy-filter",
{ device: "webgpu", dtype: "q4" },
);
const input = "My name is Harry Potter and my email is harry.potter@hogwarts.edu.";
const output = await classifier(input, { aggregation_strategy: "simple" });
console.dir(output, { depth: null });[
{
entity_group: 'private_person',
score: 0.9999957978725433,
word: ' Harry Potter'
},
{
entity_group: 'private_email',
score: 0.9999990728166368,
word: ' harry.potter@hogwarts.edu'
}
]Privacy Filter 是一款采用跨度解码的双向令牌分类模型。它通过分阶段训练而成,首先进行自回归预训练。随后,预训练语言模型经过调整,以带束注意力(束大小为 128,有效注意力窗口:包含自身在内的 257 个令牌)的双向令牌分类器形式进行后训练。具体说明如下:
在架构上,本仓库中的实现采用预归一化(pre-norm)Transformer 编码器风格的堆叠结构,包含:
d_model = 640。与迭代式自回归方法相比,此设计允许所有令牌在一次处理中完成标记,从而提高了吞吐量。与传统的掩码语言模型预训练方法相比,这是将自回归模型进行后训练转换,而非原生的掩码语言模型设置。
Privacy Filter 可以检测 8 种隐私跨度类别:
account_numberprivate_addressprivate_emailprivate_personprivate_phoneprivate_urlprivate_datesecret为进行令牌分类,每个非背景跨度类别都扩展为带边界标记的令牌类:B-<label>、I-<label>、E-<label>、S-<label>,再加上背景类 O。因此,令牌级输出类别的总数为 33 个:1 个背景类 + 8 个跨度标签 × 4 个边界标记 = 33 个类别。这意味着输出头为每个令牌生成 33 个 logit。对于长度为 T 的序列,输出形状为 [T, 33];对于大小为 B 的批次,输出形状为 [B, T, 33]。
令牌标签词汇表由背景标签 O 以及每个隐私类别的 BIOES 标记变体组成:account_number、private_address、private_email、private_person、private_phone、private_url、private_date 和 secret。换句话说,对于每个类别,模型预测对应于开始、内部、结束和单令牌跨度的 B-、I-、E- 和 S- 形式。在推理时,这些每个令牌的 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 也可能出现错误,例如:对不常见的个人姓名、区域性命名规范、首字母缩写、尊称密集的指代或特定领域标识符的检测不足;在上下文模糊的情况下,对公共实体、组织、地点或普通名词的过度脱敏;在混合格式文本、长文档或包含大量标点符号及格式干扰的文本中,出现片段化或偏移的识别边界;对新型凭证格式、项目特定令牌模式或被周围语法拆分的机密信息的漏检;以及对看似机密的良性高熵字符串、占位符、哈希值、示例凭证或合成示例的过度脱敏。
这些局限性可能会与人口统计、地区和领域的差异相互影响。例如,在训练数据中代表性不足的姓名和标识符,或遵循与主要训练数据分布不同规范的姓名和标识符,更有可能被漏检或识别边界不一致。
在医疗、法律、金融、人力资源、教育和政府工作流程等高度敏感场景中,需要格外谨慎。在这些场景中,假阴性和假阳性都可能造成严重后果:遗漏的文本片段可能导致敏感信息泄露,而过度屏蔽则可能移除审核、审计或下游决策所需的重要上下文信息。