Transformers 文档

StableLM

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

StableLM

PyTorch FlashAttention SDPA

概述

StableLM 3B 4E1T 由 Stability AI 在 StableLM 3B 4E1T:技术报告 中提出,是多 epoch 预训练语言模型系列中的第一个模型。

模型详情

StableLM 3B 4E1T 是一个仅解码器的基础语言模型,在 1 万亿个 tokens 的多样化英语和代码数据集上进行了四个 epoch 的预训练。该模型架构基于 Transformer,具有部分 Rotary Position Embeddings、SwiGLU 激活、LayerNorm 等。

我们还提供了 StableLM Zephyr 3B,这是该模型的指令微调版本,可用于基于聊天的应用程序。

使用技巧

  • 该架构与 LLaMA 相似,但 RoPE 应用于头部嵌入维度的 25%,使用 LayerNorm 而不是 RMSNorm,以及可选的 QKV 偏置项。
  • StableLM 3B 4E1T-based 模型使用与 GPTNeoXTokenizerFast 相同的 tokenizer。

StableLM 3B 4E1TStableLM Zephyr 3B 可以在 Huggingface Hub 上找到

以下代码片段演示了如何使用 StableLM 3B 4E1T 进行推理

>>> from transformers import AutoModelForCausalLM, AutoTokenizer, set_seed
>>> device = "cuda" # the device to load the model onto

>>> set_seed(0)

>>> tokenizer = AutoTokenizer.from_pretrained("stabilityai/stablelm-3b-4e1t")
>>> model = AutoModelForCausalLM.from_pretrained("stabilityai/stablelm-3b-4e1t")
>>> model.to(device)
>>> model_inputs = tokenizer("The weather is always wonderful in", return_tensors="pt").to(model.device)

>>> generated_ids = model.generate(**model_inputs, max_length=32, do_sample=True)
>>> responses = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
>>> responses
['The weather is always wonderful in Costa Rica, which makes it a prime destination for retirees. That’s where the Pensionado program comes in, offering']

结合 StableLM 和 Flash Attention 2

首先,请确保安装最新版本的 Flash Attention v2。

pip install -U flash-attn --no-build-isolation

同时请确保您的硬件与 Flash-Attention 2 兼容。请阅读 flash-attn 仓库的官方文档以了解更多信息。注意:您必须以半精度加载模型(例如 torch.bfloat16)。

现在,要使用 Flash Attention 2 运行模型,请参考以下代码片段

>>> import torch
>>> from transformers import AutoModelForCausalLM, AutoTokenizer, set_seed
>>> device = "cuda" # the device to load the model onto

>>> set_seed(0)

>>> tokenizer = AutoTokenizer.from_pretrained("stabilityai/stablelm-3b-4e1t")
>>> model = AutoModelForCausalLM.from_pretrained("stabilityai/stablelm-3b-4e1t", torch_dtype=torch.bfloat16, attn_implementation="flash_attention_2")
>>> model.to(device)
>>> model_inputs = tokenizer("The weather is always wonderful in", return_tensors="pt").to(model.device)

>>> generated_ids = model.generate(**model_inputs, max_length=32, do_sample=True)
>>> responses = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
>>> responses
['The weather is always wonderful in Costa Rica, which makes it a prime destination for retirees. That’s where the Pensionado program comes in, offering']

StableLmConfig

class transformers.StableLmConfig

< >

( vocab_size = 50304 intermediate_size = 6912 hidden_size = 2560 num_hidden_layers = 32 num_attention_heads = 32 num_key_value_heads = 32 hidden_act = 'silu' max_position_embeddings = 4096 initializer_range = 0.02 layer_norm_eps = 1e-05 use_cache = True tie_word_embeddings = False rope_theta = 10000 rope_scaling = None use_qkv_bias = False qk_layernorm = False use_parallel_residual = False hidden_dropout = 0.0 attention_dropout = 0.0 partial_rotary_factor = 0.25 bos_token_id = 0 eos_token_id = 0 **kwargs )

