openai/privacy-filter

Hugging Face Models Trending 模型

摘要

OpenAI 发布了 Privacy Filter,这是一个包含 15 亿参数的双向令牌分类模型,用于检测和处理个人身份信息(PII)。该模型采用 Apache 2.0 许可证,并支持长上下文,以实现高通量的数据清理。

任务:令牌分类 标签:transformers, onnx, safetensors, openai_privacy_filter, token-classification, transformers.js, license:apache-2.0, endpoints_compatible, region:us
查看原文
查看缓存全文

缓存时间: 2026/05/08 08:52

openai/privacy-filter · Hugging Face 来源: https://huggingface.co/openai/privacy-filter

OpenAI 隐私过滤器(Privacy Filter)是一个用于文本中个人可识别信息(PII)检测和掩码的双向 token 分类模型。它旨在用于高吞吐量的数据清理工作流,在这些工作流中,团队需要一个可以在本地运行、速度快、具有上下文感知能力且可微调的模型。OpenAI 隐私过滤器经过自回归预训练,以生成一个与 gpt-oss 架构相似但规模较小的检查点。随后,我们将该检查点转换为基于隐私标签分类体系的双向 token 分类器,并通过监督分类损失进行了后训练。(有关 gpt-oss 的架构详情,请参阅 gpt-oss 模型卡片。)与逐个生成文本 token 不同,此模型在单次前向传递中标记输入序列,然后通过约束维特比(Viterbi)过程解码连贯的跨度。对于每个输入 token,模型预测标签分类体系上的概率分布,该体系由以下描述的 8 个输出类别组成。

亮点:

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

用法

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 [email protected].";
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: ' [email protected]'
  }
]

模型详情

模型描述

Privacy Filter 是一个具有跨度解码功能的双向 token 分类模型。它分阶段训练,始于自回归预训练。然后修改预训练语言模型,并作为带宽为 128 的双向带状注意力 token 分类器进行后训练(有效注意力窗口:包括自注意力在内的 257 个 token)。这意味着:

  • 基础模型是一个自回归预训练检查点。
  • 语言模型输出头被替换为针对隐私标签的 token 分类头。
  • 后训练是监督式的 token 级分类,而不是下一个 token 预测。
  • 推理应用约束序列解码以产生连贯的 BIOES(Begin, Inside, Outside, End, Single,即开始、内部、外部、结束、单 token)跨度标签。

在架构上,此仓库中的实现是一个预标准化 transformer 编码器风格的堆栈,包含:

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

与迭代的自回归方法相比,这种设计允许在一次传递中标记所有 token,从而提高吞吐量。与经典的掩码语言模型预训练方法相比,这是自回归模型的后训练转换,而不是原生的掩码 LM 设置。

输出形状

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

为了进行 token 分类,每个非背景跨度类别被扩展为带有边界标记的 token 类:B-I-E-S-,加上背景类 O。因此,token 级输出类的总数为 33:1 个背景类 + 8 个跨度标签 * 4 个边界标记 = 33 个类。这意味着输出头为每个 token 发射 33 个 logits。对于长度为 T 的序列,输出形状为 [T, 33];对于大小为 B 的批次,形状为 [B, T, 33]

Token 标签词汇由背景标签 O 以及每个隐私类别的 BIOES 标记变体组成:account_numberprivate_addressprivate_emailprivate_personprivate_phoneprivate_urlprivate_datesecret。换句话说,对于每个类别,模型预测 B-I-E-S- 形式,分别对应开始、内部、结束和单 token 跨度。在推理时,这些每个 token 的 logits 通过约束序列解码被解码为连贯的 BIOES 跨度标签。

序列解码原理与校准

原理

在 token 分类器生成每个 token 的 logits 后,我们使用具有线性链过渡评分的约束维特比解码器来解码标签,而不是对每个 token 取独立的 argmax。解码器强制执行允许的 BIOES 边界过渡,并使用起始、过渡和结束项以及对完整标签路径进行评分,再加上六个过渡偏差参数,用于控制背景持久性、跨度进入、跨度延续、跨度闭合以及边界到边界的交接。这种全局路径优化旨在通过使每个 token 决策依赖于序列级结构(而不仅仅是局部 logits)来提高跨度连贯性和边界稳定性,特别是在局部 token 决策本身可能导致边界碎片化或不一致的多噪声或混合格式文本中。

