Transformers 文档

氦气

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

Helium

PyTorch FlashAttention SDPA

概述

Helium 是 Kyutai 团队在Announcing Helium-1 Preview中提出的。

Helium-1 预览版是一个轻量级语言模型,具有 20 亿参数,目标是边缘和移动设备。它支持以下语言:英语、法语、德语、意大利语、葡萄牙语、西班牙语。

  • 开发者: Kyutai
  • 模型类型: 大型语言模型
  • 语言(NLP): 英语、法语、德语、意大利语、葡萄牙语、西班牙语
  • 许可证: CC-BY 4.0

评估

测试数据

该模型在 MMLU、TriviaQA、NaturalQuestions、ARC Easy & Challenge、Open Book QA、Common Sense QA、Physical Interaction QA、Social Interaction QA、HellaSwag、WinoGrande、Multilingual Knowledge QA、FLORES 200 上进行了评估。

指标

我们报告在 MMLU、ARC、OBQA、CSQA、PIQA、SIQA、HellaSwag、WinoGrande 上的准确率。我们报告在 TriviaQA、NQ 和 MKQA 上的精确匹配率。我们报告在 FLORES 上的 BLEU 值。

英文结果

基准 Helium-1 预览版 HF SmolLM2 (1.7B) Gemma-2 (2.6B) Llama-3.2 (3B) Qwen2.5 (1.5B)
MMLU 51.2 50.4 53.1 56.6 61.0
NQ 17.3 15.1 17.7 22.0 13.1
TQA 47.9 45.4 49.9 53.6 35.9
ARC E 80.9 81.8 81.1 84.6 89.7
ARC C 62.7 64.7 66.0 69.0 77.2
OBQA 63.8 61.4 64.6 68.4 73.8
CSQA 65.6 59.0 64.4 65.4 72.4
PIQA 77.4 77.7 79.8 78.9 76.0
SIQA 64.4 57.5 61.9 63.8 68.7
HS 69.7 73.2 74.7 76.9 67.5
WG 66.5 65.6 71.2 72.0 64.8
平均 60.7 59.3 62.2 64.7 63.6

多语言结果

语言 基准 Helium-1 预览版 HF SmolLM2 (1.7B) Gemma-2 (2.6B) Llama-3.2 (3B) Qwen2.5 (1.5B)
德语 MMLU 45.6 35.3 45.0 47.5 49.5
ARC C 56.7 38.4 54.7 58.3 60.2
HS 53.5 33.9 53.4 53.7 42.8
MKQA 16.1 7.1 18.9 20.2 10.4
西班牙语 MMLU 46.5 38.9 46.2 49.6 52.8
ARC C 58.3 43.2 58.8 60.0 68.1
HS 58.6 40.8 60.5 61.1 51.4
MKQA 16.0 7.9 18.5 20.6 10.6

技术规格

模型架构和目标

超参数
层数 24
头数 20
模型维度 2560
MLP 维度 7040
上下文大小 4096
Theta RoPE 100,000

提示

使用提示

可以在 Huggingface Hub 上找到 Helium

下面,我们将演示如何使用 helium-1-preview 进行推理。

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

>>> model = AutoModelForCausalLM.from_pretrained("kyutai/helium-1-preview-2b", device_map="auto")
>>> tokenizer = AutoTokenizer.from_pretrained("kyutai/helium-1-preview-2b")

>>> prompt = "Give me a short introduction to large language model."

>>> model_inputs = tokenizer(prompt, return_tensors="pt").to(device)

>>> generated_ids = model.generate(model_inputs.input_ids, max_new_tokens=512, do_sample=True)

>>> generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)]

>>> response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

HeliumConfig

class transformers.HeliumConfig

< >

( vocab_size = 48000 hidden_size = 2560 intermediate_size = 7040 num_hidden_layers = 24 num_attention_heads = 20 num_key_value_heads = 20 head_dim = 128 hidden_act = 'silu' attention_dropout = 0.0 max_position_embeddings = 4096 initializer_range = 0.02 rms_norm_eps = 1e-08 use_cache = True tie_word_embeddings = False rope_theta = 100000.0 pad_token_id = 3 eos_token_id = 2 bos_token_id = 1 attention_bias = False mlp_bias = False **kwargs )

