Transformers 文档

自定义层和实用工具

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

自定义层和实用工具

此页面列出了库使用的所有自定义层,以及它为建模提供的实用函数。

如果您正在研究库中模型的代码,那么其中大多数内容才有用。

Pytorch 自定义模块

class transformers.Conv1D

< >

( nf nx )

参数

  • nf (int) — 输出特征的数量。
  • nx (int) — 输入特征的数量。

Radford 等人为 OpenAI GPT 定义的 1D 卷积层(也在 GPT-2 中使用)。

基本上像线性层一样工作,但权重是转置的。

class transformers.modeling_utils.PoolerStartLogits

< >

( config: PretrainedConfig )

参数

  • config (PretrainedConfig) — 模型使用的配置,将用于获取模型的 hidden_size

从序列隐藏状态计算 SQuAD 开始 logits。

forward

< >

( hidden_states: FloatTensor p_mask: typing.Optional[torch.FloatTensor] = None ) torch.FloatTensor

参数

  • hidden_states (torch.FloatTensor,形状为 (batch_size, seq_len, hidden_size)) — 模型的最终隐藏状态。
  • p_mask (torch.FloatTensor,形状为 (batch_size, seq_len)可选) — 无效位置的 tokens 掩码,例如 query 和特殊符号(PAD、SEP、CLS)。1.0 表示 token 应该被屏蔽。

返回

torch.FloatTensor

SQuAD 的起始 logits。

class transformers.modeling_utils.PoolerEndLogits

< >

( config: PretrainedConfig )

参数

  • config (PretrainedConfig) — 模型使用的配置,将用于获取模型的 hidden_size 和要使用的 layer_norm_eps

从序列隐藏状态计算 SQuAD 结束 logits。

forward

< >

( hidden_states: FloatTensor start_states: typing.Optional[torch.FloatTensor] = None start_positions: typing.Optional[torch.LongTensor] = None p_mask: typing.Optional[torch.FloatTensor] = None ) torch.FloatTensor

参数

  • hidden_states (torch.FloatTensor,形状为 (batch_size, seq_len, hidden_size)) — 模型的最终隐藏状态。
  • start_states (torch.FloatTensor,形状为 (batch_size, seq_len, hidden_size)可选) — 标记跨度的第一个 tokens 的隐藏状态。
  • start_positions (torch.LongTensor,形状为 (batch_size,)可选) — 标记跨度的第一个 token 的位置。
  • p_mask (torch.FloatTensor,形状为 (batch_size, seq_len)可选) — 无效位置的 tokens 掩码,例如 query 和特殊符号(PAD、SEP、CLS)。1.0 表示 token 应该被屏蔽。

返回

torch.FloatTensor

SQuAD 的结束 logits。

start_statesstart_positions 之一不应为 None。如果两者都设置,则 start_positions 覆盖 start_states

class transformers.modeling_utils.PoolerAnswerClass

< >

( config )

参数

  • config (PretrainedConfig) — 模型使用的配置,将用于获取模型的 hidden_size

从分类和起始 tokens 隐藏状态计算 SQuAD 2.0 答案类别。

forward

< >

( hidden_states: FloatTensor start_states: typing.Optional[torch.FloatTensor] = None start_positions: typing.Optional[torch.LongTensor] = None cls_index: typing.Optional[torch.LongTensor] = None ) torch.FloatTensor

参数

  • hidden_states (torch.FloatTensor, 形状为 (batch_size, seq_len, hidden_size)) — 模型的最终隐藏状态。
  • start_states (torch.FloatTensor, 形状为 (batch_size, seq_len, hidden_size), 可选) — 用于标记跨度的第一个 token 的隐藏状态。
  • start_positions (torch.LongTensor, 形状为 (batch_size,), 可选) — 用于标记跨度的第一个 token 的位置。
  • cls_index (torch.LongTensor, 形状为 (batch_size,), 可选) — 批次中每个句子的 CLS token 的位置。如果为 None,则取最后一个 token。

返回

torch.FloatTensor

SQuAD 2.0 答案类别。

start_statesstart_positions 之一不应为 None。如果两者都设置,则 start_positions 覆盖 start_states