参数

  • vocab_size (int, 可选的, 默认为 50304) — StableLM 模型的词汇表大小。 定义了调用 StableLmModel 时传递的 inputs_ids 可以表示的不同标记的数量。
  • intermediate_size (int, 可选的, 默认为 6912) — MLP 表示的维度。
  • hidden_size (int, 可选的, 默认为 2560) — Transformer 解码器中隐藏层的数量。
  • num_hidden_layers (int, 可选的, 默认为 32) — Transformer 解码器中隐藏层的数量。
  • num_attention_heads (int, 可选的, 默认为 32) — Transformer 编码器中每个注意力层的注意力头数。
  • num_key_value_heads (int, 可选的, 默认为 32) — 这是应该用于实现分组查询注意力的 key_value 头部的数量。 如果 num_key_value_heads=num_attention_heads,模型将使用多头注意力 (MHA),如果 num_key_value_heads=1,模型将使用多查询注意力 (MQA),否则将使用 GQA。 当将多头检查点转换为 GQA 检查点时,每个组的键和值头部都应通过对该组内的所有原始头部进行平均池化来构建。 有关更多详细信息,请查看 本文。 如果未指定,则默认为 num_attention_heads
  • hidden_act (strfunction, 可选的, 默认为 "silu") — 非线性激活函数(函数或字符串)。
  • max_position_embeddings (int, 可选的, 默认为 4096) — 此模型可能使用的最大序列长度。 通常将其设置为较大的值以防万一(例如,512 或 1024 或 2048)。
  • initializer_range (float, 可选的, 默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • layer_norm_eps (float, 可选的, 默认为 1e-05) — 归一化层使用的 epsilon 值。
  • use_cache (bool, 可选的, 默认为 True) — 模型是否应返回最后的键/值注意力(并非所有模型都使用)。 仅当 config.is_decoder=True 时相关。
  • tie_word_embeddings (bool, 可选的, 默认为 False) — 模型的输入和输出词嵌入是否应关联。
  • rope_theta (float, 可选的, 默认为 10000.0) — RoPE 嵌入的基本周期。
  • rope_scaling (Dict, 可选的) — 包含 RoPE 嵌入缩放配置的字典。 注意:如果您应用新的 rope 类型并且您期望模型在更长的 max_position_embeddings 上工作,我们建议您相应地更新此值。 预期内容: rope_type (str):要使用的 RoPE 的子变体。 可以是 [‘default’, ‘linear’, ‘dynamic’, ‘yarn’, ‘longrope’, ‘llama3’] 之一,其中 ‘default’ 是原始 RoPE 实现。 factor (float, 可选的):与除 ‘default’ 之外的所有 rope 类型一起使用。 应用于 RoPE 嵌入的缩放因子。 在大多数缩放类型中,x 的 factor 将使模型能够处理长度为 x * 原始最大预训练长度的序列。 original_max_position_embeddings (int, 可选的):与 ‘dynamic’、‘longrope’ 和 ‘llama3’ 一起使用。 预训练期间使用的原始最大位置嵌入。 attention_factor (float, 可选的):与 ‘yarn’ 和 ‘longrope’ 一起使用。 应用于注意力计算的缩放因子。 如果未指定,则默认为实现建议的值,使用 factor 字段来推断建议的值。 beta_fast (float, 可选的):仅与 ‘yarn’ 一起使用。 设置线性斜坡函数中外推(仅限)边界的参数。 如果未指定,则默认为 32。 beta_slow (float, 可选的):仅与 ‘yarn’ 一起使用。 设置线性斜坡函数中插值(仅限)边界的参数。 如果未指定,则默认为 1。 short_factor (List[float], 可选的):仅与 ‘longrope’ 一起使用。 应用于短上下文(< original_max_position_embeddings)的缩放因子。 必须是数字列表,其长度与隐藏大小除以注意力头数除以 2 相同 long_factor (List[float], 可选的):仅与 ‘longrope’ 一起使用。 应用于长上下文(< original_max_position_embeddings)的缩放因子。 必须是数字列表,其长度与隐藏大小除以注意力头数除以 2 相同 low_freq_factor (float, 可选的):仅与 ‘llama3’ 一起使用。 应用于 RoPE 低频分量的缩放因子 high_freq_factor (float, 可选的):仅与 ‘llama3’ 一起使用。 应用于 RoPE 高频分量的缩放因子
  • use_qkv_bias (bool, 可选的, 默认为 False) — 模型是否应对 qkv 层使用偏置。
  • qk_layernorm (bool, 可选的, 默认为 False) — 是否在投影隐藏状态后,按头部对查询和键进行归一化。
  • use_parallel_residual (bool, 可选的, 默认为 False) — 是否在每个 Transformer 层中使用“并行”公式,这可以在大规模情况下稍微加快训练速度。
  • hidden_dropout (float, 可选, 默认为 0.0) — 将 MLP 应用于隐藏状态后的 dropout 比率。
  • attention_dropout (float, 可选, 默认为 0.0) — 注意力概率的 dropout 比率。
  • partial_rotary_factor (float, 可选, 默认为 0.25) — 查询和键中将应用旋转嵌入的百分比。
  • bos_token_id (int, 可选, 默认为 0) — 词汇表中 BOS 标记的 ID。
  • eos_token_id (int, 可选, 默认为 0) — 词汇表中 EOS 标记的 ID。

这是用于存储 ~StableLmModel 配置的配置类。 它用于根据指定的参数实例化 StableLM 模型,定义模型架构。 使用默认值实例化配置将产生与 StableLM stabilityai/stablelm-3b-4e1t 架构类似的配置。

配置对象继承自 PretrainedConfig,可用于控制模型输出。 有关更多信息,请阅读 PretrainedConfig 中的文档。

示例

>>> from transformers import StableLmModel, StableLmConfig

>>> # Initializing a StableLM stablelm-3b style configuration
>>> configuration = StableLmConfig()

StableLmModel

class transformers.StableLmModel

< >

( config: StableLmConfig )

参数

  • config (StableLmConfig) — 带有模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型关联的权重,仅加载配置。 查看 from_pretrained() 方法以加载模型权重。
  • config — StableLmConfig

裸 StableLm 模型,输出原始隐藏状态,顶部没有任何特定的 head。 此模型继承自 PreTrainedModel。 查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝 head 等)。

