o
openai/privacy-filter
模型介绍文件和版本分析
下载使用量0

OpenAI 隐私过滤器

OpenAI 隐私过滤器是一个双向令牌分类模型,用于文本中的个人身份信息(PII)检测和屏蔽。它适用于高吞吐量的数据清理工作流,团队需要一个可以在本地运行、速度快、具有上下文感知能力且可调整的模型。

OpenAI 隐私过滤器采用自回归方式进行预训练,得到一个与 gpt-oss 架构相似但规模更小的检查点。然后,我们将该检查点转换为基于隐私标签分类体系的双向令牌分类器,并使用监督分类损失进行后训练。(有关 gpt-oss 的架构详情,请参见 gpt-oss 模型卡片。)该模型并非逐令牌生成文本,而是通过单次前向传播对输入序列进行标记,然后使用受限的维特比算法解码连贯的跨度。对于每个输入令牌,模型预测标签分类体系上的概率分布,该体系包含以下 8 个输出类别。

主要特点:

  • 宽松的 Apache 2.0 许可证:非常适合实验、定制和商业部署。
  • 体积小巧:可在网络浏览器或笔记本电脑上运行——总参数为 15 亿,活跃参数为 5000 万。
  • 可微调:通过简单且数据高效的微调,使模型适应特定的数据分布。
  • 长上下文:128,000 令牌的上下文窗口支持高吞吐量处理长文本,无需分块。
  • 运行时控制:通过预设操作点配置精确率/召回率权衡以及检测到的跨度长度。

使用方法

Transformers

  1. 使用 pipeline API:
from transformers import pipeline

classifier = pipeline(
    task="token-classification",
    model="openai/privacy-filter",
)
classifier("My name is Alice Smith")
  1. 作为 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)

Transformers.js

  1. 使用 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 个令牌)的双向令牌分类器形式进行后训练。具体说明如下:

  • 基础模型为自回归预训练检查点。
  • 语言模型输出头替换为针对隐私标签的令牌分类头。
  • 后训练采用有监督的令牌级分类,而非下一个令牌预测。
  • 推理阶段应用约束序列解码,生成连贯的 BIOES(开始、内部、外部、结束、单个)跨度标签。

在架构上,本仓库中的实现采用预归一化(pre-norm)Transformer 编码器风格的堆叠结构,包含:

  • 令牌嵌入
  • 8 个重复的 Transformer 块
  • 带有旋转位置嵌入的分组查询注意力,包含 14 个查询头和 2 个键值头(每组 7 个查询对应 1 个键值头)
  • 稀疏混合专家前馈块,共 128 个专家(每个令牌路由至前 4 位专家)
  • 一个针对隐私标签的最终令牌分类头(而非自然语言词汇令牌),残差流宽度 d_model = 640。

与迭代式自回归方法相比,此设计允许所有令牌在一次处理中完成标记,从而提高了吞吐量。与传统的掩码语言模型预训练方法相比,这是将自回归模型进行后训练转换,而非原生的掩码语言模型设置。

输出形状

Privacy Filter 可以检测 8 种隐私跨度类别:

  1. account_number
  2. private_address
  3. private_email
  4. private_person
  5. private_phone
  6. private_url
  7. private_date
  8. secret

为进行令牌分类,每个非背景跨度类别都扩展为带边界标记的令牌类: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

  • 源代码库:https://github.com/openai/privacy-filter

  • 演示:https://huggingface.co/spaces/openai/privacy-filter

  • 模型卡片:OpenAI Privacy Filter Model Card

偏差、风险与局限性

风险:过度依赖

Privacy Filter 是一种编辑和数据最小化辅助工具,而非匿名化、合规性或安全保障工具。过度依赖该工具作为全面匿名化的声明,可能会导致无法实现预期的隐私目标。Privacy Filter 最适合作为整体端到端隐私设计方法中的多层措施之一。

局限性:静态标签策略

模型仅能识别与训练标签分类体系及定义相匹配的个人数据片段。现实生活中的隐私使用场景丰富多样且错综复杂,不同场景下对标签策略和决策边界的定义可能存在差异。因此,若未经校准或微调,模型的默认设置可能无法满足特定组织的治理要求。

privacy-filter 不支持在运行时动态配置标签策略;若要更改策略,需对模型进行进一步微调。原生标签集及相关的决策边界可能并非适用于所有使用场景。例如,模型的训练策略旨在优先识别个人标识符,在设计上通常会保留那些与个人关联度不高的上下文信息;但部分用户可能希望调整这一设置。

在处理非英文文本、非拉丁文字符、受保护群体命名模式,或与模型训练数据分布领域不同的文本时,模型性能可能会下降。

失效模式

与所有模型一样,privacy-filter 也可能出现错误,例如:对不常见的个人姓名、区域性命名规范、首字母缩写、尊称密集的指代或特定领域标识符的检测不足;在上下文模糊的情况下,对公共实体、组织、地点或普通名词的过度脱敏;在混合格式文本、长文档或包含大量标点符号及格式干扰的文本中,出现片段化或偏移的识别边界;对新型凭证格式、项目特定令牌模式或被周围语法拆分的机密信息的漏检;以及对看似机密的良性高熵字符串、占位符、哈希值、示例凭证或合成示例的过度脱敏。

这些局限性可能会与人口统计、地区和领域的差异相互影响。例如,在训练数据中代表性不足的姓名和标识符,或遵循与主要训练数据分布不同规范的姓名和标识符,更有可能被漏检或识别边界不一致。

高风险部署注意事项

在医疗、法律、金融、人力资源、教育和政府工作流程等高度敏感场景中,需要格外谨慎。在这些场景中,假阴性和假阳性都可能造成严重后果:遗漏的文本片段可能导致敏感信息泄露,而过度屏蔽则可能移除审核、审计或下游决策所需的重要上下文信息。

建议

  • 将 Privacy Filter 用作整体隐私设计策略的一部分,而非作为全面匿名化的绝对保证。
  • 在投入生产前,结合本地政策参考在特定领域内进行评估。
  • 当政策与基础边界存在差异时,使用针对特定任务的微调。
  • 为高敏感度工作流程保留人工审核环节。