class transformers.modeling_utils.SquadHeadOutput

< >

( loss: typing.Optional[torch.FloatTensor] = None start_top_log_probs: typing.Optional[torch.FloatTensor] = None start_top_index: typing.Optional[torch.LongTensor] = None end_top_log_probs: typing.Optional[torch.FloatTensor] = None end_top_index: typing.Optional[torch.LongTensor] = None cls_logits: typing.Optional[torch.FloatTensor] = None )

参数

  • loss (torch.FloatTensor, 形状为 (1,), 可选, 如果提供了 start_positionsend_positions 则返回) — 分类损失,为起始 token、结束 token(以及如果提供,则为 is_impossible)分类损失的总和。
  • start_top_log_probs (torch.FloatTensor, 形状为 (batch_size, config.start_n_top), 可选, 如果未提供 start_positionsend_positions 则返回) — 用于前 config.start_n_top 个起始 token 可能性的对数概率(集束搜索)。
  • start_top_index (torch.LongTensor, 形状为 (batch_size, config.start_n_top), 可选, 如果未提供 start_positionsend_positions 则返回) — 用于前 config.start_n_top 个起始 token 可能性的索引(集束搜索)。
  • end_top_log_probs (torch.FloatTensor, 形状为 (batch_size, config.start_n_top * config.end_n_top), 可选, 如果未提供 start_positionsend_positions 则返回) — 用于前 config.start_n_top * config.end_n_top 个结束 token 可能性的对数概率(集束搜索)。
  • end_top_index (torch.LongTensor, 形状为 (batch_size, config.start_n_top * config.end_n_top), 可选, 如果未提供 start_positionsend_positions 则返回) — 用于前 config.start_n_top * config.end_n_top 个结束 token 可能性的索引(集束搜索)。
  • cls_logits (torch.FloatTensor, 形状为 (batch_size,), 可选, 如果未提供 start_positionsend_positions 则返回) — 用于答案的 is_impossible 标签的对数概率。

使用 SQuADHead 的问题解答模型的输出基类。

class transformers.modeling_utils.SQuADHead

< >

( config )

参数

  • config (PretrainedConfig) — 模型使用的配置,将用于获取模型的 hidden_size 和要使用的 layer_norm_eps

受 XLNet 启发的 SQuAD head。

forward

< >

( hidden_states: FloatTensor start_positions: typing.Optional[torch.LongTensor] = None end_positions: typing.Optional[torch.LongTensor] = None cls_index: typing.Optional[torch.LongTensor] = None is_impossible: typing.Optional[torch.LongTensor] = None p_mask: typing.Optional[torch.FloatTensor] = None return_dict: bool = False ) transformers.modeling_utils.SquadHeadOutputtuple(torch.FloatTensor)

参数

  • hidden_states (torch.FloatTensor, 形状为 (batch_size, seq_len, hidden_size)) — 模型在序列 token 上的最终隐藏状态。
  • start_positions (torch.LongTensor, 形状为 (batch_size,), 可选) — 标记跨度的第一个 token 的位置。
  • end_positions (torch.LongTensor, 形状为 (batch_size,), 可选) — 标记跨度的最后一个 token 的位置。
  • cls_index (torch.LongTensor, 形状为 (batch_size,), 可选) — 批次中每个句子的 CLS token 的位置。如果为 None,则取最后一个 token。
  • is_impossible (torch.LongTensor, 形状为 (batch_size,), 可选) — 问题在段落中是否有可能的答案。
  • p_mask (torch.FloatTensor, 形状为 (batch_size, seq_len), 可选) — 用于无效位置的 token 的掩码,例如 query 和特殊符号(PAD、SEP、CLS)。 1.0 表示 token 应该被掩盖。
  • return_dict (bool, 可选, 默认为 False) — 是否返回 ModelOutput 而不是普通元组。

返回

transformers.modeling_utils.SquadHeadOutputtuple(torch.FloatTensor)