此模型也是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参考 PyTorch 文档,了解与常规用法和行为相关的所有事项。

Transformer 解码器,由 config.num_hidden_layers 层组成。 每层都是一个 StableLmDecoderLayer

前向传播

< >

( input_ids: LongTensor = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[typing.List[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 )

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。 如果您提供 padding,默认情况下将忽略 padding。

    可以使用 AutoTokenizer 获取索引。 有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • attention_mask (torch.Tensor,形状为 (batch_size, sequence_length), 可选) — 用于避免在 padding 标记索引上执行注意力的掩码。 在 [0, 1] 中选择的掩码值:

    • 1 表示未被掩盖的标记,
    • 0 表示被掩盖的标记。

    什么是注意力掩码?

    可以使用 AutoTokenizer 获取索引。 有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    如果使用 past_key_values,则可以选择仅输入最后一个 decoder_input_ids(请参阅 past_key_values)。

    如果您想更改 padding 行为,则应阅读 modeling_opt._prepare_decoder_attention_mask 并根据您的需要进行修改。 有关默认策略的更多信息,请参见 论文 中的图 1。

    • 1 表示 head 未被掩盖
    • 0 表示 head 被掩盖
  • position_ids (torch.LongTensor,形状为 (batch_size, sequence_length), 可选) — 位置嵌入中每个输入序列标记的位置索引。 在范围 [0, config.n_positions - 1] 中选择。

    什么是位置 ID?

  • past_key_values (Cachetuple(tuple(torch.FloatTensor)), 可选) — 预先计算的隐藏状态(自注意力模块和交叉注意力模块中的键和值),可用于加速顺序解码。 这通常包括模型在先前解码阶段返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    允许两种格式:

    • Cache 实例,请参阅我们的 kv 缓存指南
    • 长度为 config.n_layerstuple(torch.FloatTensor) 元组,每个元组具有 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量。 这也称为旧版缓存格式。

    模型将输出与作为输入馈送的缓存格式相同的格式。 如果未传递 past_key_values,则将返回旧版缓存格式。

    如果使用 past_key_values,则用户可以选择仅输入最后一个 input_ids(那些没有将其过去的键值状态提供给此模型的输入 ID),形状为 (batch_size, 1),而不是形状为 (batch_size, sequence_length) 的所有 input_ids

  • inputs_embeds (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size), 可选) — (可选)您可以选择直接传递嵌入表示,而不是传递 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 相反,此张量不受 padding 的影响。 它用于在正确的位置更新缓存并推断完整的序列长度。

StableLmModel 前向传播方法,覆盖了 __call__ 特殊方法。

尽管前向传播的配方需要在该函数中定义,但之后应调用 Module 实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

StableLmForCausalLM

class transformers.StableLmForCausalLM

< >

( config )

前向传播

< >

( input_ids: LongTensor = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[typing.List[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 logits_to_keep: typing.Union[int, torch.Tensor] = 0 **kwargs ) transformers.modeling_outputs.CausalLMOutputWithPasttuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — 词汇表中输入序列 tokens 的索引。 如果您提供 padding,默认情况下 padding 将被忽略。

    索引可以使用 AutoTokenizer 获得。 请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call() 以了解详情。

    什么是输入 IDs?

  • attention_mask (torch.Tensor,形状为 (batch_size, sequence_length)可选) — 用于避免在 padding token 索引上执行 attention 的 Mask。 Mask 值在 [0, 1] 中选择:

    • 1 表示 tokens 未被掩盖
    • 0 表示 tokens 被掩盖

    什么是 attention masks?

    索引可以使用 AutoTokenizer 获得。 请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call() 以了解详情。

    如果使用了 past_key_values,则可以选择仅输入最后的 decoder_input_ids(请参阅 past_key_values)。

    如果您想更改 padding 行为,您应该阅读 modeling_opt._prepare_decoder_attention_mask 并根据您的需要进行修改。 有关默认策略的更多信息,请参见 论文 中的图 1。

    • 1 表示 head 未被掩盖
    • 0 表示 head 被掩盖
  • position_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 每个输入序列 tokens 在位置嵌入中的位置索引。 在范围 [0, config.n_positions - 1] 中选择。

    什么是位置 IDs?

  • past_key_values (Cachetuple(tuple(torch.FloatTensor))可选) — 预先计算的隐藏状态(自注意力模块和交叉注意力模块中的键和值),可用于加速顺序解码。 这通常包括模型在先前解码阶段返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    允许两种格式:

    • Cache 实例,请参阅我们的 kv cache 指南
    • 长度为 config.n_layerstuple(torch.FloatTensor) 元组,每个元组有 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head)) 的张量。 这也称为旧版缓存格式。

    模型将输出与作为输入馈送的缓存格式相同的格式。 如果没有传递 past_key_values,将返回旧版缓存格式。

    如果使用 past_key_values,用户可以选择仅输入最后的 input_ids(那些没有将其过去的键值状态提供给此模型的)形状为 (batch_size, 1) 而不是所有形状为 (batch_size, sequence_length)input_ids

  • inputs_embeds (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size)可选) — (可选)您可以选择直接传递嵌入表示,而不是传递 input_ids。 如果您希望比模型的内部嵌入查找矩阵更精细地控制如何将 input_ids 索引转换为关联向量,这将非常有用。
  • use_cache (bool可选) — 如果设置为 True,则返回 past_key_values 键值状态,并且可以用于加速解码(请参阅 past_key_values)。
  • output_attentions (bool可选) — 是否返回所有 attention 层的 attentions 张量。 有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool可选) — 是否返回所有层的 hidden states。 有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是纯元组。
  • cache_position (torch.LongTensor,形状为 (sequence_length)可选) — 描述输入序列 tokens 在序列中位置的索引。 与 position_ids 相反,此张量不受 padding 的影响。 它用于在正确的位置更新缓存并推断完整的序列长度。
  • labels (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 用于计算 masked language modeling loss 的标签。 索引应为 [0, ..., config.vocab_size] 或 -100(请参阅 input_ids 文档字符串)。 索引设置为 -100 的 tokens 将被忽略(masked),loss 仅针对标签在 [0, ..., config.vocab_size] 中的 tokens 计算。
  • logits_to_keep (inttorch.Tensor可选) — 如果是 int,则计算最后 logits_to_keep 个 tokens 的 logits。 如果是 0,则计算所有 input_ids 的 logits(特殊情况)。 只有最后一个 token logits 是生成所需要的,并且仅针对该 token 计算它们可以节省内存,这对于长序列或大词汇量来说变得非常重要。 如果是 torch.Tensor,则必须是 1D,对应于要在序列长度维度中保留的索引。 这在使用 packed tensor 格式(批次和序列长度的单维度)时很有用。

返回

transformers.modeling_outputs.CausalLMOutputWithPasttuple(torch.FloatTensor)

transformers.modeling_outputs.CausalLMOutputWithPasttorch.FloatTensor 元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),包括各种元素,具体取决于配置 (StableLmConfig) 和输入。

  • loss (torch.FloatTensor,形状为 (1,)可选,当提供 labels 时返回) — 语言建模 loss(用于下一个 token 预测)。

  • logits (torch.FloatTensor,形状为 (batch_size, sequence_length, config.vocab_size)) — 语言建模 head 的预测分数(SoftMax 之前每个词汇表 token 的分数)。

  • past_key_values (tuple(tuple(torch.FloatTensor))可选,当传递 use_cache=True 或当 config.use_cache=True 时返回) — 长度为 config.n_layerstuple(torch.FloatTensor) 元组,每个元组有 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head)) 的张量

    包含预先计算的隐藏状态(自注意力模块中的键和值),可以用于(请参阅 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)

    attention softmax 之后的 Attention 权重,用于计算自注意力 head 中的加权平均值。