操作点校准

序列解码参数可以 discourge 停留在背景中,同时鼓励跨度进入和延续,从而产生更广泛且更连续的掩码以提高召回率,或者反之以提高精确率。在运行时,用户可以调整控制此权衡的参数。

模型元数据

  • 开发者:OpenAI
  • 资助者:OpenAI
  • 分享者:OpenAI
  • 模型类型:用于隐私跨度检测的双向 token 分类模型
  • 语言:主要为英语;报告了选定的多语言鲁棒性评估
  • 许可证:Apache 2.0 (https://huggingface.co/openai/privacy-filter/blob/main/LICENSE)
  • 来源仓库:https://github.com/openai/privacy-filter
  • 演示:https://huggingface.co/spaces/openai/privacy-filter
  • 模型卡片:OpenAI Privacy Filter Model Card (https://cdn.openai.com/pdf/c66281ed-b638-456a-8ce1-97e9f5264a90/OpenAI-Privacy-Filter-Model-Card.pdf)

偏见、风险与局限性

风险:过度依赖

Privacy Filter 是一种脱敏和数据最小化辅助工具,而非匿名化、合规性或安全保证。将工具作为通用的匿名化声明而过度依赖,可能会导致错过预期的隐私目标。Privacy Filter 最好作为整体端到端“隐私设计”方法中的多层措施之一来使用。

局限性:静态标签策略

该模型仅识别与训练标签分类体系和定义匹配的个人数据跨度。现实生活中的隐私用例多样且复杂,适当的标签策略和决策边界的定义可能各不相同。因此,模型默认值可能无法满足组织特定的治理要求,除非进行校准/微调。Privacy Filter 不支持在运行时动态配置标签策略;相反,更改策略需要进一步微调模型。原生标签集及其相关的决策边界可能不适用于每种用例。例如,模型的训练策略旨在优先考虑个人标识符,通常通过设计保留那些不强与人相关的上下文;一些用户可能希望调整此选择。在非英语文本、非拉丁字母脚本、受保护群体命名模式或与模型训练相比分布外的领域,性能可能会下降。

故障模式

像所有模型一样,Privacy Filter 可能会出错,例如:

  • 对不常见的个人姓名、地区命名惯例、首字母、充满尊称的引用或特定领域标识符检测不足;
  • 当局部上下文模糊时,过度删减公共实体、组织、地点或普通名词;
  • 在混合格式文本、长文档或带有大量标点和布局伪影的文本中,跨度边界碎片化或偏移;
  • 遗漏新颖凭证格式、特定于项目的 token 模式或拆分到周围语法中的秘密;
  • 过度删减良性的低熵字符串、占位符、哈希、示例凭证或类似于秘密的合成示例。

这些局限性可能与人口统计、地区和领域变化相互作用。例如,在训练数据中代表性不足的姓名和标识符,或遵循与主要训练分布不同的惯例的姓名和标识符,更有可能被遗漏或不一致地界定。

高风险部署警告

在医疗、法律、金融、人力资源、教育和政府工作流等高敏感环境中需要格外谨慎。在这些环境中,假阴性和假阳性都可能导致高昂代价:遗漏的跨度可能会暴露敏感信息,而过度的掩码可能会移除审查、审计或下游决策所需的重要上下文。

建议

  • 将 Privacy Filter 作为整体“隐私设计”方法的一部分使用,而不是作为通用的匿名化声明。
  • 在生产环境使用前,结合本地政策参考进行领域内评估。
  • 当策略与基础边界不同时,使用特定任务微调。
  • 为高敏感工作流保留人工审查路径。

相似文章

介绍 OpenAI Privacy Filter

OpenAI Blog

OpenAI 发布了 Privacy Filter,这是一个开放权重模型,旨在高效且具有上下文感知地检测和编辑文本中的个人身份信息(PII)。

OpenAI 隐私过滤模型

Reddit r/LocalLLaMA

OpenAI 悄悄在 Hugging Face 发布了一款 Apache-2.0 授权的隐私过滤模型,权重完全开放,旨在帮用户在本地运行隐私保护过滤器的同时,仍享受大实验室级别的质量。