参数

  • vocab_size (int, 可选, 默认为 48000) — Helium 模型的词汇表大小。定义了在调用 HeliumModel 时传递的 inputs_ids 可以表示的不同 tokens 的数量
  • hidden_size (int, 可选, 默认为 2560) — 隐藏层表示的维度。
  • intermediate_size (int, 可选, 默认为 7040) — MLP 表示的维度。
  • num_hidden_layers (int, 可选, 默认为 24) — Transformer 解码器中的隐藏层数。
  • num_attention_heads (int, 可选, 默认为 20) — Transformer 解码器中每个注意力层的注意力头数。
  • num_key_value_heads (int, 可选, 默认为 20) — 这是用于实现分组查询注意力 (Grouped Query Attention) 的 key_value 头数。如果 num_key_value_heads=num_attention_heads,模型将使用多头注意力 (Multi Head Attention, MHA);如果 num_key_value_heads=1,模型将使用多查询注意力 (Multi Query Attention, MQA);否则将使用 GQA。当将多头检查点转换为 GQA 检查点时,每个组的 key 和 value 头应通过对该组内所有原始头进行均值池化来构建。有关更多详细信息,请查看本文。如果未指定,则默认为 num_attention_heads
  • head_dim (int, 可选, 默认为 128) — 注意力头的维度。
  • hidden_act (strfunction, 可选, 默认为 "silu") — 旧版的激活函数。它会被 hidden_activation 覆盖。
  • attention_dropout (float, 可选, 默认为 0.0) — 注意力概率的 dropout 比率。
  • max_position_embeddings (int, 可选, 默认为 4096) — 此模型可能使用的最大序列长度。
  • initializer_range (float, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • rms_norm_eps (float, 可选, 默认为 1e-08) — rms 归一化层使用的 epsilon 值。
  • use_cache (bool, 可选, 默认为 True) — 模型是否应返回最后的 key/value 注意力(并非所有模型都使用)。仅当 config.is_decoder=True 时相关。
  • tie_word_embeddings (bool, 可选, 默认为 False) — 是否绑定权重嵌入
  • rope_theta (float, 可选, 默认为 100000.0) — RoPE 嵌入的基期。
  • pad_token_id (int, 可选, 默认为 3) — 填充 token id。
  • eos_token_id (int | list, 可选, 默认为 2) — 流结束 token id。
  • bos_token_id (int, 可选, 默认为 1) — 流开始 token id。
  • attention_bias (bool, 可选, 默认为 False) — 在自注意力期间,是否在 query、key、value 和输出投影层中使用偏置。
  • mlp_bias (bool, 可选, 默认为 False) — 是否在 MLP 层中的 up_proj、down_proj 和 gate_proj 层中使用偏置。

这是用于存储 HeliumModel 配置的配置类。它用于根据指定的参数实例化 Helium 模型,从而定义模型架构。使用默认值实例化配置将产生与 Helium 2b 模型类似的配置。例如,kyutai/helium-2b 配置对象继承自 PretrainedConfig,可用于控制模型输出。有关更多信息,请阅读 PretrainedConfig 的文档。

>>> from transformers import HeliumModel, HeliumConfig
>>> # Initializing a Helium 2b style configuration
>>> configuration = HeliumConfig()
>>> # Initializing a model from the Helium 2b style configuration
>>> model = HeliumModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config

HeliumModel

class transformers.HeliumModel

< >

( config: HeliumConfig )

参数

  • config (HeliumConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。请查看 from_pretrained() 方法来加载模型权重。
  • config — HeliumConfig

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

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

config.num_hidden_layers 层组成的 Transformer 解码器。每层都是一个 HeliumDecoderLayer

forward(前向传播)

< >

( input_ids: LongTensor = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[transformers.cache_utils.Cache] = 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 **flash_attn_kwargs: typing_extensions.Unpack[transformers.modeling_flash_attention_utils.FlashAttentionKwargs] )

参数

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

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

    什么是输入 IDs?

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

    • 1 表示 token 未被 Mask
    • 0 表示 token 已被 Mask

    什么是 attention masks?

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

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

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

    • 1 表示 head 未被 Mask
    • 0 表示 head 已被 Mask
  • position_ids (形状为 (batch_size, sequence_length)torch.LongTensor, 可选) — 每个输入序列 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 缓存指南
    • 长度为 config.n_layerstuple(tuple(torch.FloatTensor)) 元组,其中每个元组具有 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量。这也称为旧版缓存格式。

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

    如果使用 past_key_values,用户可以选择仅输入最后的 input_ids(那些没有将其过去的键值状态提供给此模型的 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, 可选) — 是否返回所有 attention 层的 attentions 张量。 有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通的元组。
  • cache_position (形状为 (sequence_length)torch.LongTensor, 可选) — 描述输入序列 tokens 在序列中位置的索引。 与 position_ids 相反,此张量不受 padding 的影响。 它用于在正确的位置更新缓存并推断完整的序列长度。

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

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

HeliumForCausalLM

class transformers.HeliumForCausalLM

< >

( config: HeliumConfig )

forward(前向传播)

< >

( input_ids: 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 cache_position: typing.Optional[torch.LongTensor] = None logits_to_keep: typing.Union[int, torch.Tensor] = 0 **kwargs: typing_extensions.Unpack[transformers.models.helium.modeling_helium.KwargsForCausalLM] ) transformers.modeling_outputs.CausalLMOutputWithPasttuple(torch.FloatTensor)

参数

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

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

    什么是输入 IDs?

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

    • 1 表示 token 未被 Mask
    • 0 表示 token 已被 Mask

    什么是 attention masks?

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

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

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

    • 1 表示 head 未被 Mask
    • 0 表示 head 已被 Mask
  • position_ids (形状为 (batch_size, sequence_length)torch.LongTensor, 可选) — 每个输入序列 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 缓存指南
    • 长度为 config.n_layerstuple(tuple(torch.FloatTensor)) 元组,其中每个元组具有 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量。这也称为旧版缓存格式。

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

    如果使用 past_key_values,用户可以选择仅输入最后的 input_ids(那些没有将其过去的键值状态提供给此模型的 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, optional) — 如果设置为 True,则返回 past_key_values 键值状态,并可用于加速解码(请参阅 past_key_values)。
  • output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。 有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是普通元组。
  • cache_position (torch.LongTensor of shape (sequence_length), optional) — 索引,描述输入序列 tokens 在序列中的位置。 与 position_ids 相反,此张量不受填充的影响。 它用于在正确的位置更新缓存,并推断完整的序列长度。
  • labels (torch.LongTensor of shape (batch_size, sequence_length), optional) — 用于计算掩码语言建模损失的标签。 索引应为 [0, ..., config.vocab_size] 或 -100(请参阅 input_ids 文档字符串)。 索引设置为 -100 的 tokens 将被忽略(掩码),损失仅针对标签在 [0, ..., config.vocab_size] 中的 tokens 计算。
  • logits_to_keep (inttorch.Tensor, optional) — 如果是 int,则计算最后 logits_to_keep 个 tokens 的 logits。 如果为 0,则计算所有 input_ids 的 logits(特殊情况)。 仅生成最后一个 token 的 logits 是必需的,并且仅为该 token 计算它们可以节省内存,这对于长序列或大型词汇表大小而言变得非常重要。 如果是 torch.Tensor,则必须是与序列长度维度中要保留的索引相对应的 1D 张量。 这在使用打包张量格式(批次和序列长度的单个维度)时很有用。

Returns

transformers.modeling_outputs.CausalLMOutputWithPasttuple(torch.FloatTensor)

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

  • loss (torch.FloatTensor of shape (1,), optional, 当提供 labels 时返回) — 语言建模损失(用于下一个 token 预测)。

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

  • past_key_values (tuple(tuple(torch.FloatTensor)), optional, 当传递 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), optional, 当传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — torch.FloatTensor 元组(如果模型具有嵌入层,则为嵌入输出一个,加上每层输出一个),形状为 (batch_size, sequence_length, hidden_size)

    模型在每层输出端的隐藏状态,加上可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor), optional, 当传递 output_attentions=True 或当 config.output_attentions=True 时返回) — torch.FloatTensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

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