StableLmForCausalLM forward 方法,覆盖了 __call__ 特殊方法。

尽管前向传播的配方需要在该函数中定义,但之后应调用 Module 实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

示例

>>> from transformers import AutoTokenizer, StableLmForCausalLM

>>> model = StableLmForCausalLM.from_pretrained("stabilityai/stablelm-3b-4e1t")
>>> tokenizer = AutoTokenizer.from_pretrained("stabilityai/stablelm-3b-4e1t")

>>> prompt = "The weather is always wonderful in"
>>> inputs = tokenizer(prompt, return_tensors="pt")

>>> # Generate
>>> generate_ids = model.generate(inputs.input_ids, max_length=30)
>>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
'The weather is always wonderful in the summer in the city of San Diego. The city is located on the coast of the Pacific Ocean and is surrounded by'

StableLmForSequenceClassification

class transformers.StableLmForSequenceClassification

< >

( config )

参数

  • config (StableLmConfig) — 具有模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型关联的权重,仅加载配置。 查看 from_pretrained() 方法以加载模型权重。

带有序列分类 head (线性层) 的 StableLm transformer。

StableLmForSequenceClassification 使用最后一个 token 来进行分类,就像其他因果模型(例如 GPT-2)一样。

由于它对最后一个 token 进行分类,因此需要知道最后一个 token 的位置。 如果在配置中定义了 pad_token_id,它会在每行中找到不是 padding token 的最后一个 token。 如果未定义 pad_token_id,它只会获取批次中每行的最后一个值。 由于当传递 inputs_embeds 而不是 input_ids 时,它无法猜测 padding tokens,因此它执行相同的操作(获取批次中每行的最后一个值)。

