Transformers 文档
GPT-J
并获得增强的文档体验
开始使用
GPT-J
概述
GPT-J 模型由 Ben Wang 和 Aran Komatsuzaki 在 kingoflolz/mesh-transformer-jax 代码库中发布。它是一个类似 GPT-2 的因果语言模型,在 the Pile 数据集上训练。
此模型由 Stella Biderman 贡献。
使用技巧
- 要以 float32 格式加载 GPT-J,至少需要模型大小 2 倍的 RAM:1 倍用于初始权重,另外 1 倍用于加载检查点。因此,对于 GPT-J,仅加载模型就需要至少 48GB 的 RAM。为了减少 RAM 使用量,有几个选项。
torch_dtype
参数可用于仅在 CUDA 设备上以半精度初始化模型。还有一个 fp16 分支,它存储了 fp16 权重,可用于进一步最小化 RAM 使用量。
>>> from transformers import GPTJForCausalLM
>>> import torch
>>> device = "cuda"
>>> model = GPTJForCausalLM.from_pretrained(
... "EleutherAI/gpt-j-6B",
... revision="float16",
... torch_dtype=torch.float16,
... ).to(device)
该模型应能放入 16GB GPU 进行推理。对于训练/微调,则需要更多的 GPU RAM。例如,Adam 优化器会创建模型的四个副本:模型、梯度、梯度的平均值和平方平均值。因此,即使使用混合精度(因为梯度更新是 fp32),也至少需要模型大小 4 倍的 GPU 内存。这还不包括激活和数据批次,它们会再次需要一些额外的 GPU RAM。因此,应该探索诸如 DeepSpeed 之类的解决方案来训练/微调模型。另一个选择是使用原始代码库在 TPU 上训练/微调模型,然后将模型转换为 Transformers 格式进行推理。相关说明可以在这里找到。
虽然嵌入矩阵的大小为 50400,但 GPT-2 分词器只使用了 50257 个条目。为了提高 TPU 的效率,添加了这些额外的词元。为了避免嵌入矩阵大小和词汇表大小之间的不匹配,GPT-J 的分词器包含了 143 个额外的词元
<|extratoken_1|>... <|extratoken_143|>
,因此分词器的vocab_size
也变成了 50400。
使用示例
generate() 方法可用于使用 GPT-J 模型生成文本。
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> model = AutoModelForCausalLM.from_pretrained("EleutherAI/gpt-j-6B")
>>> tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-j-6B")
>>> prompt = (
... "In a shocking finding, scientists discovered a herd of unicorns living in a remote, "
... "previously unexplored valley, in the Andes Mountains. Even more surprising to the "
... "researchers was the fact that the unicorns spoke perfect English."
... )
>>> input_ids = tokenizer(prompt, return_tensors="pt").input_ids
>>> gen_tokens = model.generate(
... input_ids,
... do_sample=True,
... temperature=0.9,
... max_length=100,
... )
>>> gen_text = tokenizer.batch_decode(gen_tokens)[0]
……或以 float16 精度
>>> from transformers import GPTJForCausalLM, AutoTokenizer
>>> import torch
>>> device = "cuda"
>>> model = GPTJForCausalLM.from_pretrained("EleutherAI/gpt-j-6B", torch_dtype=torch.float16).to(device)
>>> tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-j-6B")
>>> prompt = (
... "In a shocking finding, scientists discovered a herd of unicorns living in a remote, "
... "previously unexplored valley, in the Andes Mountains. Even more surprising to the "
... "researchers was the fact that the unicorns spoke perfect English."
... )
>>> input_ids = tokenizer(prompt, return_tensors="pt").input_ids.to(device)
>>> gen_tokens = model.generate(
... input_ids,
... do_sample=True,
... temperature=0.9,
... max_length=100,
... )
>>> gen_text = tokenizer.batch_decode(gen_tokens)[0]
资源
一系列官方 Hugging Face 和社区(以 🌎 标志)资源,帮助您开始使用 GPT-J。如果您有兴趣提交资源以包含在此处,请随时提出拉取请求,我们将对其进行审核!该资源最好能展示一些新东西,而不是重复现有资源。
- GPT-J 的描述。
- 一篇关于如何使用 Hugging Face Transformers 和 Amazon SageMaker 部署 GPT-J 6B 进行推理的博客。
- 一篇关于如何在 GPU 上使用 DeepSpeed-Inference 加速 GPT-J 推理的博客。
- 一篇介绍 GPT-J-6B:基于 JAX 的 6B Transformer 的博客文章。🌎
- 一个用于 GPT-J-6B 推理演示的 notebook。🌎
- 另一个演示使用 GPT-J-6B 进行推理的 notebook。
- 🤗 Hugging Face 课程的因果语言建模章节。
- GPTJForCausalLM 支持此因果语言建模示例脚本、文本生成示例脚本和notebook。
- TFGPTJForCausalLM 支持此因果语言建模示例脚本和notebook。
- FlaxGPTJForCausalLM 支持此因果语言建模示例脚本和notebook。
文档资源
GPTJConfig
class transformers.GPTJConfig
< 来源 >( vocab_size = 50400 n_positions = 2048 n_embd = 4096 n_layer = 28 n_head = 16 rotary_dim = 64 n_inner = None activation_function = 'gelu_new' resid_pdrop = 0.0 embd_pdrop = 0.0 attn_pdrop = 0.0 layer_norm_epsilon = 1e-05 initializer_range = 0.02 use_cache = True bos_token_id = 50256 eos_token_id = 50256 tie_word_embeddings = False **kwargs )
参数
- vocab_size (
int
,可选,默认为 50400) — GPT-J 模型的词汇表大小。定义了在调用 GPTJModel 时传递的inputs_ids
可以表示的不同词元的数量。 - n_positions (
int
,可选,默认为 2048) — 该模型可能使用的最大序列长度。通常设置为一个较大的值以备不时之需(例如,512、1024 或 2048)。 - n_embd (
int
,可选,默认为 4096) — 嵌入和隐藏状态的维度。 - n_layer (
int
,可选,默认为 28) — Transformer 编码器中的隐藏层数量。 - n_head (
int
,可选,默认为 16) — Transformer 编码器中每个注意力层的注意力头数量。 - rotary_dim (
int
,可选,默认为 64) — 应用旋转位置嵌入的嵌入维度数量。 - n_inner (
int
,可选,默认为 None) — 内部前馈层的维度。None
将其设置为 n_embd 的 4 倍。 - activation_function (
str
,可选,默认为"gelu_new"
) — 激活函数,可选列表为["relu", "silu", "gelu", "tanh", "gelu_new"]
。 - resid_pdrop (
float
,可选,默认为 0.1) — 嵌入、编码器和池化层中所有全连接层的 dropout 概率。 - embd_pdrop (
int
,可选,默认为 0.1) — 嵌入的 dropout 比率。 - attn_pdrop (
float
,可选,默认为 0.1) — 注意力的 dropout 比率。 - layer_norm_epsilon (
float
,可选,默认为 1e-5) — 在层归一化层中使用的 epsilon 值。 - initializer_range (
float
,可选,默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - use_cache (
bool
,可选,默认为True
) — 模型是否应返回最后一个键/值注意力(并非所有模型都使用)。
这是用于存储 GPTJModel 配置的配置类。它用于根据指定的参数实例化一个 GPT-J 模型,定义模型架构。使用默认值实例化配置将产生与 GPT-J EleutherAI/gpt-j-6B 架构类似的配置。配置对象继承自 PretrainedConfig,可用于控制模型输出。有关更多信息,请阅读 PretrainedConfig 的文档。
GPTJModel
class transformers.GPTJModel
< 来源 >( config )
参数
- config (GPTJModel) — 包含模型所有参数的模型配置类。使用配置文件进行初始化不会加载与模型相关的权重,只会加载配置。请查看 from_pretrained() 方法来加载模型权重。
裸 Gptj 模型,输出原始隐藏状态,顶部没有任何特定的头。
此模型继承自 PreTrainedModel。请查看超类文档以了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。
该模型也是 PyTorch torch.nn.Module 的子类。可以像常规的 PyTorch 模块一样使用它,并参考 PyTorch 文档了解所有与通用用法和行为相关的事项。
forward
< 来源 >( input_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Union[transformers.cache_utils.Cache, tuple[tuple[torch.Tensor]], NoneType] = None attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None position_ids: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None cache_position: typing.Optional[torch.LongTensor] = None ) → transformers.modeling_outputs.BaseModelOutputWithPast 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
,可选) — 词汇表中输入序列词元的索引。默认情况下将忽略填充。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- past_key_values (
Union[~cache_utils.Cache, tuple[tuple[torch.Tensor]], NoneType]
) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速序列解码。这通常包含在解码的前一阶段,当use_cache=True
或config.use_cache=True
时,由模型返回的past_key_values
。允许两种格式:
- Cache 实例,请参阅我们的 kv cache 指南;
- 长度为
config.n_layers
的tuple(torch.FloatTensor)
元组,每个元组包含 2 个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)
的张量。这也称为旧版缓存格式。
模型将输出与输入相同的缓存格式。如果没有传递
past_key_values
,将返回旧版缓存格式。如果使用
past_key_values
,用户可以选择只输入形状为(batch_size, 1)
的最后一个input_ids
(即那些没有为其提供过去键值状态的 `input_ids`),而不是形状为(batch_size, sequence_length)
的所有 `input_ids`。 - attention_mask (
torch.FloatTensor
,形状为(batch_size, sequence_length)
, 可选) — 用于避免对填充标记索引执行注意力的掩码。掩码值选自[0, 1]
:- 1 表示标记未被屏蔽,
- 0 表示标记已被屏蔽。
- token_type_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
, 可选) — 段标记索引,用于指示输入的第一部分和第二部分。索引选自[0, 1]
:- 0 对应于 *A 句子* 标记,
- 1 对应于 *B 句子* 标记。
- position_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
, 可选) — 每个输入序列标记在位置嵌入中的位置索引。选自范围[0, config.n_positions - 1]
。 - head_mask (
torch.FloatTensor
,形状为(num_heads,)
或(num_layers, num_heads)
, 可选) — 用于置零自注意力模块中选定头的掩码。掩码值选自[0, 1]
:- 1 表示头未被屏蔽,
- 0 表示头已被屏蔽。
- inputs_embeds (
torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_dim)
, 可选) — 可选地,你可以选择直接传递嵌入表示,而不是传递input_ids
。如果你想比模型内部的嵌入查找矩阵有更多控制权来将 *input_ids* 索引转换为关联向量,这会很有用。 - use_cache (
bool
, 可选) — 如果设置为True
,将返回past_key_values
键值状态,并可用于加速解码(参见past_key_values
)。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是普通元组。 - cache_position (
torch.LongTensor
,形状为(sequence_length)
, 可选) — 描述输入序列标记在序列中位置的索引。与position_ids
相反,此张量不受填充影响。它用于在正确的位置更新缓存并推断完整的序列长度。
返回
transformers.modeling_outputs.BaseModelOutputWithPast 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.BaseModelOutputWithPast 或一个 `torch.FloatTensor` 的元组(如果传递了 `return_dict=False` 或 `config.return_dict=False`),根据配置(GPTJConfig)和输入包含各种元素。
-
last_hidden_state (
torch.FloatTensor
, 形状为(batch_size, sequence_length, hidden_size)
) — 模型最后一层输出的隐藏状态序列。如果使用了
past_key_values
,则只输出形状为(batch_size, 1, hidden_size)
的序列的最后一个隐藏状态。 -
past_key_values (
Cache
, 可选, 当传递use_cache=True
或config.use_cache=True
时返回) — 这是一个 Cache 实例。有关更多详细信息,请参阅我们的 kv cache 指南。包含预计算的隐藏状态(自注意力块中的键和值,如果 `config.is_encoder_decoder=True`,则还包括交叉注意力块中的键和值),可用于(参见 `past_key_values` 输入)加速序列解码。
-
hidden_states (
tuple(torch.FloatTensor)
, 可选, 当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) —torch.FloatTensor
的元组(一个用于嵌入层的输出,如果模型有嵌入层,+ 每个层的输出),形状为(batch_size, sequence_length, hidden_size)
。模型在每个层输出的隐藏状态以及可选的初始嵌入输出。
-
attentions (
tuple(torch.FloatTensor)
, 可选, 当传递output_attentions=True
或config.output_attentions=True
时返回) —torch.FloatTensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
GPTJModel 的前向方法,重写了 `__call__` 特殊方法。
尽管前向传播的流程需要在此函数中定义,但之后应该调用 `Module` 实例而不是此函数,因为前者会处理运行前后处理步骤,而后者会静默地忽略它们。
GPTJForCausalLM
class transformers.GPTJForCausalLM
< 来源 >( config )
参数
- config (GPTJForCausalLM) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只会加载配置。请查看 from_pretrained() 方法来加载模型权重。
带有语言建模头的 GPT-J Transformer 模型。
此模型继承自 PreTrainedModel。请查看超类文档以了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。
该模型也是 PyTorch torch.nn.Module 的子类。可以像常规的 PyTorch 模块一样使用它,并参考 PyTorch 文档了解所有与通用用法和行为相关的事项。
forward
< 来源 >( input_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Union[transformers.cache_utils.Cache, tuple[tuple[torch.Tensor]], NoneType] = None attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None position_ids: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None cache_position: typing.Optional[torch.LongTensor] = None **kwargs ) → transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
, 可选) — 词汇表中输入序列标记的索引。默认情况下,填充将被忽略。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- past_key_values (
Union[~cache_utils.Cache, tuple[tuple[torch.Tensor]], NoneType]
) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速序列解码。这通常包含在解码的前一阶段,当use_cache=True
或config.use_cache=True
时,由模型返回的past_key_values
。允许两种格式:
- Cache 实例,请参阅我们的 kv cache 指南;
- 长度为
config.n_layers
的tuple(torch.FloatTensor)
元组,每个元组包含 2 个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)
的张量。这也称为旧版缓存格式。
模型将输出与输入相同的缓存格式。如果没有传递
past_key_values
,将返回旧版缓存格式。如果使用
past_key_values
,用户可以选择只输入形状为(batch_size, 1)
的最后一个input_ids
(即那些没有为其提供过去键值状态的 `input_ids`),而不是形状为(batch_size, sequence_length)
的所有 `input_ids`。 - attention_mask (
torch.FloatTensor
,形状为(batch_size, sequence_length)
, 可选) — 用于避免对填充标记索引执行注意力的掩码。掩码值选自[0, 1]
:- 1 表示标记未被屏蔽,
- 0 表示标记已被屏蔽。
- token_type_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
, 可选) — 段标记索引,用于指示输入的第一部分和第二部分。索引选自[0, 1]
:- 0 对应于 *A 句子* 标记,
- 1 对应于 *B 句子* 标记。
- position_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
, 可选) — 每个输入序列标记在位置嵌入中的位置索引。选自范围[0, config.n_positions - 1]
。 - head_mask (
torch.FloatTensor
,形状为(num_heads,)
或(num_layers, num_heads)
, 可选) — 用于置零自注意力模块中选定头的掩码。掩码值选自[0, 1]
:- 1 表示头未被屏蔽,
- 0 表示头已被屏蔽。
- inputs_embeds (
torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_dim)
, 可选) — 可选地,你可以选择直接传递嵌入表示,而不是传递input_ids
。如果你想比模型内部的嵌入查找矩阵有更多控制权来将 *input_ids* 索引转换为关联向量,这会很有用。 - labels (
torch.LongTensor
,形状为(batch_size, sequence_length)
, 可选) — 语言建模的标签。请注意,标签在模型内部已移位,即你可以设置labels = input_ids
。索引选自[-100, 0, ..., config.vocab_size]
。所有设置为-100
的标签都会被忽略(屏蔽),损失仅对[0, ..., config.vocab_size]
中的标签进行计算。 - use_cache (
bool
, 可选) — 如果设置为True
,将返回past_key_values
键值状态,并可用于加速解码(参见past_key_values
)。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是普通元组。 - cache_position (
torch.LongTensor
,形状为(sequence_length)
, 可选) — 描述输入序列标记在序列中位置的索引。与position_ids
相反,此张量不受填充影响。它用于在正确的位置更新缓存并推断完整的序列长度。
返回
transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.CausalLMOutputWithPast 或一个 `torch.FloatTensor` 的元组(如果传递了 `return_dict=False` 或 `config.return_dict=False`),根据配置(GPTJConfig)和输入包含各种元素。
-
loss (
torch.FloatTensor
形状为(1,)
,可选,当提供labels
时返回) — 语言建模损失(用于下一个 token 预测)。 -
logits (形状为
(batch_size, sequence_length, config.vocab_size)
的torch.FloatTensor
) — 语言建模头部的预测分数(SoftMax 之前的每个词汇标记的分数)。 -
past_key_values (
Cache
, 可选, 当传递use_cache=True
或config.use_cache=True
时返回) — 这是一个 Cache 实例。有关更多详细信息,请参阅我们的 kv cache 指南。包含预计算的隐藏状态(自注意力块中的键和值),可用于(参见
past_key_values
输入)加速顺序解码。 -
hidden_states (
tuple(torch.FloatTensor)
, 可选, 当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) —torch.FloatTensor
的元组(一个用于嵌入层的输出,如果模型有嵌入层,+ 每个层的输出),形状为(batch_size, sequence_length, hidden_size)
。模型在每个层输出的隐藏状态以及可选的初始嵌入输出。
-
attentions (
tuple(torch.FloatTensor)
, 可选, 当传递output_attentions=True
或config.output_attentions=True
时返回) —torch.FloatTensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
GPTJForCausalLM 的前向方法,重写了 `__call__` 特殊方法。
尽管前向传播的流程需要在此函数中定义,但之后应该调用 `Module` 实例而不是此函数,因为前者会处理运行前后处理步骤,而后者会静默地忽略它们。
GPTJForSequenceClassification
class transformers.GPTJForSequenceClassification
< 来源 >( config )
参数
- config (GPTJForSequenceClassification) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只会加载配置。请查看 from_pretrained() 方法来加载模型权重。
带有序列分类头(线性层)的 GPT-J Transformer 模型。
GPTJForSequenceClassification 使用最后一个标记来进行分类,就像其他因果模型(例如 GPT、GPT-2、GPT-Neo)一样。
由于它对最后一个标记进行分类,因此需要知道最后一个标记的位置。如果在配置中定义了 `pad_token_id`,它会找到每行中不是填充标记的最后一个标记。如果没有定义 `pad_token_id`,它会简单地取批次中每行的最后一个值。由于当传递 `inputs_embeds` 而不是 `input_ids` 时它无法猜测填充标记,因此它会做同样的操作(取批次中每行的最后一个值)。
此模型继承自 PreTrainedModel。请查看超类文档以了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。
该模型也是 PyTorch torch.nn.Module 的子类。可以像常规的 PyTorch 模块一样使用它,并参考 PyTorch 文档了解所有与通用用法和行为相关的事项。
forward
< 来源 >( input_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[tuple[tuple[torch.Tensor]]] = None attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None position_ids: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.SequenceClassifierOutputWithPast
或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
, 可选) — 词汇表中输入序列标记的索引。默认情况下,填充将被忽略。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- past_key_values (
tuple[tuple[torch.Tensor]]
, 可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速序列解码。这通常包含在解码的前一阶段,当use_cache=True
或config.use_cache=True
时,由模型返回的past_key_values
。允许两种格式:
- Cache 实例,请参阅我们的 kv cache 指南;
- 长度为
config.n_layers
的tuple(torch.FloatTensor)
元组,每个元组包含 2 个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)
的张量。这也称为旧版缓存格式。
模型将输出与输入相同的缓存格式。如果没有传递
past_key_values
,将返回旧版缓存格式。如果使用
past_key_values
,用户可以选择只输入形状为(batch_size, 1)
的最后一个input_ids
(即那些没有为其提供过去键值状态的 `input_ids`),而不是形状为(batch_size, sequence_length)
的所有 `input_ids`。 - attention_mask (
torch.FloatTensor
,形状为(batch_size, sequence_length)
, 可选) — 用于避免对填充标记索引执行注意力的掩码。掩码值选自[0, 1]
:- 1 表示标记未被屏蔽,
- 0 表示标记已被屏蔽。
- token_type_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
, 可选) — 段标记索引,用于指示输入的第一部分和第二部分。索引选自[0, 1]
:- 0 对应于 *A 句子* 标记,
- 1 对应于 *B 句子* 标记。
- position_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
, 可选) — 每个输入序列标记在位置嵌入中的位置索引。选自范围[0, config.n_positions - 1]
。 - head_mask (
torch.FloatTensor
,形状为(num_heads,)
或(num_layers, num_heads)
, 可选) — 用于置零自注意力模块中选定头的掩码。掩码值选自[0, 1]
:- 1 表示头未被屏蔽,
- 0 表示头已被屏蔽。
- inputs_embeds (
torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_dim)
, 可选) — 可选地,你可以选择直接传递嵌入表示,而不是传递input_ids
。如果你想比模型内部的嵌入查找矩阵有更多控制权来将 *input_ids* 索引转换为关联向量,这会很有用。 - labels (
torch.LongTensor
,形状为(batch_size,)
, 可选) — 用于计算序列分类/回归损失的标签。索引应在[0, ..., config.num_labels - 1]
范围内。如果config.num_labels == 1
,则计算回归损失(均方损失),如果config.num_labels > 1
,则计算分类损失(交叉熵)。 - use_cache (
bool
, 可选) — 如果设置为True
,将返回past_key_values
键值状态,并可用于加速解码(参见past_key_values
)。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。
返回
transformers.modeling_outputs.SequenceClassifierOutputWithPast
或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.SequenceClassifierOutputWithPast
或一个 torch.FloatTensor
的元组(如果传入 return_dict=False
或当 config.return_dict=False
时),包含根据配置(GPTJConfig)和输入而变化的不同元素。
-
loss (形状为
(1,)
的torch.FloatTensor
,可选,当提供labels
时返回) — 分类损失(如果 config.num_labels==1,则为回归损失)。 -
logits (形状为
(batch_size, config.num_labels)
的torch.FloatTensor
) — 分类(如果 config.num_labels==1,则为回归)分数(SoftMax 之前)。 -
past_key_values (
Cache
, 可选, 当传递use_cache=True
或config.use_cache=True
时返回) — 这是一个 Cache 实例。有关更多详细信息,请参阅我们的 kv cache 指南。包含预计算的隐藏状态(自注意力块中的键和值),可用于(参见
past_key_values
输入)加速顺序解码。 -
hidden_states (
tuple(torch.FloatTensor)
, 可选, 当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) —torch.FloatTensor
的元组(一个用于嵌入层的输出,如果模型有嵌入层,+ 每个层的输出),形状为(batch_size, sequence_length, hidden_size)
。模型在每个层输出的隐藏状态以及可选的初始嵌入输出。
-
attentions (
tuple(torch.FloatTensor)
, 可选, 当传递output_attentions=True
或config.output_attentions=True
时返回) —torch.FloatTensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
GPTJForSequenceClassification 的 forward 方法会覆盖 __call__
特殊方法。
尽管前向传播的流程需要在此函数中定义,但之后应该调用 `Module` 实例而不是此函数,因为前者会处理运行前后处理步骤,而后者会静默地忽略它们。
单标签分类示例
>>> import torch
>>> from transformers import AutoTokenizer, GPTJForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-j-6B")
>>> model = GPTJForSequenceClassification.from_pretrained("EleutherAI/gpt-j-6B")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> predicted_class_id = logits.argmax().item()
>>> model.config.id2label[predicted_class_id]
...
>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = GPTJForSequenceClassification.from_pretrained("EleutherAI/gpt-j-6B", num_labels=num_labels)
>>> labels = torch.tensor([1])
>>> loss = model(**inputs, labels=labels).loss
>>> round(loss.item(), 2)
...
多标签分类示例
>>> import torch
>>> from transformers import AutoTokenizer, GPTJForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-j-6B")
>>> model = GPTJForSequenceClassification.from_pretrained("EleutherAI/gpt-j-6B", problem_type="multi_label_classification")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> predicted_class_ids = torch.arange(0, logits.shape[-1])[torch.sigmoid(logits).squeeze(dim=0) > 0.5]
>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = GPTJForSequenceClassification.from_pretrained(
... "EleutherAI/gpt-j-6B", num_labels=num_labels, problem_type="multi_label_classification"
... )
>>> labels = torch.sum(
... torch.nn.functional.one_hot(predicted_class_ids[None, :].clone(), num_classes=num_labels), dim=1
... ).to(torch.float)
>>> loss = model(**inputs, labels=labels).loss
GPTJForQuestionAnswering
class transformers.GPTJForQuestionAnswering
< source >( config )
参数
- config (GPTJForQuestionAnswering) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
Gptj transformer 模型,顶部带有一个用于抽取式问答任务(如 SQuAD)的片段分类头(在隐藏状态输出之上有一个线性层,用于计算 `span start logits` 和 `span end logits`)。
此模型继承自 PreTrainedModel。请查看超类文档以了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。
该模型也是 PyTorch torch.nn.Module 的子类。可以像常规的 PyTorch 模块一样使用它,并参考 PyTorch 文档了解所有与通用用法和行为相关的事项。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None position_ids: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None start_positions: typing.Optional[torch.LongTensor] = None end_positions: typing.Optional[torch.LongTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.QuestionAnsweringModelOutput or tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
, 可选) — 词汇表中输入序列标记的索引。默认情况下,填充将被忽略。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.FloatTensor
,形状为(batch_size, sequence_length)
, 可选) — 用于避免在填充标记索引上执行注意力操作的掩码。掩码值在[0, 1]
中选择:- 1 表示标记未被屏蔽,
- 0 表示标记已被屏蔽。
- token_type_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
, 可选) — 用于指示输入的第一部分和第二部分的段标记索引。索引在[0, 1]
中选择:- 0 对应于 *句子 A* 的标记,
- 1 对应于 *句子 B* 的标记。
- position_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
, 可选) — 每个输入序列标记在位置嵌入中的位置索引。在 `[0, config.n_positions - 1]` 范围内选择。 - head_mask (
torch.FloatTensor
,形状为(num_heads,)
或(num_layers, num_heads)
, 可选) — 用于使自注意力模块的选定头无效的掩码。掩码值在 `[0, 1]` 中选择:- 1 表示头未被屏蔽,
- 0 表示头已被屏蔽。
- inputs_embeds (
torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_dim)
, 可选) — 可选地,你可以选择直接传递嵌入表示而不是传递input_ids
。如果你想比模型内部嵌入查找矩阵更好地控制如何将 *input_ids* 索引转换为关联向量,这会很有用。 - start_positions (
torch.LongTensor
,形状为(batch_size,)
, 可选) — 标记的片段开始位置(索引)的标签,用于计算标记分类损失。位置被限制在序列长度(sequence_length
)内。序列之外的位置不计入损失计算。 - end_positions (
torch.LongTensor
,形状为(batch_size,)
, 可选) — 标记的片段结束位置(索引)的标签,用于计算标记分类损失。位置被限制在序列长度(sequence_length
)内。序列之外的位置不计入损失计算。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 `attentions`。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 `hidden_states`。 - return_dict (
bool
, 可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。
返回
transformers.modeling_outputs.QuestionAnsweringModelOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.QuestionAnsweringModelOutput 或一个 `torch.FloatTensor` 的元组(如果传入 `return_dict=False` 或当 `config.return_dict=False` 时),包含根据配置(GPTJConfig)和输入而变化的不同元素。
-
loss (
torch.FloatTensor
of shape(1,)
, 可选, 当提供labels
时返回) — 总范围提取损失是起始位置和结束位置的交叉熵之和。 -
start_logits (
torch.FloatTensor
of shape(batch_size, sequence_length)
) — 范围起始分数(SoftMax 之前)。 -
end_logits (
torch.FloatTensor
of shape(batch_size, sequence_length)
) — 范围结束分数(SoftMax 之前)。 -
hidden_states (
tuple(torch.FloatTensor)
, 可选, 当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) —torch.FloatTensor
的元组(一个用于嵌入层的输出,如果模型有嵌入层,+ 每个层的输出),形状为(batch_size, sequence_length, hidden_size)
。模型在每个层输出的隐藏状态以及可选的初始嵌入输出。
-
attentions (
tuple(torch.FloatTensor)
, 可选, 当传递output_attentions=True
或config.output_attentions=True
时返回) —torch.FloatTensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
GPTJForQuestionAnswering 的 forward 方法会覆盖 __call__
特殊方法。
尽管前向传播的流程需要在此函数中定义,但之后应该调用 `Module` 实例而不是此函数,因为前者会处理运行前后处理步骤,而后者会静默地忽略它们。
示例
>>> from transformers import AutoTokenizer, GPTJForQuestionAnswering
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-j-6B")
>>> model = GPTJForQuestionAnswering.from_pretrained("EleutherAI/gpt-j-6B")
>>> question, text = "Who was Jim Henson?", "Jim Henson was a nice puppet"
>>> inputs = tokenizer(question, text, return_tensors="pt")
>>> with torch.no_grad():
... outputs = model(**inputs)
>>> answer_start_index = outputs.start_logits.argmax()
>>> answer_end_index = outputs.end_logits.argmax()
>>> predict_answer_tokens = inputs.input_ids[0, answer_start_index : answer_end_index + 1]
>>> tokenizer.decode(predict_answer_tokens, skip_special_tokens=True)
...
>>> # target is "nice puppet"
>>> target_start_index = torch.tensor([14])
>>> target_end_index = torch.tensor([15])
>>> outputs = model(**inputs, start_positions=target_start_index, end_positions=target_end_index)
>>> loss = outputs.loss
>>> round(loss.item(), 2)
...
TFGPTJModel
class transformers.TFGPTJModel
< source >( config *inputs **kwargs )
参数
- config (GPTJConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
基础的 GPT-J Transformer 模型,输出原始的隐藏状态,顶部没有任何特定的头。
该模型继承自 TFPreTrainedModel。请查阅超类文档,了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。
该模型也是一个 keras.Model 的子类。可以像常规的 TF 2.0 Keras 模型一样使用它,并参考 TF 2.0 文档了解所有与一般用法和行为相关的事项。
transformers
中的 TensorFlow 模型和层接受两种输入格式
- 所有输入作为关键字参数(如 PyTorch 模型),或
- 所有输入作为第一个位置参数中的列表、元组或字典。
支持第二种格式的原因是,Keras 方法在向模型和层传递输入时更喜欢这种格式。由于这种支持,当使用像 `model.fit()` 这样的方法时,一切应该“自然而然”地工作——只需以 `model.fit()` 支持的任何格式传递你的输入和标签!但是,如果你想在 Keras 方法(如 `fit()` 和 `predict()`)之外使用第二种格式,例如在使用 Keras `Functional` API 创建自己的层或模型时,有三种可能的方法可以将所有输入张量收集到第一个位置参数中。
- 只有一个
input_ids
的单个张量,没有其他:model(input_ids)
- 长度可变的列表,包含一个或多个输入张量,按文档字符串中给出的顺序:
model([input_ids, attention_mask])
或model([input_ids, attention_mask, token_type_ids])
- 一个字典,其中包含一个或多个与文档字符串中给出的输入名称关联的输入张量:
model({"input_ids": input_ids, "token_type_ids": token_type_ids})
请注意,当使用子类化创建模型和层时,你无需担心这些,因为你可以像传递给任何其他 Python 函数一样传递输入!
调用
< source >( input_ids: TFModelInputType | None = None past_key_values: Optional[tuple[tuple[Union[np.ndarray, tf.Tensor]]]] = None attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None inputs_embeds: np.ndarray | tf.Tensor | None = None use_cache: Optional[bool] = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: Optional[bool] = False ) → transformers.modeling_tf_outputs.TFBaseModelOutputWithPast or tuple(tf.Tensor)
参数
- input_ids (
Numpy 数组
或tf.Tensor
,形状为(batch_size, input_ids_length)
) — 如果 `past` 为 `None`,`input_ids_length` = `sequence_length`;否则 `input_ids_length` = `past[0].shape[-2]` (输入过去键值状态的 `sequence_length`)。词汇表中输入序列标记的索引。如果使用了 `past`,则只有那些尚未计算其 `past` 的输入 ID 才应作为 `input_ids` 传递。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.call() 和 PreTrainedTokenizer.encode()。
- past_key_values (长度为
config.n_layers
的list[tf.Tensor]
) — 包含由模型计算的预计算隐藏状态(注意力块中的键和值)(参见下面的 `past` 输出)。可用于加速序列解码。已经给出其过去值的标记 ID 不应作为输入 ID 传递,因为它们已经被计算过了。 - attention_mask (
tf.Tensor
或Numpy 数组
,形状为(batch_size, sequence_length)
, 可选) — 用于避免在填充标记索引上执行注意力操作的掩码。掩码值在[0, 1]
中选择:- 1 表示标记未被屏蔽,
- 0 表示标记已被屏蔽。
- token_type_ids (
tf.Tensor
或Numpy 数组
,形状为(batch_size, input_ids_length)
, 可选) — 用于指示输入的第一部分和第二部分的段标记索引。索引在[0, 1]
中选择:- 0 对应于 *句子 A* 的标记,
- 1 对应于 *句子 B* 的标记。
- position_ids (
tf.Tensor
或Numpy 数组
,形状为(batch_size, input_ids_length)
, 可选) — 每个输入序列标记在位置嵌入中的位置索引。在 `[0, config.max_position_embeddings - 1]` 范围内选择。 - head_mask (
Numpy 数组
或tf.Tensor
,形状为(num_heads,)
或(num_layers, num_heads)
, 可选) — 用于使自注意力模块的选定头无效的掩码。掩码值在 `[0, 1]` 中选择:- 1 表示头未被屏蔽,
- 0 表示头已被屏蔽。
- inputs_embeds (
tf.Tensor
,形状为(batch_size, input_ids_length, hidden_size)
, 可选) — 可选地,你可以选择直接传递嵌入表示而不是传递input_ids
。如果你想比模型内部嵌入查找矩阵更好地控制如何将input_ids
索引转换为关联向量,这会很有用。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 `attentions`。此参数只能在 eager 模式下使用,在图模式下将使用配置中的值。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 `hidden_states`。此参数只能在 eager 模式下使用,在图模式下将使用配置中的值。 - return_dict (
bool
, 可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。此参数可以在 eager 模式下使用,在图模式下,该值将始终设置为 True。 - training (
bool
, 可选, 默认为False
) — 是否在训练模式下使用模型(某些模块如 dropout 模块在训练和评估之间有不同的行为)。 - use_cache (
bool
, 可选, 默认为True
) — 如果设置为True
,则返回 `past_key_values` 键值状态,可用于加速解码(参见 `past`)。在训练期间设置为 `False`,在生成期间设置为 `True`。
返回
transformers.modeling_tf_outputs.TFBaseModelOutputWithPast 或 tuple(tf.Tensor)
一个 transformers.modeling_tf_outputs.TFBaseModelOutputWithPast 或一个 `tf.Tensor` 的元组(如果传入 `return_dict=False` 或当 `config.return_dict=False` 时),包含根据配置(GPTJConfig)和输入而变化的不同元素。
-
last_hidden_state (
tf.Tensor
of shape(batch_size, sequence_length, hidden_size)
) — 模型最后一层输出的隐藏状态序列。如果使用了
past_key_values
,则只输出形状为(batch_size, 1, hidden_size)
的序列的最后一个隐藏状态。 -
past_key_values (
list[tf.Tensor]
, 可选, 在传递 `use_cache=True` 或 `config.use_cache=True` 时返回) — 长度为 `config.n_layers` 的 `tf.Tensor` 列表,其中每个张量的形状为 `(2, batch_size, num_heads, sequence_length, embed_size_per_head)`。包含预先计算的隐藏状态(注意力块中的键和值),可用于(参见
past_key_values
输入)加速顺序解码。 -
hidden_states (
tuple(tf.Tensor)
, 可选, 在传递 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) — `tf.Tensor` 的元组(一个是嵌入层的输出 + 一个是每一层的输出),形状为 `(batch_size, sequence_length, hidden_size)`。模型在每个层输出的隐藏状态加上初始嵌入输出。
-
attentions (
tuple(tf.Tensor)
, 可选, 在传递 `output_attentions=True` 或 `config.output_attentions=True` 时返回) — `tf.Tensor` 的元组(每个层一个),形状为 `(batch_size, num_heads, sequence_length, sequence_length)`。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
TFGPTJModel 的 forward 方法会覆盖 __call__
特殊方法。
尽管前向传播的流程需要在此函数中定义,但之后应该调用 `Module` 实例而不是此函数,因为前者会处理运行前后处理步骤,而后者会静默地忽略它们。
示例
>>> from transformers import AutoTokenizer, TFGPTJModel
>>> import tensorflow as tf
>>> tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-j-6B")
>>> model = TFGPTJModel.from_pretrained("EleutherAI/gpt-j-6B")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="tf")
>>> outputs = model(inputs)
>>> last_hidden_states = outputs.last_hidden_state
TFGPTJForCausalLM
class transformers.TFGPTJForCausalLM
< source >( config *inputs **kwargs )
参数
- config (GPTJConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
带有语言建模头的 GPT-J Transformer 模型。
该模型继承自 TFPreTrainedModel。请查阅超类文档,了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。
该模型也是一个 keras.Model 的子类。可以像常规的 TF 2.0 Keras 模型一样使用它,并参考 TF 2.0 文档了解所有与一般用法和行为相关的事项。
transformers
中的 TensorFlow 模型和层接受两种输入格式
- 所有输入作为关键字参数(如 PyTorch 模型),或
- 所有输入作为第一个位置参数中的列表、元组或字典。
支持第二种格式的原因是,Keras 方法在向模型和层传递输入时更喜欢这种格式。由于这种支持,当使用像 `model.fit()` 这样的方法时,一切应该“自然而然”地工作——只需以 `model.fit()` 支持的任何格式传递你的输入和标签!但是,如果你想在 Keras 方法(如 `fit()` 和 `predict()`)之外使用第二种格式,例如在使用 Keras `Functional` API 创建自己的层或模型时,有三种可能的方法可以将所有输入张量收集到第一个位置参数中。
- 只有一个
input_ids
的单个张量,没有其他:model(input_ids)
- 长度可变的列表,包含一个或多个输入张量,按文档字符串中给出的顺序:
model([input_ids, attention_mask])
或model([input_ids, attention_mask, token_type_ids])
- 一个字典,其中包含一个或多个与文档字符串中给出的输入名称关联的输入张量:
model({"input_ids": input_ids, "token_type_ids": token_type_ids})
请注意,当使用子类化创建模型和层时,你无需担心这些,因为你可以像传递给任何其他 Python 函数一样传递输入!
调用
< source >( input_ids: TFModelInputType | None = None past_key_values: Optional[tuple[tuple[Union[np.ndarray, tf.Tensor]]]] = None attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None inputs_embeds: np.ndarray | tf.Tensor | None = None labels: np.ndarray | tf.Tensor | None = None use_cache: Optional[bool] = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: Optional[bool] = False ) → transformers.modeling_tf_outputs.TFCausalLMOutputWithPast or tuple(tf.Tensor)
参数
- input_ids (
Numpy 数组
或tf.Tensor
,形状为(batch_size, input_ids_length)
) — 如果 `past` 为 `None`,`input_ids_length` = `sequence_length`;否则 `input_ids_length` = `past[0].shape[-2]` (输入过去键值状态的 `sequence_length`)。词汇表中输入序列标记的索引。如果使用了 `past`,则只有那些尚未计算其 `past` 的输入 ID 才应作为 `input_ids` 传递。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.call() 和 PreTrainedTokenizer.encode()。
- past_key_values (长度为
config.n_layers
的list[tf.Tensor]
) — 包含由模型计算的预计算隐藏状态(注意力块中的键和值)(参见下面的 `past` 输出)。可用于加速序列解码。已经给出其过去值的标记 ID 不应作为输入 ID 传递,因为它们已经被计算过了。 - attention_mask (
tf.Tensor
或Numpy 数组
,形状为(batch_size, sequence_length)
, 可选) — 用于避免在填充标记索引上执行注意力操作的掩码。掩码值在[0, 1]
中选择:- 1 表示标记未被屏蔽,
- 0 表示标记已被屏蔽。
- token_type_ids (
tf.Tensor
或Numpy 数组
,形状为(batch_size, input_ids_length)
, 可选) — 用于指示输入的第一部分和第二部分的段标记索引。索引在[0, 1]
中选择:- 0 对应于 *句子 A* 的标记,
- 1 对应于 *句子 B* 的标记。
- position_ids (
tf.Tensor
或Numpy 数组
,形状为(batch_size, input_ids_length)
, 可选) — 每个输入序列标记在位置嵌入中的位置索引。在 `[0, config.max_position_embeddings - 1]` 范围内选择。 - head_mask (
Numpy 数组
或tf.Tensor
,形状为(num_heads,)
或(num_layers, num_heads)
, 可选) — 用于使自注意力模块的选定头无效的掩码。掩码值在 `[0, 1]` 中选择:- 1 表示头未被屏蔽,
- 0 表示头已被屏蔽。
- inputs_embeds (
tf.Tensor
,形状为(batch_size, input_ids_length, hidden_size)
, 可选) — 可选地,你可以选择直接传递嵌入表示而不是传递input_ids
。如果你想比模型内部嵌入查找矩阵更好地控制如何将input_ids
索引转换为关联向量,这会很有用。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 `attentions`。此参数只能在 eager 模式下使用,在图模式下将使用配置中的值。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 `hidden_states`。此参数只能在 eager 模式下使用,在图模式下将使用配置中的值。 - return_dict (
bool
, 可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。此参数可以在 eager 模式下使用,在图模式下,该值将始终设置为 True。 - training (
bool
, optional, 默认为False
) — 是否在训练模式下使用模型(某些模块如 dropout 模块在训练和评估模式下有不同的行为)。 - labels (
np.ndarray
或tf.Tensor
,形状为(batch_size, input_ids_length)
, optional) — 用于语言建模的标签。请注意,标签在模型内部会被 移动,例如,你可以设置labels = input_ids
。索引的选择范围是[-100, 0, ..., config.vocab_size]
。所有设置为-100
的标签都会被忽略(被遮盖),损失仅对[0, ..., config.vocab_size]
范围内的标签进行计算。
返回
transformers.modeling_tf_outputs.TFCausalLMOutputWithPast 或 tuple(tf.Tensor)
一个 transformers.modeling_tf_outputs.TFCausalLMOutputWithPast 或一个 `tf.Tensor` 元组(如果传递了 `return_dict=False` 或 `config.return_dict=False`),包含的各种元素取决于配置(GPTJConfig)和输入。
-
loss (形状为
(n,)
的tf.Tensor
,可选,其中n是非掩码标签的数量,当提供了labels
时返回) — 语言建模损失(用于下一标记预测)。 -
logits (
tf.Tensor
of shape(batch_size, sequence_length, config.vocab_size)
) — 语言模型头部的预测分数(SoftMax 之前每个词汇标记的分数)。 -
past_key_values (
list[tf.Tensor]
, 可选, 在传递 `use_cache=True` 或 `config.use_cache=True` 时返回) — 长度为 `config.n_layers` 的 `tf.Tensor` 列表,其中每个张量的形状为 `(2, batch_size, num_heads, sequence_length, embed_size_per_head)`。包含预先计算的隐藏状态(注意力块中的键和值),可用于(参见
past_key_values
输入)加速顺序解码。 -
hidden_states (
tuple(tf.Tensor)
, 可选, 在传递 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) — `tf.Tensor` 的元组(一个是嵌入层的输出 + 一个是每一层的输出),形状为 `(batch_size, sequence_length, hidden_size)`。模型在每个层输出的隐藏状态加上初始嵌入输出。
-
attentions (
tuple(tf.Tensor)
, 可选, 在传递 `output_attentions=True` 或 `config.output_attentions=True` 时返回) — `tf.Tensor` 的元组(每个层一个),形状为 `(batch_size, num_heads, sequence_length, sequence_length)`。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
TFGPTJForCausalLM 的前向方法会覆盖 `__call__` 特殊方法。
尽管前向传播的流程需要在此函数中定义,但之后应该调用 `Module` 实例而不是此函数,因为前者会处理运行前后处理步骤,而后者会静默地忽略它们。
示例
>>> from transformers import AutoTokenizer, TFGPTJForCausalLM
>>> import tensorflow as tf
>>> tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-j-6B")
>>> model = TFGPTJForCausalLM.from_pretrained("EleutherAI/gpt-j-6B")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="tf")
>>> outputs = model(inputs)
>>> logits = outputs.logits
TFGPTJForSequenceClassification
class transformers.TFGPTJForSequenceClassification
< 来源 >( config *inputs **kwargs )
参数
- config (GPTJConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。请查阅 from_pretrained() 方法来加载模型权重。
带有序列分类头(线性层)的 GPT-J Transformer 模型。
GPTJForSequenceClassification 使用最后一个标记来进行分类,就像其他因果模型(例如 GPT、GPT-2、GPT-Neo)一样。
由于它对最后一个标记进行分类,因此需要知道最后一个标记的位置。如果在配置中定义了 `pad_token_id`,它会找到每行中不是填充标记的最后一个标记。如果没有定义 `pad_token_id`,它会简单地取批次中每行的最后一个值。由于当传递 `inputs_embeds` 而不是 `input_ids` 时它无法猜测填充标记,因此它会做同样的操作(取批次中每行的最后一个值)。
该模型继承自 TFPreTrainedModel。请查阅超类文档,了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。
该模型也是一个 keras.Model 的子类。可以像常规的 TF 2.0 Keras 模型一样使用它,并参考 TF 2.0 文档了解所有与一般用法和行为相关的事项。
transformers
中的 TensorFlow 模型和层接受两种输入格式
- 所有输入作为关键字参数(如 PyTorch 模型),或
- 所有输入作为第一个位置参数中的列表、元组或字典。
支持第二种格式的原因是,Keras 方法在向模型和层传递输入时更喜欢这种格式。由于这种支持,当使用像 `model.fit()` 这样的方法时,一切应该“自然而然”地工作——只需以 `model.fit()` 支持的任何格式传递你的输入和标签!但是,如果你想在 Keras 方法(如 `fit()` 和 `predict()`)之外使用第二种格式,例如在使用 Keras `Functional` API 创建自己的层或模型时,有三种可能的方法可以将所有输入张量收集到第一个位置参数中。
- 只有一个
input_ids
的单个张量,没有其他:model(input_ids)
- 长度可变的列表,包含一个或多个输入张量,按文档字符串中给出的顺序:
model([input_ids, attention_mask])
或model([input_ids, attention_mask, token_type_ids])
- 一个字典,其中包含一个或多个与文档字符串中给出的输入名称关联的输入张量:
model({"input_ids": input_ids, "token_type_ids": token_type_ids})
请注意,当使用子类化创建模型和层时,你无需担心这些,因为你可以像传递给任何其他 Python 函数一样传递输入!
调用
< 来源 >( input_ids: TFModelInputType | None = None past_key_values: Optional[tuple[tuple[Union[np.ndarray, tf.Tensor]]]] = None attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None inputs_embeds: np.ndarray | tf.Tensor | None = None labels: np.ndarray | tf.Tensor | None = None use_cache: Optional[bool] = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: Optional[bool] = False ) → transformers.modeling_tf_outputs.TFSequenceClassifierOutputWithPast 或 tuple(tf.Tensor)
参数
- input_ids (
Numpy array
或tf.Tensor
,形状为(batch_size, input_ids_length)
) — 如果past
为None
,则input_ids_length
=sequence_length
,否则为past[0].shape[-2]
(输入过去键值状态的sequence_length
)。词汇表中输入序列词元的索引。如果使用了 `past`,则只有那些尚未计算其过去状态的输入 ID 才应作为 `input_ids` 传递。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.call() 和 PreTrainedTokenizer.encode()。
- past_key_values (
list[tf.Tensor]
,长度为config.n_layers
) — 包含由模型计算的预计算隐藏状态(注意力块中的键和值)(见下面的 `past` 输出)。可用于加速序列解码。已经给出其过去状态的词元 ID 不应作为输入 ID 传递,因为它们已经被计算过了。 - attention_mask (
tf.Tensor
或Numpy array
,形状为(batch_size, sequence_length)
, optional) — 用于避免在填充词元索引上执行注意力的掩码。掩码值选自[0, 1]
:- 1 表示词元未被遮盖,
- 0 表示词元被遮盖。
- token_type_ids (
tf.Tensor
或Numpy array
,形状为(batch_size, input_ids_length)
, optional) — 分段词元索引,用于指示输入的第一部分和第二部分。索引选自[0, 1]
:- 0 对应一个 *句子 A* 的词元,
- 1 对应一个 *句子 B* 的词元。
- position_ids (
tf.Tensor
或Numpy array
,形状为(batch_size, input_ids_length)
, optional) — 每个输入序列词元在位置嵌入中的位置索引。选值范围为[0, config.max_position_embeddings - 1]
。 - head_mask (
Numpy array
或tf.Tensor
,形状为(num_heads,)
或(num_layers, num_heads)
, optional) — 用于置零自注意力模块中选定头的掩码。掩码值选自[0, 1]
:- 1 表示头未被遮盖,
- 0 表示头被遮盖。
- inputs_embeds (
tf.Tensor
,形状为(batch_size, input_ids_length, hidden_size)
, optional) — 可选地,你可以不传递 `input_ids`,而是直接传递一个嵌入表示。如果你想比模型内部的嵌入查找矩阵更能控制如何将 `input_ids` 索引转换为相关向量,这将非常有用。 - output_attentions (
bool
, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 `attentions`。此参数仅在即时模式下可用,在图模式下将使用配置中的值。 - output_hidden_states (
bool
, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 `hidden_states`。此参数仅在即时模式下可用,在图模式下将使用配置中的值。 - return_dict (
bool
, optional) — 是否返回一个 ModelOutput 而不是一个普通的元组。此参数在即时模式下可用,在图模式下该值将始终设置为 True。 - training (
bool
, optional, 默认为False
) — 是否在训练模式下使用模型(某些模块如 dropout 模块在训练和评估模式下有不同的行为)。 - labels (
np.ndarray
或tf.Tensor
,形状为(batch_size,)
, optional) — 用于计算序列分类/回归损失的标签。索引应在[0, ..., config.num_labels - 1]
范围内。如果config.num_labels == 1
,则计算回归损失(均方损失);如果config.num_labels > 1
,则计算分类损失(交叉熵)。
返回
transformers.modeling_tf_outputs.TFSequenceClassifierOutputWithPast 或 tuple(tf.Tensor)
一个 transformers.modeling_tf_outputs.TFSequenceClassifierOutputWithPast 或一个 `tf.Tensor` 元组(如果传递了 `return_dict=False` 或 `config.return_dict=False`),包含的各种元素取决于配置(GPTJConfig)和输入。
-
loss (
tf.Tensor
,形状为(batch_size, )
,可选,当提供labels
时返回) — 分类损失(如果 config.num_labels==1,则为回归损失)。 -
logits (
tf.Tensor
,形状为(batch_size, config.num_labels)
) — 分类(或回归,如果 config.num_labels==1)分数(SoftMax 之前)。 -
past_key_values (
list[tf.Tensor]
, 可选, 在传递 `use_cache=True` 或 `config.use_cache=True` 时返回) — 长度为 `config.n_layers` 的 `tf.Tensor` 列表,其中每个张量的形状为 `(2, batch_size, num_heads, sequence_length, embed_size_per_head)`。包含预先计算的隐藏状态(注意力块中的键和值),可用于(参见
past_key_values
输入)加速顺序解码。 -
hidden_states (
tuple(tf.Tensor)
, 可选, 在传递 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) — `tf.Tensor` 的元组(一个是嵌入层的输出 + 一个是每一层的输出),形状为 `(batch_size, sequence_length, hidden_size)`。模型在每个层输出的隐藏状态加上初始嵌入输出。
-
attentions (
tuple(tf.Tensor)
, 可选, 在传递 `output_attentions=True` 或 `config.output_attentions=True` 时返回) — `tf.Tensor` 的元组(每个层一个),形状为 `(batch_size, num_heads, sequence_length, sequence_length)`。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
TFGPTJForSequenceClassification 的前向方法会覆盖 `__call__` 特殊方法。
尽管前向传播的流程需要在此函数中定义,但之后应该调用 `Module` 实例而不是此函数,因为前者会处理运行前后处理步骤,而后者会静默地忽略它们。
示例
>>> from transformers import AutoTokenizer, TFGPTJForSequenceClassification
>>> import tensorflow as tf
>>> tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-j-6B")
>>> model = TFGPTJForSequenceClassification.from_pretrained("EleutherAI/gpt-j-6B")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="tf")
>>> logits = model(**inputs).logits
>>> predicted_class_id = int(tf.math.argmax(logits, axis=-1)[0])
>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = TFGPTJForSequenceClassification.from_pretrained("EleutherAI/gpt-j-6B", num_labels=num_labels)
>>> labels = tf.constant(1)
>>> loss = model(**inputs, labels=labels).loss
TFGPTJForQuestionAnswering
class transformers.TFGPTJForQuestionAnswering
< 来源 >( config *inputs **kwargs )
参数
- config (GPTJConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。请查阅 from_pretrained() 方法来加载模型权重。
GPT-J 模型转换器,顶部带有一个跨度分类头,用于处理像 SQuAD 这样的抽取式问答任务(在隐藏状态输出之上有一个线性层,用于计算 `span start logits` 和 `span end logits`)。
该模型继承自 TFPreTrainedModel。请查阅超类文档,了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。
该模型也是一个 keras.Model 的子类。可以像常规的 TF 2.0 Keras 模型一样使用它,并参考 TF 2.0 文档了解所有与一般用法和行为相关的事项。
transformers
中的 TensorFlow 模型和层接受两种输入格式
- 所有输入作为关键字参数(如 PyTorch 模型),或
- 所有输入作为第一个位置参数中的列表、元组或字典。
支持第二种格式的原因是,Keras 方法在向模型和层传递输入时更喜欢这种格式。由于这种支持,当使用像 `model.fit()` 这样的方法时,一切应该“自然而然”地工作——只需以 `model.fit()` 支持的任何格式传递你的输入和标签!但是,如果你想在 Keras 方法(如 `fit()` 和 `predict()`)之外使用第二种格式,例如在使用 Keras `Functional` API 创建自己的层或模型时,有三种可能的方法可以将所有输入张量收集到第一个位置参数中。
- 只有一个
input_ids
的单个张量,没有其他:model(input_ids)
- 长度可变的列表,包含一个或多个输入张量,按文档字符串中给出的顺序:
model([input_ids, attention_mask])
或model([input_ids, attention_mask, token_type_ids])
- 一个字典,其中包含一个或多个与文档字符串中给出的输入名称关联的输入张量:
model({"input_ids": input_ids, "token_type_ids": token_type_ids})
请注意,当使用子类化创建模型和层时,你无需担心这些,因为你可以像传递给任何其他 Python 函数一样传递输入!
调用
< 来源 >( input_ids: TFModelInputType | None = None past_key_values: Optional[tuple[tuple[Union[np.ndarray, tf.Tensor]]]] = None attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None inputs_embeds: np.ndarray | tf.Tensor | None = None start_positions: np.ndarray | tf.Tensor | None = None end_positions: np.ndarray | tf.Tensor | None = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: Optional[bool] = False ) → transformers.modeling_tf_outputs.TFQuestionAnsweringModelOutput 或 tuple(tf.Tensor)
参数
- input_ids (
Numpy array
或tf.Tensor
,形状为(batch_size, input_ids_length)
) — 如果past
为None
,则input_ids_length
=sequence_length
,否则为past[0].shape[-2]
(输入过去键值状态的sequence_length
)。词汇表中输入序列词元的索引。如果使用了 `past`,则只有那些尚未计算其过去状态的输入 ID 才应作为 `input_ids` 传递。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.call() 和 PreTrainedTokenizer.encode()。
- past_key_values (
list[tf.Tensor]
,长度为config.n_layers
) — 包含由模型计算的预计算隐藏状态(注意力块中的键和值)(见下面的 `past` 输出)。可用于加速序列解码。已经给出其过去状态的词元 ID 不应作为输入 ID 传递,因为它们已经被计算过了。 - attention_mask (
tf.Tensor
或Numpy array
,形状为(batch_size, sequence_length)
, optional) — 用于避免在填充词元索引上执行注意力的掩码。掩码值选自[0, 1]
:- 1 表示词元未被遮盖,
- 0 表示词元被遮盖。
- token_type_ids (
tf.Tensor
或Numpy array
,形状为(batch_size, input_ids_length)
, optional) — 分段词元索引,用于指示输入的第一部分和第二部分。索引选自[0, 1]
:- 0 对应一个 *句子 A* 的词元,
- 1 对应一个 *句子 B* 的词元。
- position_ids (
tf.Tensor
或Numpy array
,形状为(batch_size, input_ids_length)
, optional) — 每个输入序列词元在位置嵌入中的位置索引。选值范围为[0, config.max_position_embeddings - 1]
。 - head_mask (
Numpy array
或tf.Tensor
,形状为(num_heads,)
或(num_layers, num_heads)
, optional) — 用于置零自注意力模块中选定头的掩码。掩码值选自[0, 1]
:- 1 表示头未被遮盖,
- 0 表示头被遮盖。
- inputs_embeds (
tf.Tensor
,形状为(batch_size, input_ids_length, hidden_size)
, optional) — 可选地,你可以不传递 `input_ids`,而是直接传递一个嵌入表示。如果你想比模型内部的嵌入查找矩阵更能控制如何将 `input_ids` 索引转换为相关向量,这将非常有用。 - output_attentions (
bool
, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 `attentions`。此参数仅在即时模式下可用,在图模式下将使用配置中的值。 - output_hidden_states (
bool
, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 `hidden_states`。此参数仅在即时模式下可用,在图模式下将使用配置中的值。 - return_dict (
bool
, optional) — 是否返回一个 ModelOutput 而不是一个普通的元组。此参数在即时模式下可用,在图模式下该值将始终设置为 True。 - training (
bool
, optional, 默认为False
) — 是否在训练模式下使用模型(某些模块如 dropout 模块在训练和评估模式下有不同的行为)。 - start_positions (
np.ndarray
或tf.Tensor
,形状为(batch_size,)
, optional) — 用于计算词元分类损失的标记跨度开始位置(索引)的标签。位置会被限制在序列长度(`sequence_length`)内。序列之外的位置在计算损失时不予考虑。 - end_positions (
np.ndarray
或tf.Tensor
,形状为(batch_size,)
, optional) — 用于计算词元分类损失的标记跨度结束位置(索引)的标签。位置会被限制在序列长度(`sequence_length`)内。序列之外的位置在计算损失时不予考虑。
返回
transformers.modeling_tf_outputs.TFQuestionAnsweringModelOutput 或 tuple(tf.Tensor)
一个 transformers.modeling_tf_outputs.TFQuestionAnsweringModelOutput 或一个 `tf.Tensor` 元组(如果传递了 `return_dict=False` 或 `config.return_dict=False`),包含的各种元素取决于配置(GPTJConfig)和输入。
-
loss (
tf.Tensor
,形状为(batch_size, )
, optional, 当提供了start_positions
和end_positions
时返回) — 总跨度抽取损失是开始和结束位置的交叉熵之和。 -
start_logits (形状为
(batch_size, sequence_length)
的tf.Tensor
) — 跨度起始分数(SoftMax 之前)。 -
end_logits (形状为
(batch_size, sequence_length)
的tf.Tensor
) — 跨度结束分数(SoftMax 之前)。 -
hidden_states (
tuple(tf.Tensor)
, 可选, 在传递 `output_hidden_states=True` 或 `config.output_hidden_states=True` 时返回) — `tf.Tensor` 的元组(一个是嵌入层的输出 + 一个是每一层的输出),形状为 `(batch_size, sequence_length, hidden_size)`。模型在每个层输出的隐藏状态加上初始嵌入输出。
-
attentions (
tuple(tf.Tensor)
, 可选, 在传递 `output_attentions=True` 或 `config.output_attentions=True` 时返回) — `tf.Tensor` 的元组(每个层一个),形状为 `(batch_size, num_heads, sequence_length, sequence_length)`。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
TFGPTJForQuestionAnswering 的前向方法会覆盖 `__call__` 特殊方法。
尽管前向传播的流程需要在此函数中定义,但之后应该调用 `Module` 实例而不是此函数,因为前者会处理运行前后处理步骤,而后者会静默地忽略它们。
示例
>>> from transformers import AutoTokenizer, TFGPTJForQuestionAnswering
>>> import tensorflow as tf
>>> tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-j-6B")
>>> model = TFGPTJForQuestionAnswering.from_pretrained("EleutherAI/gpt-j-6B")
>>> question, text = "Who was Jim Henson?", "Jim Henson was a nice puppet"
>>> inputs = tokenizer(question, text, return_tensors="tf")
>>> outputs = model(**inputs)
>>> answer_start_index = int(tf.math.argmax(outputs.start_logits, axis=-1)[0])
>>> answer_end_index = int(tf.math.argmax(outputs.end_logits, axis=-1)[0])
>>> predict_answer_tokens = inputs.input_ids[0, answer_start_index : answer_end_index + 1]
FlaxGPTJModel
class transformers.FlaxGPTJModel
< 来源 >( config: GPTJConfig input_shape: tuple = (1, 1) seed: int = 0 dtype: dtype = <class 'jax.numpy.float32'> _do_init: bool = True **kwargs )
参数
- config (GPTJConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。请查阅 from_pretrained() 方法来加载模型权重。
- dtype (
jax.numpy.dtype
, optional, 默认为jax.numpy.float32
) — 计算的数据类型。可以是jax.numpy.float32
、jax.numpy.float16
(在 GPU 上)和jax.numpy.bfloat16
(在 TPU 上)之一。这可用于在 GPU 或 TPU 上启用混合精度训练或半精度推理。如果指定,所有计算都将使用给定的 `dtype` 执行。
请注意,这仅指定计算的 dtype,不影响模型参数的 dtype。
基础的 GPTJ 模型转换器,输出原始的隐藏状态,顶部没有任何特定的头。
此模型继承自 FlaxPreTrainedModel。请查阅超类文档,了解该库为其所有模型实现的通用方法(如下载或保存、调整输入嵌入大小、修剪头等)。
此模型也是 Flax Linen flax.nn.Module 的子类。可以像常规 Flax 模块一样使用它,并参考 Flax 文档了解所有与常规用法和行为相关的事项。
最后,此模型支持固有的 JAX 功能,例如
__call__
< 来源 >( input_ids attention_mask = None position_ids = None params: typing.Optional[dict] = None past_key_values: typing.Optional[dict] = None dropout_rng: <function PRNGKey at 0x7effc7ad3a30> = None train: bool = False output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_flax_outputs.FlaxMaskedLMOutput 或 tuple(torch.FloatTensor)
参数
- input_ids (
numpy.ndarray
,形状为(batch_size, input_ids_length)
) — `input_ids_length` = `sequence_length`。词汇表中输入序列词元的索引。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
numpy.ndarray
,形状为(batch_size, sequence_length)
, optional) — 用于避免在填充词元索引上执行注意力的掩码。掩码值选自[0, 1]
:- 1 表示词元未被遮盖,
- 0 表示词元被遮盖。
- position_ids (
numpy.ndarray
,形状为(batch_size, input_ids_length)
, optional) — 每个输入序列词元在位置嵌入中的位置索引。选值范围为[0, config.max_position_embeddings - 1]
。 - past_key_values (
dict[str, np.ndarray]
, optional, 由init_cache
返回或在传递先前的past_key_values
时返回) — 包含预计算隐藏状态(注意力块中的键和值)的字典,可用于快速自回归解码。预计算的键和值隐藏状态的形状为 *[batch_size, max_length]*。 - output_attentions (
bool
, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 `attentions`。 - output_hidden_states (
bool
, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 `hidden_states`。 - return_dict (
bool
, 可选) — 是否返回一个 ModelOutput 对象而不是一个普通的元组。
返回
transformers.modeling_flax_outputs.FlaxMaskedLMOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_flax_outputs.FlaxMaskedLMOutput 或一个 torch.FloatTensor
元组(如果传递了 return_dict=False
或 config.return_dict=False
),包含根据配置 (GPTJConfig) 和输入而定的各种元素。
-
logits (形状为
(batch_size, sequence_length, config.vocab_size)
的jnp.ndarray
) — 语言建模头的预测分数(SoftMax 之前每个词汇 token 的分数)。 -
hidden_states (
tuple(jnp.ndarray)
, 可选, 当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) —jnp.ndarray
的元组(一个用于词嵌入的输出,另一个用于每一层的输出),形状为(batch_size, sequence_length, hidden_size)
。模型在每个层输出的隐藏状态加上初始嵌入输出。
-
attentions (
tuple(jnp.ndarray)
, 可选, 当传递output_attentions=True
或config.output_attentions=True
时返回) —jnp.ndarray
的元组(每一层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
FlaxGPTJPreTrainedModel
的前向方法,重写了 __call__
特殊方法。
尽管前向传播的流程需要在此函数中定义,但之后应该调用 `Module` 实例而不是此函数,因为前者会处理运行前后处理步骤,而后者会静默地忽略它们。
示例
>>> from transformers import AutoTokenizer, FlaxGPTJModel
>>> tokenizer = AutoTokenizer.from_pretrained("gptj")
>>> model = FlaxGPTJModel.from_pretrained("gptj")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="jax")
>>> outputs = model(**inputs)
>>> last_hidden_states = outputs.last_hidden_state
FlaxGPTJForCausalLM
class transformers.FlaxGPTJForCausalLM
< 源 >( config: GPTJConfig input_shape: tuple = (1, 1) seed: int = 0 dtype: dtype = <class 'jax.numpy.float32'> _do_init: bool = True **kwargs )
参数
- config (GPTJConfig) — 包含模型所有参数的模型配置类。使用配置文件进行初始化不会加载与模型关联的权重,只会加载配置。请查看 from_pretrained() 方法来加载模型权重。
- dtype (
jax.numpy.dtype
, 可选, 默认为jax.numpy.float32
) — 计算的数据类型。可以是jax.numpy.float32
、jax.numpy.float16
(在 GPU 上)和jax.numpy.bfloat16
(在 TPU 上)之一。这可用于在 GPU 或 TPU 上启用混合精度训练或半精度推理。如果指定,所有计算都将使用给定的
dtype
执行。请注意,这仅指定计算的数据类型,不影响模型参数的数据类型。
GPTJ Transformer 模型,顶部带有一个语言建模头。
此模型继承自 FlaxPreTrainedModel。请查阅超类文档,了解该库为其所有模型实现的通用方法(如下载或保存、调整输入嵌入大小、修剪头等)。
此模型也是 Flax Linen flax.nn.Module 的子类。可以像常规 Flax 模块一样使用它,并参考 Flax 文档了解所有与常规用法和行为相关的事项。
最后,此模型支持固有的 JAX 功能,例如
__call__
< 源 >( input_ids attention_mask = None position_ids = None params: typing.Optional[dict] = None past_key_values: typing.Optional[dict] = None dropout_rng: <function PRNGKey at 0x7effc7ad3a30> = None train: bool = False output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_flax_outputs.FlaxMaskedLMOutput 或 tuple(torch.FloatTensor)
参数
- input_ids (
numpy.ndarray
, 形状为(batch_size, input_ids_length)
) —input_ids_length
=sequence_length
。输入序列中词元在词汇表中的索引。索引可以使用 AutoTokenizer 获取。详情请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
numpy.ndarray
, 形状为(batch_size, sequence_length)
, 可选) — 用于避免对填充词元索引执行注意力机制的掩码。掩码值选自[0, 1]
:- 1 表示词元未被掩码,
- 0 表示词元被掩码。
- position_ids (
numpy.ndarray
, 形状为(batch_size, input_ids_length)
, 可选) — 每个输入序列词元在位置嵌入中的位置索引。选自范围[0, config.max_position_embeddings - 1]
。 - past_key_values (
dict[str, np.ndarray]
, 可选, 由init_cache
返回或在传递先前的past_key_values
时返回) — 包含预计算的隐藏状态(注意力块中的键和值)的字典,可用于快速自回归解码。预计算的键和值隐藏状态的形状为 [batch_size, max_length]。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。更多细节请参阅返回张量下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。更多细节请参阅返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回一个 ModelOutput 对象而不是一个普通的元组。
返回
transformers.modeling_flax_outputs.FlaxMaskedLMOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_flax_outputs.FlaxMaskedLMOutput 或一个 torch.FloatTensor
元组(如果传递了 return_dict=False
或 config.return_dict=False
),包含根据配置 (GPTJConfig) 和输入而定的各种元素。
-
logits (形状为
(batch_size, sequence_length, config.vocab_size)
的jnp.ndarray
) — 语言建模头的预测分数(SoftMax 之前每个词汇 token 的分数)。 -
hidden_states (
tuple(jnp.ndarray)
, 可选, 当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) —jnp.ndarray
的元组(一个用于词嵌入的输出,另一个用于每一层的输出),形状为(batch_size, sequence_length, hidden_size)
。模型在每个层输出的隐藏状态加上初始嵌入输出。
-
attentions (
tuple(jnp.ndarray)
, 可选, 当传递output_attentions=True
或config.output_attentions=True
时返回) —jnp.ndarray
的元组(每一层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
FlaxGPTJPreTrainedModel
的前向方法,重写了 __call__
特殊方法。
尽管前向传播的流程需要在此函数中定义,但之后应该调用 `Module` 实例而不是此函数,因为前者会处理运行前后处理步骤,而后者会静默地忽略它们。
示例
>>> from transformers import AutoTokenizer, FlaxGPTJForCausalLM
>>> tokenizer = AutoTokenizer.from_pretrained("gptj")
>>> model = FlaxGPTJForCausalLM.from_pretrained("gptj")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="np")
>>> outputs = model(**inputs)
>>> # retrieve logts for next token
>>> next_token_logits = outputs.logits[:, -1]