一个 transformers.modeling_utils.SquadHeadOutput 或一个 torch.FloatTensor 元组 (如果传递了 return_dict=False 或当 config.return_dict=False 时),其中包含各种元素,具体取决于配置 (<class 'transformers.configuration_utils.PretrainedConfig'>) 和输入。

  • loss (torch.FloatTensor, 形状为 (1,), 可选, 如果提供了 start_positionsend_positions 则返回) — 分类损失,为起始 token、结束 token(以及如果提供,则为 is_impossible)分类损失的总和。
  • start_top_log_probs (torch.FloatTensor, 形状为 (batch_size, config.start_n_top), 可选, 如果未提供 start_positionsend_positions 则返回) — 用于前 config.start_n_top 个起始 token 可能性的对数概率(集束搜索)。
  • start_top_index (torch.LongTensor, 形状为 (batch_size, config.start_n_top), 可选, 如果未提供 start_positionsend_positions 则返回) — 用于前 config.start_n_top 个起始 token 可能性的索引(集束搜索)。
  • end_top_log_probs (torch.FloatTensor, 形状为 (batch_size, config.start_n_top * config.end_n_top), 可选, 如果未提供 start_positionsend_positions 则返回) — 用于前 config.start_n_top * config.end_n_top 个结束 token 可能性的对数概率(集束搜索)。
  • end_top_index (torch.LongTensor, 形状为 (batch_size, config.start_n_top * config.end_n_top), 可选, 如果未提供 start_positionsend_positions 则返回) — 用于前 config.start_n_top * config.end_n_top 个结束 token 可能性的索引(集束搜索)。
  • cls_logits (torch.FloatTensor, 形状为 (batch_size,), 可选, 如果未提供 start_positionsend_positions 则返回) — 用于答案的 is_impossible 标签的对数概率。

class transformers.modeling_utils.SequenceSummary

< >

( config: PretrainedConfig )

参数

  • config (PretrainedConfig) — 模型使用的配置。模型配置类中的相关参数是(请参阅模型的实际配置类以获取其使用的默认值):

    • summary_type (str) — 用于生成摘要的方法。接受的值包括:

      • "last" — 获取最后一个 token 的隐藏状态(如 XLNet)
      • "first" — 获取第一个 token 的隐藏状态(如 Bert)
      • "mean" — 获取所有 token 隐藏状态的平均值
      • "cls_index" — 提供分类 token 位置的 Tensor (GPT/GPT-2)
      • "attn" — 暂未实现,请使用多头注意力机制
    • summary_use_proj (bool) — 在向量提取后添加一个投影层。

    • summary_proj_to_labels (bool) — 如果为 True,则投影输出到 config.num_labels 个类别(否则输出到 config.hidden_size)。

    • summary_activation (Optional[str]) — 设置为 "tanh" 以向输出添加 tanh 激活函数,另一个字符串或 None 将不添加激活函数。

    • summary_first_dropout (float) — 投影和激活之前的可选 dropout 概率。

    • summary_last_dropout (float)— 投影和激活之后的可选 dropout 概率。

计算序列隐藏状态的单个向量摘要。

forward

< >

( hidden_states: FloatTensor cls_index: typing.Optional[torch.LongTensor] = None ) torch.FloatTensor

参数

  • hidden_states (torch.FloatTensor of shape [batch_size, seq_len, hidden_size]) — The hidden states of the last layer.
  • cls_index (torch.LongTensor of shape [batch_size] or [batch_size, ...] where … are optional leading dimensions of hidden_states, optional) — Used if summary_type == "cls_index" and takes the last token of the sequence as classification token.

返回

torch.FloatTensor

The summary of the sequence hidden states.

计算序列隐藏状态的单个向量摘要。

PyTorch 辅助函数

transformers.apply_chunking_to_forward

< >

( forward_fn: Callable[..., torch.Tensor] chunk_size: int chunk_dim: int *input_tensors ) torch.Tensor

参数

  • forward_fn (Callable[..., torch.Tensor]) — 模型的正向传播函数。
  • chunk_size (int) — 分块张量的分块大小:num_chunks = len(input_tensors[0]) / chunk_size
  • chunk_dim (int) — input_tensors 应该在其上进行分块的维度。
  • input_tensors (Tuple[torch.Tensor]) — forward_fn 的输入张量,将被分块