此模型继承自 PreTrainedModel。 查看超类文档,了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝 head 等)

此模型也是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参考 PyTorch 文档,了解与常规用法和行为相关的所有事项。

前向传播

< >

( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Union[transformers.cache_utils.Cache, typing.List[torch.FloatTensor], NoneType] = 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 )

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — 词汇表中输入序列 tokens 的索引。 如果您提供 padding,默认情况下 padding 将被忽略。

    索引可以使用 AutoTokenizer 获得。 请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call() 以了解详情。

    什么是输入 IDs?

  • attention_mask (torch.Tensor,形状为 (batch_size, sequence_length)可选) — 用于避免在 padding token 索引上执行 attention 的 Mask。 Mask 值在 [0, 1] 中选择:

    • 1 表示 tokens 未被掩盖
    • 0 表示 tokens 被掩盖

    什么是 attention masks?

    索引可以使用 AutoTokenizer 获得。 请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call() 以了解详情。

    如果使用了 past_key_values,则可以选择仅输入最后的 decoder_input_ids(请参阅 past_key_values)。

    如果您想更改 padding 行为,您应该阅读 modeling_opt._prepare_decoder_attention_mask 并根据您的需要进行修改。 有关默认策略的更多信息,请参见 论文 中的图 1。

    • 1 表示 head 未被掩盖
    • 0 表示 head 被掩盖
  • position_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 每个输入序列 tokens 在位置嵌入中的位置索引。 在范围 [0, config.n_positions - 1] 中选择。

    什么是位置 IDs?

  • past_key_values (Cachetuple(tuple(torch.FloatTensor)), 可选) — 预先计算的隐藏状态(自注意力模块和交叉注意力模块中的键和值),可以用于加速顺序解码。这通常包含模型在先前解码阶段返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    允许两种格式:

    • Cache 实例,请参阅我们的 Cache 文档 kv cache 指南
    • tuple(torch.FloatTensor) 的元组,长度为 config.n_layers,每个元组包含 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量。这也称为旧版缓存格式。

    模型将输出与输入相同的缓存格式。如果未传递 past_key_values,则将返回旧版缓存格式。

    如果使用 past_key_values,用户可以选择仅输入最后一次的 input_ids(那些没有将其过去的键值状态提供给此模型的),形状为 (batch_size, 1),而不是所有形状为 (batch_size, sequence_length)input_ids

  • inputs_embeds (形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor, 可选) — (可选)您可以选择直接传递嵌入表示,而不是传递 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 (形状为 (sequence_length)torch.LongTensor, 可选) — 描述输入序列标记在序列中的位置的索引。 与 position_ids 相反,此张量不受填充的影响。 它用于在正确的位置更新缓存并推断完整序列长度。
  • labels (形状为 (batch_size,)torch.LongTensor, 可选) — 用于计算序列分类/回归损失的标签。 索引应为 [0, ..., config.num_labels - 1]。 如果 config.num_labels == 1,则计算回归损失(均方损失)。 如果 config.num_labels > 1,则计算分类损失(交叉熵)。