HeliumForCausalLM 前向方法,覆盖了 __call__ 特殊方法。

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

Example

>>> from transformers import AutoTokenizer, HeliumForCausalLM

>>> model = HeliumForCausalLM.from_pretrained("google/helium-7b")
>>> tokenizer = AutoTokenizer.from_pretrained("google/helium-7b")

>>> prompt = "What is your favorite condiment?"
>>> 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]
"What is your favorite condiment?"

HeliumForSequenceClassification

class transformers.HeliumForSequenceClassification

< >

( config: HeliumConfig )

参数

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

Helium 模型转换器,顶部带有一个序列分类头(线性层)。

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

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

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

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

forward(前向传播)

< >

( 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 of shape (batch_size, sequence_length)) — 词汇表中输入序列 tokens 的索引。 如果您提供填充,默认情况下将忽略填充。

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

    什么是输入 IDs?

  • attention_mask (torch.Tensor of shape (batch_size, sequence_length), optional) — 掩码,以避免对填充 token 索引执行注意力机制。 在 [0, 1] 中选择的掩码值:

    • 1 表示 未被掩码 的 tokens,
    • 0 表示 被掩码 的 tokens。

    什么是注意力掩码?

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

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

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

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

    什么是位置 IDs?

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

    允许两种格式:

    • Cache 实例,请参阅我们的 kv 缓存指南
    • 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 (torch.FloatTensor of shape (batch_size, sequence_length, hidden_size), optional) — (可选)您可以选择直接传递嵌入表示,而不是传递 input_ids。 如果您希望比模型的内部嵌入查找矩阵更精细地控制如何将 input_ids 索引转换为关联的向量,这将非常有用。
  • use_cache (bool, optional) — 如果设置为 True,则返回 past_key_values 键值状态,并可用于加速解码(请参阅 past_key_values)。
  • output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。 有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是普通元组。
  • cache_position (torch.LongTensor,形状为 (sequence_length)可选) — 索引,描述输入序列 tokens 在序列中的位置。与 position_ids 相反,此张量不受 padding 的影响。它用于在正确的位置更新缓存,并推断完整的序列长度。
  • labels (torch.LongTensor,形状为 (batch_size,)可选) — 用于计算序列分类/回归损失的标签。索引应在 [0, ..., config.num_labels - 1] 中。如果 config.num_labels == 1,则计算回归损失(均方误差损失);如果 config.num_labels > 1,则计算分类损失(交叉熵损失)。