返回

torch.Tensor

与直接应用于 input_tensorsforward_fn 产生的张量形状相同的张量。

此函数将 input_tensors 在维度 chunk_dim 上分割成大小为 chunk_size 的较小输入张量部分。然后,它独立地将层 forward_fn 应用于每个分块,以节省内存。

如果 forward_fnchunk_dim 上是独立的,则此函数将产生与直接将 forward_fn 应用于 input_tensors 相同的结果。

示例

# rename the usual forward() fn to forward_chunk()
def forward_chunk(self, hidden_states):
    hidden_states = self.decoder(hidden_states)
    return hidden_states


# implement a chunked forward function
def forward(self, hidden_states):
    return apply_chunking_to_forward(self.forward_chunk, self.chunk_size_lm_head, self.seq_len_dim, hidden_states)

transformers.pytorch_utils.find_pruneable_heads_and_indices

< >

( heads: list[int] n_heads: int head_size: int already_pruned_heads: set[int] ) Tuple[Set[int], torch.LongTensor]

参数

  • heads (List[int]) — 要剪枝的头的索引列表。
  • n_heads (int) — 模型中的头数。
  • head_size (int) — 每个头的大小。
  • already_pruned_heads (Set[int]) — 一组已剪枝的头。

返回

Tuple[Set[int], torch.LongTensor]

一个元组,包含考虑到 already_pruned_heads 的要剪枝的头的索引,以及层权重中要保留的行/列的索引。

查找考虑到 already_pruned_heads 的头及其索引。

transformers.prune_layer

< >

( layer: nn.Linear | Conv1D index: torch.LongTensor dim: int | None = None ) torch.nn.Linear or Conv1D

参数

  • layer (Union[torch.nn.Linear, Conv1D]) — 要剪枝的层。
  • index (torch.LongTensor) — 层中要保留的索引。
  • dim (int, optional) — 要在其上保留索引的维度。

返回

torch.nn.Linear or Conv1D

剪枝后的层,作为一个新的层,requires_grad=True

剪枝 Conv1D 或线性层,仅保留索引中的条目。

用于移除头。

transformers.pytorch_utils.prune_conv1d_layer

< >

( layer: Conv1D index: torch.LongTensor dim: int = 1 ) Conv1D

参数

  • layer (Conv1D) — 要剪枝的层。
  • index (torch.LongTensor) — 层中要保留的索引。
  • dim (int, optional, defaults to 1) — 要在其上保留索引的维度,默认为 1。

返回

Conv1D

剪枝后的层,作为一个新的层,requires_grad=True

剪枝 Conv1D 层以仅保留索引中的条目。 Conv1D 的工作方式类似于线性层(例如,参见 BERT),但权重是转置的。

用于移除头。

transformers.pytorch_utils.prune_linear_layer

< >

( layer: nn.Linear index: torch.LongTensor dim: int = 0 ) torch.nn.Linear

参数

  • layer (torch.nn.Linear) — 要剪枝的层。
  • index (torch.LongTensor) — 层中要保留的索引。
  • dim (int, optional, defaults to 0) — 要在其上保留索引的维度,默认为 0。

返回

torch.nn.Linear

剪枝后的层,作为一个新的层,requires_grad=True

剪枝线性层以仅保留索引中的条目。

用于移除头。

TensorFlow 自定义层

class transformers.modeling_tf_utils.TFConv1D

< >

( nf nx initializer_range = 0.02 **kwargs )

参数

  • nf (int) — 输出特征的数量。
  • nx (int) — 输入特征的数量。
  • initializer_range (float, 可选,默认为 0.02) — 用于初始化权重的标准差。
  • kwargs (Dict[str, Any], 可选) — 传递给 keras.layers.Layer__init__ 的其他关键字参数。

Radford 等人为 OpenAI GPT 定义的 1D 卷积层(也在 GPT-2 中使用)。

基本上像线性层一样工作,但权重是转置的。

class transformers.TFSequenceSummary

< >

( config: PretrainedConfig initializer_range: float = 0.02 **kwargs )

