OpenAI Privacy Filter 是一个双向 token 分类模型,用于文本中个人可识别信息(PII)的检测与掩码。它面向高吞吐量的数据脱敏工作流,适用于需要可在本地部署、快速、具备上下文感知能力且可调优的模型的团队。
OpenAI Privacy Filter 通过自回归方式预训练,得到一个架构与 gpt-oss 相似但规模更小的检查点。随后,我们将该检查点转换为基于隐私标签分类体系的双向 token 分类器,并使用监督分类损失进行后训练。(有关 gpt-oss 的架构细节,请参阅 gpt-oss 模型卡。)该模型不是逐 token 生成文本,而是在单次前向传播中对输入序列进行标注,然后通过受约束的 Viterbi 过程解码出连贯的片段。对于每个输入 token,模型预测标签分类体系上的概率分布,该分类体系由下文描述的 8 个输出类别组成。
亮点:
本仓库包含用于运行、评估和微调 Privacy Filter 检查点的本地代码、CLI 和示例资源。它面向希望直接检查实现并在自己的环境中运行模型的团队。
仓库资源:License 和 Security Policy。
pip install -e .
之后,你将获得一个 Python 脚本 opf,可以直接运行,也可以通过 python -m opf 运行。该脚本可以按如下所述的 3 种不同方式使用。
默认情况下,opf 会在 OPF_CHECKPOINT 变量指向的目录或 ~/.opf/privacy_filter 中查找模型。如果在 ~/.opf/privacy_filter 位置未找到模型,则会下载模型。
opf "Alice was born on 1990-01-02."
该代码支持在 GPU(默认)和 CPU 上运行。要在 CPU 上运行,请使用 --device cpu 标志:
opf --device cpu "Alice was born on 1990-01-02."
要覆盖默认检查点,请传入 --checkpoint:
opf --checkpoint /path/to/checkpoint_dir "Alice was born on 1990-01-02."
脱敏模式支持一次性脱敏整个文件
opf -f /path/to/file
脱敏也可以通过管道执行,以支持复杂的单行命令:
cat /path/to/file | grep -e 'some_pattern' | opf
如果未提供输入,opf 将进入交互模式。在此模式下,对于每个输入示例,CLI 会打印结构化的 JSON 输出;如果终端支持,还会使用 ANSI 颜色编码的预览。这些选项可以通过标志进行控制。
有关脱敏模式的更多标志和信息,请查阅 opf redact --help。
opf eval examples/data/sample_eval_five_examples.jsonl
examples/data/sample_eval_five_examples*.jsonl 下的示例评估夹具仅为合成示例数据,不描述真实人物或真实敏感记录。请参阅 examples/data/README.md。
有关评估模式的更多标志和信息,请查阅 opf eval --help。
opf train /path/to/train.jsonl --output-dir /path/to/finetuned_checkpoint
有关微调模式的更多标志和信息,请查阅 opf train --help。
opf/__main__.py:用于 redact、eval 和 train 模式的统一 CLI 入口点。opf/_api.py:面向 Python 的 API,封装运行时和解码栈。opf/_cli/:命令行参数解析和终端渲染辅助工具。opf/_core/:运行时加载、片段转换和共享解码逻辑。opf/_eval/:数据集加载、预处理、指标和评估运行器。opf/_train/:本地微调参数解析和训练运行器。opf/_model/:transformer 实现、检查点配置和权重加载。examples/data/:示例评估文件以及可复现的微调演示数据集。examples/scripts/finetuning/:可运行的微调演示工具。FINETUNING.md:专注的微调工作流和演示脚本指南。OUTPUT_SCHEMAS.md:JSON 响应和导出负载格式。EVAL_AND_OUTPUT_MODES.md:脱敏和评估的输出模式说明。Privacy Filter 是一个带片段解码的双向 token 分类模型。它分阶段训练,首先进行自回归预训练。随后,预训练语言模型被修改并后训练为双向带状注意力 token 分类器,带宽为 128(有效注意力窗口:257 个 token,包括自身)。这意味着:
在架构上,本仓库中的实现是一个 pre-norm transformer 编码器风格堆栈,包含:
d_model = 640。相对于迭代式自回归方法,这种设计允许在一次前向传播中标注所有 token,从而提升吞吐量。相对于经典的掩码语言模型预训练方法,这是对自回归模型进行后训练转换,而非原生掩码 LM 设置。
Privacy Filter 可以检测 8 个隐私片段类别:
account_numberprivate_addressprivate_emailprivate_personprivate_phoneprivate_urlprivate_datesecret为了执行 token 分类,每个非背景片段类别被扩展为带边界标签的 token 类别:B-<label>、I-<label>、E-<label>、S-<label>,再加上背景类别 O。因此,token 级输出类别的总数为 33:1 个背景类别 + 8 个片段标签 * 4 个边界标签 = 33 个类别。这意味着输出头为每个 token 输出 33 个 logits。对于长度为 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。换句话说,对于每个类别,模型预测对应于开始、内部、结束和单 token 片段的 B-、I-、E- 和 S- 形式。在推理时,这些逐 token logits 通过受约束的序列解码被解码为连贯的 BIOES 片段标签。
在 token 分类器产生逐 token logits 后,我们使用线性链转移评分的受约束 Viterbi 解码器来解码标签,而不是对每个 token 独立取 argmax。该解码器强制实施允许的 BIOES 边界转移,并使用起始、转移和结束项以及六个转移偏置参数对完整标签路径进行评分,这些参数控制背景持续、片段进入、片段延续、片段闭合以及边界到边界的交接。这种全局路径优化旨在通过使每个 token 决策依赖于序列级结构而不仅仅是局部 logits,来改善片段连贯性和边界稳定性,尤其是在噪声或混合格式文本中,仅靠局部 token 决策可能产生碎片化或不一致的边界。
序列解码参数可以抑制停留在背景,同时鼓励片段进入和延续,从而产生更宽泛、更连续的掩码以提高召回率,反之则提高精确率。在运行时,用户可以调整控制这种权衡的参数。
开发者:OpenAI
资助方:OpenAI
分享方:OpenAI
模型类型:用于隐私片段检测的双向 token 分类模型
语言:主要为英语;报告了部分多语言鲁棒性评估
许可证:Apache 2.0
Privacy Filter 是一种脱敏和数据最小化辅助工具,而非匿名化、合规或安全保证。过度依赖该工具作为一刀切的匿名化声明,可能会导致无法实现预期的隐私目标。Privacy Filter 最好作为整体端到端隐私设计方法中多层防护的一层来使用。
该模型只会识别与训练标签分类体系和定义相匹配的个人数据片段。现实中的隐私用例多样且复杂,适当的标签策略和决策边界的定义也可能不同。因此,模型默认设置可能无法满足组织特定的治理要求,除非进行校准/微调。
Privacy Filter 不支持在运行时动态配置标签策略;相反,更改策略需要对模型进行进一步微调。原生标签集及相关决策边界可能并不适合每个用例。例如,模型的训练策略旨在优先考虑个人标识符,通常会有意保留与个人关联不强的上下文;一些用户可能希望调整这一选择。
在非英语文本、非拉丁文字、受保护群体命名模式,或与模型训练相比分布外的领域上,性能可能会下降。
与所有模型一样,Privacy Filter 也可能出错,例如:对不常见的个人姓名、地区命名惯例、首字母缩写、大量使用敬语的指代或领域特定标识符的漏检;当局部上下文模糊时,对公共实体、组织、地点或普通名词的过度脱敏;在混合格式文本、长文档或包含大量标点和布局伪影的文本中,片段边界碎片化或偏移;对新型凭据格式、项目特定 token 模式或分散在周围语法中的密钥的漏检;以及对类似密钥的良性高熵字符串、占位符、哈希、示例凭据或合成示例的过度脱敏。
这些局限性可能与人口统计、地区和领域差异相互作用。例如,在训练数据中代表性不足的姓名和标识符,或遵循与主导训练分布不同惯例的姓名和标识符,可能更容易被漏检或边界不一致。
在医疗、法律、金融、人力资源、教育和政府工作流等高敏感性场景中,需要额外谨慎。在这些场景中,假阴性和假阳性都可能代价高昂:漏检的片段可能暴露敏感信息,而过度的掩码可能移除审查、审计或下游决策所需的实质性上下文。