StableLmForSequenceClassification 的 forward 方法覆盖了 __call__ 特殊方法。

尽管前向传播的配方需要在该函数中定义,但之后应调用 Module 实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

StableLmForTokenClassification

class transformers.StableLmForTokenClassification

< >

( config )

参数

  • config (StableLmConfig) — 带有模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型关联的权重,仅加载配置。 查看 from_pretrained() 方法以加载模型权重。

带有 Token 分类头的 StableLm 模型 Transformer(隐藏状态输出之上的线性层),例如用于命名实体识别 (NER) 任务。

此模型继承自 PreTrainedModel。 查看超类文档,了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝 head 等)

此模型也是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参考 PyTorch 文档,了解与常规用法和行为相关的所有事项。

前向传播

< >

( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[typing.List[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.TokenClassifierOutputtuple(torch.FloatTensor)

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列标记的索引。 默认情况下,如果您提供填充,则会忽略填充。

    可以使用 AutoTokenizer 获取索引。 请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call() 了解详细信息。

    什么是输入 ID?

  • attention_mask (形状为 (batch_size, sequence_length)torch.Tensor, 可选) — 用于避免对填充标记索引执行注意力的掩码。 在 [0, 1] 中选择的掩码值:

    • 1 表示未被掩盖的标记,
    • 0 表示被掩盖的标记。

    什么是注意力掩码?

    可以使用 AutoTokenizer 获取索引。 请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call() 了解详细信息。

    如果使用 past_key_values,则可以选择仅输入最后一个 decoder_input_ids(请参阅 past_key_values)。

    如果要更改填充行为,则应阅读 modeling_opt._prepare_decoder_attention_mask 并根据需要进行修改。 有关默认策略的更多信息,请参见 论文 中的图 1。

    • 1 表示 head 未被掩盖
    • 0 表示 head 被掩盖
  • position_ids (形状为 (batch_size, sequence_length)torch.LongTensor, 可选) — 每个输入序列标记在位置嵌入中的位置索引。 在范围 [0, config.n_positions - 1] 中选择。

    什么是位置 ID?

  • past_key_values (Cachetuple(tuple(torch.FloatTensor)), 可选) — 预先计算的隐藏状态(自注意力模块和交叉注意力模块中的键和值),可以用于加速顺序解码。这通常包含模型在先前解码阶段返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    允许两种格式:

    • Cache 实例,请参阅我们的 Cache 文档 kv cache 指南
    • tuple(torch.FloatTensor) 的元组,长度为 config.n_layers,每个元组包含 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量。这也称为旧版缓存格式。

    模型将输出与输入相同的缓存格式。如果未传递 past_key_values,则将返回旧版缓存格式。

    如果使用 past_key_values,用户可以选择仅输入最后一次的 input_ids(那些没有将其过去的键值状态提供给此模型的),形状为 (batch_size, 1),而不是所有形状为 (batch_size, sequence_length)input_ids

  • inputs_embeds (形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor, 可选) — (可选)您可以选择直接传递嵌入表示,而不是传递 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 (形状为 (sequence_length)torch.LongTensor, 可选) — 描述输入序列标记在序列中的位置的索引。 与 position_ids 相反,此张量不受填充的影响。 它用于在正确的位置更新缓存并推断完整序列长度。
  • labels (torch.LongTensor,形状为 (batch_size,)可选) — 用于计算序列分类/回归损失的标签。索引应在 [0, ..., config.num_labels - 1] 中。如果 config.num_labels == 1,则计算回归损失(均方误差损失);如果 config.num_labels > 1,则计算分类损失(交叉熵损失)。

返回

transformers.modeling_outputs.TokenClassifierOutputtuple(torch.FloatTensor)

一个 transformers.modeling_outputs.TokenClassifierOutput 或一个 torch.FloatTensor 元组 (如果传递了 return_dict=False 或当 config.return_dict=False 时),包含各种元素,具体取决于配置 (StableLmConfig) 和输入。

  • loss (torch.FloatTensor,形状为 (1,)可选,当提供 labels 时返回) — 分类损失。

  • logits (torch.FloatTensor,形状为 (batch_size, sequence_length, config.num_labels)) — 分类得分(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)

    attention softmax 之后的 Attention 权重,用于计算自注意力 head 中的加权平均值。

StableLmForTokenClassification 的 forward 方法,覆盖了 __call__ 特殊方法。

尽管前向传播的配方需要在该函数中定义,但之后应调用 Module 实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

示例

>>> from transformers import AutoTokenizer, StableLmForTokenClassification
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("stabilityai/stablelm-3b-4e1t")
>>> model = StableLmForTokenClassification.from_pretrained("stabilityai/stablelm-3b-4e1t")

>>> inputs = tokenizer(
...     "HuggingFace is a company based in Paris and New York", add_special_tokens=False, return_tensors="pt"
... )

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> predicted_token_class_ids = logits.argmax(-1)

>>> # Note that tokens are classified rather then input words which means that
>>> # there might be more predicted token classes than words.
>>> # Multiple token classes might account for the same word
>>> predicted_tokens_classes = [model.config.id2label[t.item()] for t in predicted_token_class_ids[0]]

>>> labels = predicted_token_class_ids
>>> loss = model(**inputs, labels=labels).loss
< > GitHub 上更新