参数

  • config (PretrainedConfig) — 模型使用的配置。模型配置类中的相关参数有(默认值请参考您模型的实际配置类):

    • summary_type (str) — 用于生成摘要的方法。可接受的值为:

      • "last" — 获取最后一个 token 的隐藏状态 (如 XLNet)
      • "first" — 获取第一个 token 的隐藏状态 (如 Bert)
      • "mean" — 获取所有 token 隐藏状态的均值
      • "cls_index" — 提供分类 token 位置的 Tensor (GPT/GPT-2)
      • "attn" — 暂未实现,使用多头注意力机制
    • summary_use_proj (bool) — 在向量提取后添加一个 projection 层。

    • summary_proj_to_labels (bool) — 如果为 True,projection 层输出到 config.num_labels 个类别 (否则输出到 config.hidden_size)。

    • summary_activation (Optional[str]) — 设置为 "tanh" 以向输出添加 tanh 激活函数,其他字符串或 None 将不添加激活函数。

    • summary_first_dropout (float) — projection 和激活函数之前的可选 dropout 概率。

    • summary_last_dropout (float)— projection 和激活函数之后的可选 dropout 概率。

  • initializer_range (float, 可选,默认为 0.02) — 用于初始化权重的标准差。
  • kwargs (Dict[str, Any], 可选) — 传递给 keras.layers.Layer__init__ 的其他关键字参数。

计算序列隐藏状态的单个向量摘要。

TensorFlow 损失函数

class transformers.modeling_tf_utils.TFCausalLanguageModelingLoss

< >

( )

适用于因果语言建模 (CLM) 的损失函数,即猜测下一个 token 的任务。

任何标签值为 -100 的都将在损失计算中被忽略(以及相应的 logits)。

class transformers.modeling_tf_utils.TFMaskedLanguageModelingLoss

< >

( )

适用于掩码语言建模 (MLM) 的损失函数,即猜测掩码 token 的任务。

任何标签值为 -100 的都将在损失计算中被忽略(以及相应的 logits)。

class transformers.modeling_tf_utils.TFMultipleChoiceLoss

< >

( )

适用于多项选择任务的损失函数。

class transformers.modeling_tf_utils.TFQuestionAnsweringLoss

< >

( )

适用于问答任务的损失函数。

class transformers.modeling_tf_utils.TFSequenceClassificationLoss

< >

( )

适用于序列分类的损失函数。

class transformers.modeling_tf_utils.TFTokenClassificationLoss

< >

( )

适用于 token 分类的损失函数。

任何标签值为 -100 的都将在损失计算中被忽略(以及相应的 logits)。

TensorFlow 辅助函数

transformers.modeling_tf_utils.get_initializer

< >

( initializer_range: float = 0.02 ) keras.initializers.TruncatedNormal

参数

  • initializer_range (float, 默认为 0.02) — 初始化范围的标准差。

返回

keras.initializers.TruncatedNormal

截断正态分布初始化器。

创建一个具有给定范围的 keras.initializers.TruncatedNormal

transformers.modeling_tf_utils.keras_serializable

< >

( )

参数

  • cls (keras.layers.Layers 的子类) — 通常是本项目中的 TF.MainLayer 类,一般来说,必须在其初始化器中接受 config 参数。

装饰一个 Keras Layer 类以支持 Keras 序列化。

这是通过以下方式完成的:

  1. get_config 中向 Keras 配置字典添加 transformers_config 字典(在序列化时由 Keras 调用)。
  2. 包装 __init__ 以接受该 transformers_config 字典(在反序列化时由 Keras 传递),并将其转换为实际层初始化器的配置对象。
  3. 在 Keras 中将该类注册为自定义对象(如果 Tensorflow 版本支持此功能),这样就不需要在调用 keras.models.load_model 时在 custom_objects 中提供它。

transformers.shape_list

< >

( tensor: typing.Union[tensorflow.python.framework.tensor.Tensor, numpy.ndarray] ) List[int]

参数

  • tensor (tf.Tensornp.ndarray) — 我们想要获取形状的张量。

返回

List[int]

张量的形状,以列表形式表示。

干净利落地处理 tensorflow 中的动态形状。

< > Update on GitHub