HeliumForSequenceClassificationforward 方法,覆盖了 __call__ 特殊方法。

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

HeliumForTokenClassification

class transformers.HeliumForTokenClassification

< >

( config: HeliumConfig )

参数

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

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

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

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

forward(前向传播)

< >

( 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 (torch.LongTensor,形状为 (batch_size, sequence_length)) — 词汇表中输入序列 tokens 的索引。默认情况下,如果您提供 padding,则会忽略它。

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

    什么是输入 IDs?

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

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

    什么是 attention 掩码?

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

    如果使用 past_key_values,则可以选择仅输入最后一个 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)可选) — 位置嵌入中每个输入序列 token 的位置索引。在范围 [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(tuple(torch.FloatTensor)) 元组,每个元组具有 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量。这也称为旧版缓存格式。

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

    如果使用 past_key_values,则用户可以选择仅输入最后一个 input_ids(那些没有将其过去的键值状态提供给此模型的 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
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是纯元组。
  • cache_position (torch.LongTensor,形状为 (sequence_length)可选) — 索引,描述输入序列 tokens 在序列中的位置。与 position_ids 相反,此张量不受 padding 的影响。它用于在正确的位置更新缓存,并推断完整的序列长度。
  • labels (torch.LongTensor,形状为 (batch_size,)可选) — 用于计算 token 分类/回归损失的标签。索引应在 [0, ..., config.num_labels - 1] 中。如果 config.num_labels == 1,则计算回归损失(均方误差损失);如果 config.num_labels > 1,则计算分类损失(交叉熵损失)。

Returns

transformers.modeling_outputs.TokenClassifierOutputtuple(torch.FloatTensor)

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

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

  • logits (torch.FloatTensor,形状为 (batch_size, sequence_length, config.num_labels)) — 分类分数(在 SoftMax 之前)。

  • hidden_states (tuple(torch.FloatTensor), optional, 当传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — torch.FloatTensor 元组(如果模型具有嵌入层,则为嵌入输出一个,加上每层输出一个),形状为 (batch_size, sequence_length, hidden_size)

    模型在每层输出端的隐藏状态,加上可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor), optional, 当传递 output_attentions=True 或当 config.output_attentions=True 时返回) — torch.FloatTensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

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

HeliumForTokenClassificationforward 方法,覆盖了 __call__ 特殊方法。

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

Example

>>> from transformers import AutoTokenizer, HeliumForTokenClassification
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("google/helium-7b")
>>> model = HeliumForTokenClassification.from_pretrained("google/helium-7b")

>>> 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 上更新