自定义层和工具函数
此页面列出了库使用的所有自定义层,以及它为建模提供的工具函数。
如果您正在研究库中模型的代码,则其中大多数内容才有用。
Pytorch 自定义模块
Radford 等人为 OpenAI GPT 定义的一维卷积层(也用于 GPT-2 中)。
基本上像线性层一样工作,但权重是转置的。
class transformers.modeling_utils.PoolerStartLogits
< source >( config: PretrainedConfig )
参数
- config (PretrainedConfig) — 模型使用的配置,将用于获取模型的
hidden_size
。
从序列隐藏状态计算 SQuAD 开始 logits。
forward
< source >( hidden_states: FloatTensor p_mask: Optional = None ) → torch.FloatTensor
类 transformers.modeling_utils.PoolerEndLogits
< source >( config: PretrainedConfig )
参数
- config (PretrainedConfig) — 模型使用的配置,将用于获取模型的
hidden_size
和要使用的layer_norm_eps
。
从序列隐藏状态计算 SQuAD 结束 logits。
forward
< source >( hidden_states: FloatTensor start_states: Optional = None start_positions: Optional = None p_mask: Optional = None ) → torch.FloatTensor
参数
- hidden_states (
torch.FloatTensor
形状为(batch_size, seq_len, hidden_size)
) — 模型的最终隐藏状态。 - start_states (
torch.FloatTensor
形状为(batch_size, seq_len, hidden_size)
,可选) — 标注跨度的第一个词元的隐藏状态。 - start_positions (
torch.LongTensor
形状为(batch_size,)
,可选) — 标注跨度的第一个词元的位置。 - p_mask (
torch.FloatTensor
形状为(batch_size, seq_len)
,可选) — 无效位置词元的掩码,例如查询和特殊符号(PAD、SEP、CLS)。1.0 表示词元应该被掩盖。
返回
torch.FloatTensor
SQuAD 的结束 logits。
start_states
或 start_positions
中的一个应该不为 None
。如果两者都设置,start_positions
覆盖 start_states
。
类 transformers.modeling_utils.PoolerAnswerClass
< source >( config )
参数
- config (PretrainedConfig) — 模型使用的配置,将用于获取模型的
hidden_size
。
从分类和起始词元的隐藏状态计算 SQuAD 2.0 答案类别。
forward
< source >( hidden_states: FloatTensor start_states: Optional = None start_positions: Optional = None cls_index: Optional = None ) → torch.FloatTensor
参数
- hidden_states (
torch.FloatTensor
形状为(batch_size, seq_len, hidden_size)
) — 模型的最终隐藏状态。 - start_states (
torch.FloatTensor
形状为(batch_size, seq_len, hidden_size)
, 可选) — 标注跨度中第一个词元的隐藏状态。 - start_positions (
torch.LongTensor
形状为(batch_size,)
, 可选) — 标注跨度中第一个词元的位置。 - cls_index (
torch.LongTensor
形状为(batch_size,)
, 可选) — 批次中每个句子中 CLS 词元的位置。如果为None
,则取最后一个词元。
返回
torch.FloatTensor
SQuAD 2.0 答案类。
start_states
或 start_positions
中的一个应该不为 None
。如果两者都设置,start_positions
覆盖 start_states
。
类 transformers.modeling_utils.SquadHeadOutput
< source >( loss: Optional = None start_top_log_probs: Optional = None start_top_index: Optional = None end_top_log_probs: Optional = None end_top_index: Optional = None cls_logits: Optional = None )
参数
- loss (
torch.FloatTensor
形状为(1,)
, 可选,如果同时提供start_positions
和end_positions
则返回) — 分类损失,作为起始词元、结束词元(如果提供,则为 is_impossible)分类损失的总和。 - start_top_log_probs (形状为
(batch_size, config.start_n_top)
的torch.FloatTensor
,可选,如果未提供start_positions
或end_positions
则返回)— 前 config.start_n_top 个起始词元可能性的对数概率(beam-search)。 - start_top_index (形状为
(batch_size, config.start_n_top)
的torch.LongTensor
,可选,如果未提供start_positions
或end_positions
则返回)— 前 config.start_n_top 个起始词元可能性的索引(beam-search)。 - end_top_log_probs (形状为
(batch_size, config.start_n_top * config.end_n_top)
的torch.FloatTensor
,可选,如果未提供start_positions
或end_positions
则返回)— 前config.start_n_top * config.end_n_top
个结束词元可能性的对数概率(beam-search)。 - end_top_index (形状为
(batch_size, config.start_n_top * config.end_n_top)
的torch.LongTensor
,可选,如果未提供start_positions
或end_positions
则返回)— 前config.start_n_top * config.end_n_top
个结束词元可能性的索引(beam-search)。 - cls_logits (形状为
(batch_size,)
的torch.FloatTensor
,可选,如果未提供start_positions
或end_positions
则返回)— 答案的is_impossible
标签的对数概率。
使用 SQuADHead 的问答模型输出的基类。
类 transformers.modeling_utils.SQuADHead
< 源代码 >( config )
参数
- config (PretrainedConfig) — 模型使用的配置,将用于获取模型的 `hidden_size` 和要使用的 `layer_norm_eps`。
受 XLNet 启发的 SQuAD 头。
forward
< source >( hidden_states: FloatTensor start_positions: Optional = None end_positions: Optional = None cls_index: Optional = None is_impossible: Optional = None p_mask: Optional = None return_dict: bool = False ) → transformers.modeling_utils.SquadHeadOutput or tuple(torch.FloatTensor)
参数
- hidden_states (
torch.FloatTensor
形状为(batch_size, seq_len, hidden_size)
) — 序列标记上模型的最终隐藏状态。 - start_positions (
torch.LongTensor
形状为(batch_size,)
, 可选) — 标记跨度的第一个标记的位置。 - end_positions (
torch.LongTensor
形状为(batch_size,)
, 可选) — 标记跨度的最后一个标记的位置。 - cls_index (
torch.LongTensor
形状为(batch_size,)
, 可选) — 批处理中每个句子的 CLS 标记的位置。如果为 `None`,则取最后一个标记。 - is_impossible (
torch.LongTensor
形状为(batch_size,)
,可选) — 问题在段落中是否有可能的答案。 - p_mask (
torch.FloatTensor
形状为(batch_size, seq_len)
,可选) — 无效位置的词元掩码,例如查询词元和特殊符号(PAD、SEP、CLS)。1.0 表示词元应该被掩盖。 - return_dict (
bool
, 可选, 默认值False
) — 是否返回 ModelOutput 而不是一个普通的元组。
返回
transformers.modeling_utils.SquadHeadOutput 或 tuple(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_positions
和end_positions
则返回) — 分类损失,为起始词元、结束词元(以及如果提供 is_impossible)分类损失的总和。 - start_top_log_probs (
torch.FloatTensor
形状为(batch_size, config.start_n_top)
,可选,如果未提供start_positions
或end_positions
则返回) — 前 config.start_n_top 个起始词元可能性(beam-search)的对数概率。 - start_top_index (
torch.LongTensor
形状为(batch_size, config.start_n_top)
,可选,如果未提供start_positions
或end_positions
则返回) — 前 config.start_n_top 个起始词元可能性(beam-search)的索引。 - end_top_log_probs (
torch.FloatTensor
形状为(batch_size, config.start_n_top * config.end_n_top)
,可选,如果未提供start_positions
或end_positions
则返回) — 前config.start_n_top * config.end_n_top
个结束词元可能性(beam-search)的对数概率。 - end_top_index (
torch.LongTensor
形状为(batch_size, config.start_n_top * config.end_n_top)
,可选,如果未提供start_positions
或end_positions
则返回) — 前config.start_n_top * config.end_n_top
个结束词元可能性(beam-search)的索引。 - cls_logits (
torch.FloatTensor
形状为(batch_size,)
,可选,如果未提供start_positions
或end_positions
则返回) — 答案的is_impossible
标签的对数概率。
类 transformers.modeling_utils.SequenceSummary
< 源代码 >( config: PretrainedConfig )
参数
- config (PretrainedConfig) — 模型使用的配置。模型配置类中的相关参数包括(有关默认值,请参阅模型的实际配置类):
-
summary_type (
str
) — 用于生成此摘要的方法。可接受的值有:"last"
— 取最后一个词元的隐藏状态(如 XLNet)"first"
— 取第一个词元的隐藏状态(如 Bert)"mean"
— 取所有词元隐藏状态的平均值"cls_index"
— 提供分类词元位置的张量(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
< source >( hidden_states: FloatTensor cls_index: Optional = None ) → torch.FloatTensor
计算序列隐藏状态的单个向量摘要。
PyTorch 帮助函数
transformers.apply_chunking_to_forward
< source >( forward_fn: Callable[..., torch.Tensor] chunk_size: int chunk_dim: int *input_tensors ) → torch.Tensor
此函数将 input_tensors
在维度 chunk_dim
上分块成大小为 chunk_size
的较小输入张量部分。然后,它将层 forward_fn
独立应用于每个块以节省内存。
如果 forward_fn
在 chunk_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
< source >( heads: List[int] n_heads: int head_size: int already_pruned_heads: Set[int] ) → Tuple[Set[int], torch.LongTensor]
查找头部及其索引,并考虑到 already_pruned_heads
。
transformers.prune_layer
< source >( layer: Union[nn.Linear, Conv1D] index: torch.LongTensor dim: Optional[int] = None ) → torch.nn.Linear
或 Conv1D
参数
- layer (
Union[torch.nn.Linear, Conv1D]
) — 要剪枝的层。 - index (
torch.LongTensor
) — 要保留在层中的索引。 - dim (
int
, 可选) — 要保留索引的维度。
返回
torch.nn.Linear
或 Conv1D
修剪后的层作为新层,其 requires_grad=True
。
修剪 Conv1D 或线性层以仅保留索引中的条目。
用于移除头部。
transformers.pytorch_utils.prune_conv1d_layer
< 源代码 >( layer: Conv1D index: torch.LongTensor dim: int = 1 ) → Conv1D
修剪 Conv1D 层以仅保留索引中的条目。Conv1D 的工作方式类似于线性层(例如 BERT),但权重是转置的。
用于移除头部。
transformers.pytorch_utils.prune_linear_layer
< 源代码 >( layer: nn.Linear index: torch.LongTensor dim: int = 0 ) → torch.nn.Linear
对线性层进行剪枝,仅保留索引中的条目。
用于移除头部。
TensorFlow 自定义层
类 transformers.modeling_tf_utils.TFConv1D
< source >( nf nx initializer_range = 0.02 **kwargs )
Radford 等人为 OpenAI GPT 定义的一维卷积层(也用于 GPT-2 中)。
基本上像线性层一样工作,但权重是转置的。
类 transformers.TFSequenceSummary
< source >( config: PretrainedConfig initializer_range: float = 0.02 **kwargs )
参数
- config (PretrainedConfig) — 模型使用的配置。 模型的配置类中的相关参数为(有关其使用的默认值,请参阅模型的实际配置类):
-
summary_type (
str
) — 用于生成此摘要的方法。 接受的值为:"last"
— 取最后一个词元的隐藏状态(如 XLNet)"first"
— 取第一个词元的隐藏状态(如 Bert)"mean"
— 取所有词元隐藏状态的平均值"cls_index"
— 提供分类词元位置的张量(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 概率。
-
- initializer_range (
float
, 可选, 默认值为 0.02) — 用于初始化权重的标准差。 - kwargs (
Dict[str, Any]
, 可选) — 传递给keras.layers.Layer
的__init__
的附加关键字参数。
计算序列隐藏状态的单个向量摘要。
TensorFlow 损失函数
适用于因果语言建模 (CLM) 的损失函数,即猜测下一个词的任务。
任何 -100 的标签(以及相应的 logits)在损失计算中都将被忽略。
适用于掩码语言建模 (MLM) 的损失函数,即猜测被掩码词的任务。
任何 -100 的标签(以及相应的 logits)在损失计算中都将被忽略。
适用于多项选择任务的损失函数。
适用于问答任务的损失函数。
适用于序列分类的损失函数。
适用于词分类的损失函数。
任何 -100 的标签(以及相应的 logits)在损失计算中都将被忽略。
TensorFlow 辅助函数
transformers.modeling_tf_utils.get_initializer
< 源代码 >( initializer_range: float = 0.02 ) → keras.initializers.TruncatedNormal
使用给定的范围创建 keras.initializers.TruncatedNormal
。
transformers.modeling_tf_utils.keras_serializable
< 源代码 >( )
装饰 Keras 层类以支持 Keras 序列化。
这可以通过以下方式完成
- 将
transformers_config
字典添加到get_config
中的 Keras 配置字典(由 Keras 在序列化时调用)。 - 包装
__init__
以接受transformers_config
字典(由 Keras 在反序列化时传递),并将其转换为实际层初始化器的配置对象。 - 在 Keras 中将该类注册为自定义对象(如果 Tensorflow 版本支持),这样就不需要在调用
keras.models.load_model
时在custom_objects
中提供它。
transformers.shape_list
< 源代码 >( tensor: Union ) → List[int]
干净地处理 Tensorflow 中的动态形状。