Transformers 文档
OpenAI Privacy Filter
并获得增强的文档体验
开始使用
此模型于 2026 年 4 月 22 日贡献给 Hugging Face Transformers。
OpenAI 隐私过滤器
OpenAI 隐私过滤器 (OpenAI Privacy Filter) 是一种用于文本中个人身份信息 (PII) 检测和遮蔽的双向令牌分类模型。它专为高吞吐量的数据清洗工作流而设计,适用于团队需要在本地运行、且要求模型具有快速、上下文感知及可调优特性的场景。
OpenAI 隐私过滤器通过自回归预训练获得,其检查点 (checkpoint) 架构与 gpt-oss 相似,但规模较小。随后,我们将该检查点转换为基于隐私标签分类法的双向令牌分类器,并使用监督分类损失进行后训练。(有关 gpt-oss 的架构详细信息,请参阅 gpt-oss 模型卡。)该模型不采用逐个令牌生成文本的方式,而是通过单次前向传递对输入序列进行标注,然后使用受限的维特比 (Viterbi) 程序解码连贯的跨度。对于每个输入令牌,模型会针对包含下述 8 个输出类别的标签分类法预测概率分布。
亮点
- 宽松的 Apache 2.0 许可证:非常适合实验、定制和商业部署。
- 小巧体量:可在网页浏览器或笔记本电脑上运行——总参数量 1.5B,活跃参数量 50M。
- 可微调:通过简便且高效的数据微调,使模型适应特定的数据分布。
- 长上下文:128,000 个令牌的上下文窗口支持高吞吐量处理长文本,无需进行分块。
- 运行时控制:通过预设的操作点配置精度/召回率权衡以及检测到的跨度长度。
以下示例演示了如何使用 Pipeline 或 AutoModelForTokenClassification 类来检测隐私敏感令牌。
from transformers import pipeline
classifier = pipeline(
task="token-classification",
model="openai/privacy-filter",
)
classifier("My name is Alice Smith")开发方:OpenAI
资助方:OpenAI
共享方:OpenAI
模型类型:用于隐私跨度检测的双向令牌分类模型
语言:主要是英语;已报告部分多语言鲁棒性评估结果
许可证:Apache 2.0
资源
OpenAIPrivacyFilterConfig
class transformers.OpenAIPrivacyFilterConfig
< 源代码 >( transformers_version: str | None = None architectures: list[str] | None = None output_hidden_states: bool | None = False return_dict: bool | None = True dtype: typing.Union[str, ForwardRef('torch.dtype'), NoneType] = None chunk_size_feed_forward: int = 0 is_encoder_decoder: bool = False id2label: dict[int, str] | dict[str, str] | None = None label2id: dict[str, int] | dict[str, str] | None = None problem_type: typing.Optional[typing.Literal['regression', 'single_label_classification', 'multi_label_classification']] = None num_hidden_layers: int = 8 num_local_experts: int = 128 vocab_size: int = 200064 hidden_size: int = 640 intermediate_size: int = 640 head_dim: int = 64 num_attention_heads: int = 14 num_key_value_heads: int = 2 sliding_window: int = 128 tie_word_embeddings: bool = False initializer_range: float = 0.02 max_position_embeddings: int = 131072 rms_norm_eps: float = 1e-05 rope_parameters: dict | None = None attention_dropout: float | int = 0.0 num_experts_per_tok: int = 4 router_aux_loss_coef: float = 0.001 output_router_logits: bool = False use_cache: bool = True pad_token_id: int | None = 199999 bos_token_id: int | None = None eos_token_id: int | list[int] | None = 199999 attention_bias: bool = True classifier_dropout: float = 0.0 )
参数
- num_hidden_layers (
int, 可选, 默认值为8) — Transformer 解码器中的隐藏层数量。 - num_local_experts (
int, 可选, 默认值为128) — 每个设备上的局部专家数量。num_experts应能被num_local_experts整除。 - vocab_size (
int, 可选, 默认值为200064) — 模型词汇表大小。定义了input_ids可表示的不同令牌数量。 - hidden_size (
int, 可选, 默认值为640) — 隐藏表示的维度。 - intermediate_size (
int, 可选, 默认值为640) — MLP 表示的维度。 - head_dim (
int, 可选, 默认值为64) — 注意力头维度。如果为 None,默认值为 hidden_size // num_attention_heads。 - num_attention_heads (
int, 可选, 默认值为14) — Transformer 解码器中每个注意力层的注意力头数量。 - num_key_value_heads (
int, 可选, 默认值为2) — 这是用于实现分组查询注意力 (Grouped Query Attention) 的键值头数量。如果num_key_value_heads=num_attention_heads,模型将使用多头注意力 (MHA);如果num_key_value_heads=1,模型将使用多查询注意力 (MQA);否则将使用 GQA。在将多头检查点转换为 GQA 检查点时,应通过对组内的所有原始头进行平均池化来构建每个组的键和值头。更多详细信息,请查看这篇论文。如果未指定,默认值为num_attention_heads。 - sliding_window (
int, 可选, 默认值为128) — 滑动窗口注意力的窗口大小。如果为None,则不应用滑动窗口。 - tie_word_embeddings (
bool, 可选, 默认值为False) — 是否根据模型的tied_weights_keys映射来绑定权重嵌入。 - initializer_range (
float, 可选, 默认值为0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - max_position_embeddings (
int, 可选, 默认值为131072) — 该模型可能使用的最大序列长度。 - rms_norm_eps (
float, 可选, 默认值为1e-05) — RMS 标准化层使用的 epsilon 值。 - rope_parameters (
dict, 可选) — 包含 RoPE 嵌入配置参数的字典。字典应包含rope_theta的值,以及在需要将 RoPE 与更长的max_position_embeddings一起使用时可选的缩放参数。 - attention_dropout (
Union[float, int], 可选, 默认值为0.0) — 注意力概率的丢弃率 (dropout ratio)。 - num_experts_per_tok (
int, 可选, 默认值为4) — 每个令牌路由到的专家数量。这是令牌选择路由的 top-k 值。 - router_aux_loss_coef (
float, 可选, 默认值为0.001) — 辅助负载均衡损失系数。用于惩罚 MoE 模型中不均匀的专家路由。 - output_router_logits (
bool, 可选, 默认值为False) — 模型是否应返回路由器的逻辑值 (logits)。启用此功能还将允许模型输出辅助损失,包括负载均衡损失和路由器 z-loss。 - use_cache (
bool, 可选, 默认值为True) — 模型是否应返回最后的键/值注意力(并非所有模型都使用)。仅当config.is_decoder=True或模型为仅解码器生成模型时相关。 - pad_token_id (
int, 可选, 默认值为199999) — 词汇表中用于填充的令牌 ID。 - bos_token_id (
int, 可选) — 词表中用于表示流开始(beginning-of-stream)的 Token ID。 - eos_token_id (
Union[int, list[int]], 可选, 默认值为199999) — 词表中用于表示流结束(end-of-stream)的 Token ID。 - attention_bias (
bool, 可选, 默认值为True) — 是否在自注意力机制(self-attention)的查询(query)、键(key)、值(value)和输出投影层中使用偏置(bias)。 - classifier_dropout (
float, 可选, 默认值为0.0) — 分类器的 dropout 比率。
这是用于存储 OpenAIPrivacyFilterModel 配置的配置类。它用于根据指定的参数实例化 OpenAI 隐私过滤器模型,定义模型架构。使用默认值实例化配置将生成与 openai/privacy-filter 类似的配置。
配置对象继承自 PreTrainedConfig,可用于控制模型输出。阅读 PreTrainedConfig 的文档以获取更多信息。
OpenAIPrivacyFilterModel
class transformers.OpenAIPrivacyFilterModel
< 源码 >( config: OpenAIPrivacyFilterConfig )
参数
- config (OpenAIPrivacyFilterConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
基础的 OpenAI 隐私过滤器模型,输出原始隐藏状态,顶部没有任何特定的层(head)。
该模型继承自 PreTrainedModel。请查看超类文档以了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。
此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。
forward
< 源码 >( input_ids: torch.LongTensor | None = None attention_mask: torch.Tensor | None = None position_ids: torch.LongTensor | None = None inputs_embeds: torch.FloatTensor | None = None **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) → BaseModelOutput 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor,形状为(batch_size, sequence_length),可选) — 词表中输入序列 Token 的索引。默认情况下将忽略填充(padding)。索引可以使用 AutoTokenizer 获取。详细信息请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor,形状为(batch_size, sequence_length),可选) — 用于避免对填充 Token 索引执行注意力机制的掩码。掩码值选自[0, 1]:- 1 表示 未掩码 的 Token,
- 0 表示 已掩码 的 Token。
- position_ids (
torch.LongTensor,形状为(batch_size, sequence_length),可选) — 每个输入序列 Token 在位置嵌入中的位置索引。选自范围[0, config.n_positions - 1]。 - inputs_embeds (
torch.FloatTensor,形状为(batch_size, sequence_length, hidden_size),可选) — 可选地,你可以选择直接传入嵌入表示,而不是传入input_ids。如果你想比模型内部的嵌入查找矩阵更精细地控制如何将input_ids索引转换为关联向量,这将非常有用。
返回
BaseModelOutput 或 tuple(torch.FloatTensor)
一个 BaseModelOutput 或 torch.FloatTensor 的元组(如果传入了 return_dict=False 或当 config.return_dict=False 时),根据配置(OpenAIPrivacyFilterConfig)和输入,包含各种元素。
OpenAIPrivacyFilterModel 的 forward 方法,重写了 __call__ 特殊方法。
虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用
Module实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
last_hidden_state (
torch.FloatTensor, 形状为(batch_size, sequence_length, hidden_size)) — 模型最后一层输出的隐藏状态序列。hidden_states (
tuple(torch.FloatTensor), optional, 当传递output_hidden_states=True或当config.output_hidden_states=True时返回) —torch.FloatTensor的元组(一个用于嵌入层的输出,如果模型有嵌入层;+一个用于每个层的输出),形状为(batch_size, sequence_length, hidden_size)。模型在每个层输出的隐藏状态以及可选的初始嵌入输出。
attentions (
tuple(torch.FloatTensor), optional, 当传递output_attentions=True或当config.output_attentions=True时返回) —torch.FloatTensor的元组(每个层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
OpenAIPrivacyFilterForTokenClassification
forward
< 源码 >( input_ids: torch.LongTensor | None = None attention_mask: torch.Tensor | None = None position_ids: torch.LongTensor | None = None past_key_values: transformers.cache_utils.Cache | None = None inputs_embeds: torch.FloatTensor | None = None labels: torch.LongTensor | None = None use_cache: bool | None = None **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) → TokenClassifierOutput 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor,形状为(batch_size, sequence_length),可选) — 词表中输入序列 Token 的索引。默认情况下将忽略填充。详细信息请参阅transformers.OpenAIPrivacyFilterModel.forward中关于input_ids的说明。 - attention_mask (
torch.Tensor,形状为(batch_size, sequence_length),可选) — 用于避免对填充 Token 索引执行注意力机制的掩码。详细信息请参阅transformers.OpenAIPrivacyFilterModel.forward中关于attention_mask的说明。 - position_ids (
torch.LongTensor,形状为(batch_size, sequence_length),可选) — 每个输入序列 Token 在位置嵌入中的位置索引。详细信息请参阅transformers.OpenAIPrivacyFilterModel.forward中关于position_ids的说明。 - past_key_values (
~cache_utils.Cache,可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常由模型在解码的先前阶段返回,当use_cache=True或config.use_cache=True时使用。输入仅允许 Cache 实例,请参阅我们的 kv 缓存指南。如果未传入
past_key_values,则默认初始化 DynamicCache。模型将输出与输入相同格式的缓存。
如果使用了
past_key_values,用户预期仅传入未处理的input_ids(那些其过去键值状态未提供给此模型的input_ids),形状为(batch_size, unprocessed_length),而不是所有input_ids(形状为(batch_size, sequence_length))。 - inputs_embeds (
torch.FloatTensor,形状为(batch_size, sequence_length, hidden_size),可选) — 可选地,你可以选择直接传入嵌入表示,而不是传入input_ids。详细信息请参阅transformers.OpenAIPrivacyFilterModel.forward中关于inputs_embeds的说明。 - labels (
torch.LongTensor,形状为(batch_size, sequence_length),可选) — 用于计算掩码语言建模损失的标签。索引应在[0, ..., config.vocab_size]范围内,或为 -100(请参阅input_ids文档字符串)。索引设置为-100的 Token 将被忽略(掩码),损失仅针对标签在[0, ..., config.vocab_size]范围内的 Token 计算。 - use_cache (
bool,可选) — 如果设置为True,则返回past_key_values键值状态,并可用于加速解码(请参阅past_key_values)。
返回
TokenClassifierOutput 或 tuple(torch.FloatTensor)
一个 TokenClassifierOutput 或 torch.FloatTensor 元组(如果传递了 return_dict=False 或 config.return_dict=False),包含取决于配置 (None) 和输入的各种元素。
The GenericForTokenClassification forward method, overrides the __call__ special method.
虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用
Module实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
loss (形状为
(1,)的torch.FloatTensor,可选,当提供labels时返回) — 分类损失。logits (形状为
(batch_size, sequence_length, config.num_labels)的torch.FloatTensor) — 分类分数(SoftMax 之前)。hidden_states (
tuple(torch.FloatTensor), optional, 当传递output_hidden_states=True或当config.output_hidden_states=True时返回) —torch.FloatTensor的元组(一个用于嵌入层的输出,如果模型有嵌入层;+一个用于每个层的输出),形状为(batch_size, sequence_length, hidden_size)。模型在每个层输出的隐藏状态以及可选的初始嵌入输出。
attentions (
tuple(torch.FloatTensor), optional, 当传递output_attentions=True或当config.output_attentions=True时返回) —torch.FloatTensor的元组(每个层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。