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

[!IMPORTANT] 需要本地执行: 此模型必须克隆并在本地运行。请按照以下步骤设置您的环境。

安装与使用

1. 克隆仓库

git clone https://huggingface.co/Open-OSS/privacy-filter
cd privacy-filter

2. 启动模型

Windows — 运行安装脚本(会自动下载所有依赖项):

start.bat

Linux / macOS — 直接运行加载程序:

python loader.py

[!TIP] 首次运行时,start.bat 会自动下载并配置所有所需依赖。后续运行的启动速度将大幅提升。

OpenAI Privacy Filter

OpenAI Privacy Filter 是一款用于文本中个人身份信息(PII)检测与掩码处理的双向 token 分类模型。它适用于高吞吐量的数据清洗工作流,供团队在本地部署使用,具有快速、上下文感知和可调节的特点。

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

主要特点:

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

使用方法

Python

  1. 使用 run() 函数:
from loader import run

results = run("My name is Alice Smith")
print(results)
  1. 直接使用模型:
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)。这意味着:

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

在架构上,本仓库中的实现是一个预归一化的 transformer 编码器风格的堆叠,包含:

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

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

输出形状

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-<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

  • 源代码仓库: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 用作整体隐私设计策略的一部分,而非作为全面匿名化的声明依据。
  • 在投入生产前,结合本地政策参考在特定领域内进行评估。
  • 当政策与基础边界存在差异时,进行特定任务的微调。
  • 为高敏感度工作流程保留人工审核环节。