Transformers 文档

CodeGen

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

CodeGen

PyTorch

概述

CodeGen 模型由 Erik Nijkamp、Bo Pang、Hiroaki Hayashi、Lifu Tu、Huan Wang、Yingbo Zhou、Silvio Savarese 和 Caiming Xiong 在论文 《一种面向程序合成的对话范式》(A Conversational Paradigm for Program Synthesis) 中提出。

CodeGen 是一个用于程序合成的自回归语言模型,它依次在 The Pile、BigQuery 和 BigPython 数据集上进行训练。

论文摘要如下:

程序合成致力于为给定的问题规范生成一个计算机程序作为解决方案。我们提出了一种通过大型语言模型实现的对话式程序合成方法,该方法解决了先前方法中面临的在庞大程序空间中搜索和用户意图规范的挑战。我们的新方法将编写规范和程序的过程视为用户与系统之间的多轮对话。它将程序合成视为一个序列预测问题,其中规范以自然语言表达,期望的程序则被条件性地采样生成。我们训练了一系列名为 CodeGen 的大型语言模型,使用了自然语言和编程语言数据。通过数据中的弱监督以及数据规模和模型规模的扩大,简单的自回归语言模型涌现出了对话能力。为了研究模型在对话式程序合成中的行为,我们开发了一个多轮编程基准测试(MTPB),其中解决每个问题都需要通过用户与模型之间的多轮对话进行多步合成。我们的研究结果显示了对话能力的涌现以及所提出的对话式程序合成范式的有效性。此外,我们的模型 CodeGen(在 TPU-v4 上训练,参数量高达 160 亿)在 HumanEval 基准测试上超过了 OpenAI 的 Codex。我们开源了训练库 JaxFormer 及其检查点:此 https URL

该模型由 Hiroaki Hayashi 贡献。原始代码可以在此处找到。

检查点命名

  • CodeGen 模型的检查点基于不同规模和不同预训练数据提供。
  • 命名格式为:Salesforce/codegen-{size}-{data},其中:
    • size: 350M2B6B16B
    • data:
      • nl: 在 The Pile 数据集上预训练
      • multi: 使用 nl 初始化,然后在多编程语言数据上进一步预训练
      • mono: 使用 multi 初始化,然后在 Python 数据上进一步预训练
  • 例如,Salesforce/codegen-350M-mono 提供了一个 3.5 亿参数的检查点,该检查点依次在 The Pile、多种编程语言和 Python 数据集上进行了预训练。

使用示例

>>> from transformers import AutoModelForCausalLM, AutoTokenizer

>>> checkpoint = "Salesforce/codegen-350M-mono"
>>> model = AutoModelForCausalLM.from_pretrained(checkpoint)
>>> tokenizer = AutoTokenizer.from_pretrained(checkpoint)

>>> text = "def hello_world():"

>>> completion = model.generate(**tokenizer(text, return_tensors="pt"))

>>> print(tokenizer.decode(completion[0]))
def hello_world():
    print("Hello World")

hello_world()

资源

CodeGenConfig

class transformers.CodeGenConfig

< >

( vocab_size = 50400 n_positions = 2048 n_ctx = 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) — CodeGen 模型的词汇表大小。定义了调用 CodeGenModel 时传入的 inputs_ids 可以表示的不同标记的数量。
  • n_positions (int, 可选, 默认为 2048) — 此模型可能使用的最大序列长度。通常将其设置为一个较大的值以备不时之需(例如,512、1024 或 2048)。
  • n_ctx (int, 可选, 默认为 2048) — 此属性在 `CodeGenModel.__init__` 中使用,但没有实际效果。
  • n_embd (int, 可选, 默认为 4096) — 嵌入和隐藏状态的维度。
  • n_layer (int, 可选, 默认为 28) — Transformer 编码器中的隐藏层数量。
  • n_head (int, 可选, 默认为 16) — Transformer 编码器中每个注意力层的注意力头数量。
  • rotary_dim (int, 可选, 默认为 64) — 应用旋转位置嵌入(Rotary Position Embedding)的嵌入维度数量。
  • n_inner (int, 可选) — 内部前馈层的维度。如果为 `None`,则将设置为 n_embd 的 4 倍。
  • activation_function (str, 可选, 默认为 "gelu_new") — 激活函数,可选列表为 `["relu", "silu", "gelu", "tanh", "gelu_new"]`。
  • resid_pdrop (float, 可选, 默认为 0.0) — 嵌入、编码器和池化器中所有全连接层的 dropout 概率。
  • embd_pdrop (int, 可选, 默认为 0.0) — 嵌入层的 dropout 比率。
  • attn_pdrop (float, 可选, 默认为 0.0) — 注意力层的 dropout 比率。
  • layer_norm_epsilon (float, 可选, 默认为 1e-05) — 层归一化层中使用的 epsilon 值。
  • initializer_range (float, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • use_cache (bool, 可选, 默认为 `True`) — 模型是否应返回最后一个键/值注意力(并非所有模型都使用)。
  • bos_token_id (int, 可选, 默认为 50256) — 序列开始标记的 ID。
  • eos_token_id (int, 可选, 默认为 50256) — 序列结束标记的 ID。
  • tie_word_embeddings (bool, 可选, 默认为 `False`) — 模型的输入和输出词嵌入是否应该绑定。注意,这仅在模型具有输出词嵌入层时才相关。

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

示例

>>> from transformers import CodeGenConfig, CodeGenModel

>>> # Initializing a CodeGen 6B configuration
>>> configuration = CodeGenConfig()

>>> # Initializing a model (with random weights) from the configuration
>>> model = CodeGenModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

CodeGenTokenizer

class transformers.CodeGenTokenizer

< >

( vocab_file merges_file errors = 'replace' unk_token = '<|endoftext|>' bos_token = '<|endoftext|>' eos_token = '<|endoftext|>' pad_token = None add_prefix_space = False add_bos_token = False return_token_type_ids = False **kwargs )

参数

  • vocab_file (str) — 词汇文件的路径。
  • merges_file (str) — 合并文件的路径。
  • errors (str, 可选, 默认为 "replace") — 解码字节为 UTF-8 时遵循的范式。有关更多信息,请参阅 bytes.decode
  • unk_token (str, 可选, 默认为 "<|endoftext|>") — 未知标记(token)。词汇表中不存在的标记无法转换为 ID,将被设置为此标记。
  • bos_token (str, 可选, 默认为 "<|endoftext|>") — 序列开始标记。
  • eos_token (str, 可选, 默认为 "<|endoftext|>") — 序列结束标记。
  • pad_token (str, 可选) — 用于填充的标记,例如在批处理不同长度的序列时使用。
  • add_prefix_space (bool, 可选, 默认为 False) — 是否在输入前添加一个初始空格。这使得开头的词可以像其他词一样被处理。(CodeGen 分词器通过前面的空格来检测词的开头)。
  • add_bos_token (bool, 可选, 默认为 False) — 是否在序列开头添加序列开始标记。
  • return_token_type_ids (bool, 可选, 默认为 False) — 是否返回标记类型 ID。

构建一个 CodeGen 分词器。基于字节级的字节对编码(Byte-Pair-Encoding)。

此分词器经过训练,将空格视为标记的一部分(有点像 sentencepiece),因此一个词

无论它是在句子开头(没有空格)还是在其他位置,其编码方式都会有所不同。

>>> from transformers import CodeGenTokenizer

>>> tokenizer = CodeGenTokenizer.from_pretrained("Salesforce/codegen-350M-mono")
>>> tokenizer("Hello world")["input_ids"]
[15496, 995]

>>> tokenizer(" Hello world")["input_ids"]
[18435, 995]

您可以通过在实例化此分词器时或在对某些文本调用它时传递 add_prefix_space=True 来绕过此行为,但由于模型并非以这种方式进行预训练,这可能会导致性能下降。

当与 is_split_into_words=True 一起使用时,此分词器会在每个词(甚至是第一个词)之前添加一个空格。

此分词器继承自 PreTrainedTokenizer,其中包含了大部分主要方法。用户应参考此超类以获取有关这些方法的更多信息。

create_token_type_ids_from_sequences

< >

( token_ids_0: list token_ids_1: typing.Optional[list[int]] = None ) list[int]

参数

  • token_ids_0 (list[int]) — 第一个分词后的序列。
  • token_ids_1 (list[int], 可选) — 第二个分词后的序列。

返回

list[int]

标记类型 ID。

创建与传入序列对应的标记类型 ID。什么是标记类型 ID?

如果模型有特殊的构建方式,应在子类中重写此方法。

save_vocabulary

< >

( save_directory: str filename_prefix: typing.Optional[str] = None )

CodeGenTokenizerFast

class transformers.CodeGenTokenizerFast

< >

( vocab_file = None merges_file = None tokenizer_file = None unk_token = '<|endoftext|>' bos_token = '<|endoftext|>' eos_token = '<|endoftext|>' add_prefix_space = False return_token_type_ids = False **kwargs )

参数

  • vocab_file (str, 可选) — 词汇表文件的路径。
  • merges_file (str, 可选) — 合并文件的路径。
  • tokenizer_file (str, 可选) — tokenizers 文件的路径(通常扩展名为 .json),该文件包含加载分词器所需的所有内容。
  • unk_token (str, 可选, 默认为 "<|endoftext|>") — 未知标记(token)。词汇表中不存在的标记无法转换为 ID,将被设置为此标记。
  • bos_token (str, 可选, 默认为 "<|endoftext|>") — 序列开始标记。
  • eos_token (str, 可选, 默认为 "<|endoftext|>") — 序列结束标记。
  • add_prefix_space (bool, 可选, 默认为 False) — 是否在输入前添加一个初始空格。这使得开头的词可以像其他词一样被处理。(CodeGen 分词器通过前面的空格来检测词的开头)。
  • return_token_type_ids (bool, 可选, 默认为 False) — 是否返回标记类型 ID。

构建一个“快速”的 CodeGen 分词器(由 HuggingFace 的 *tokenizers* 库支持)。基于字节级的字节对编码(Byte-Pair-Encoding)。

此分词器经过训练,将空格视为标记的一部分(有点像 sentencepiece),因此一个词

无论它是在句子开头(没有空格)还是在其他位置,其编码方式都会有所不同。

>>> from transformers import CodeGenTokenizerFast

>>> tokenizer = CodeGenTokenizerFast.from_pretrained("Salesforce/codegen-350M-mono")
>>> tokenizer("Hello world")["input_ids"]
[15496, 995]

>>> tokenizer(" Hello world")["input_ids"]
[18435, 995]

您可以通过在实例化此分词器时传递 add_prefix_space=True 来绕过此行为,但由于模型并非以这种方式进行预训练,这可能会导致性能下降。

当与 is_split_into_words=True 一起使用时,此分词器需要使用 add_prefix_space=True 进行实例化。

此分词器继承自 PreTrainedTokenizerFast,其中包含了大部分主要方法。用户应参考此超类以获取有关这些方法的更多信息。

decode

< >

( token_ids: typing.Union[int, list[int], ForwardRef('np.ndarray'), ForwardRef('torch.Tensor'), ForwardRef('tf.Tensor')] skip_special_tokens: bool = False clean_up_tokenization_spaces: typing.Optional[bool] = None truncate_before_pattern: typing.Optional[list[str]] = None **kwargs ) str

参数

  • token_ids (Union[int, List[int], np.ndarray, torch.Tensor, tf.Tensor]) — 分词后的输入 ID 列表。可以使用 __call__ 方法获得。
  • skip_special_tokens (bool, 可选, 默认为 False) — 是否在解码时移除特殊标记。
  • clean_up_tokenization_spaces (bool, 可选) — 是否清理分词产生的空格。如果为 None,则默认为 self.clean_up_tokenization_spaces(可在 tokenizer_config 中设置)。
  • truncate_before_pattern (List[str], 可选, 默认为 None) — 一个正则表达式字符串列表,将用于截断返回的字符串。这可以用于移除多余的代码片段(例如,如果在换行符开头观察到注释符号“#”则截断)。一个示例模式可以是 `[”^#”, re.escape(”<|endoftext|>”), ”^'''”, ”

返回

字符串

解码后的句子。

使用分词器和词汇表将 ID 序列转换为字符串,可以选择移除特殊标记并清理分词空间。

类似于执行 self.convert_tokens_to_string(self.convert_ids_to_tokens(token_ids))

”]`. kwargs (额外的关键字参数, 可选): 将传递给底层模型特定的解码方法。

CodeGenModel

class transformers.CodeGenModel

< >

( config )

参数

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

裸的 Codegen 模型,输出原始的隐藏状态,顶部没有任何特定的头部。

此模型继承自 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 **kwargs ) transformers.modeling_outputs.BaseModelOutputWithPasttuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 词汇表中输入序列标记的索引。默认情况下,填充将被忽略。

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

    什么是 input IDs?

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

    允许两种格式:

    • 一个 Cache 实例,请参阅我们的 KV 缓存指南
    • 一个长度为 config.n_layerstuple(torch.FloatTensor) 元组,每个元组有两个形状为 (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

  • 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* 的标记。

    什么是标记类型 ID?

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

    什么是位置 ID?

  • 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.BaseModelOutputWithPasttuple(torch.FloatTensor)

一个 transformers.modeling_outputs.BaseModelOutputWithPast 或一个 `torch.FloatTensor` 的元组(如果传递了 `return_dict=False` 或当 `config.return_dict=False` 时),根据配置(CodeGenConfig)和输入包含各种元素。

  • 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 缓存指南

    包含预计算的隐藏状态(自注意力块中的键和值,如果 `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 后的注意力权重,用于计算自注意力头中的加权平均值。

CodeGenModel 的 forward 方法覆盖了 `__call__` 特殊方法。

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

CodeGenForCausalLM

class transformers.CodeGenForCausalLM

< >

( config )

参数

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

CodeGen 模型转换器,顶部带有一个语言建模头。

此模型继承自 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.CausalLMOutputWithPasttuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 词汇表中输入序列标记的索引。默认情况下,填充将被忽略。

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

    什么是 input IDs?

  • past_key_values (Union[~cache_utils.Cache, tuple[tuple[torch.Tensor]], NoneType]) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常包含在解码的前一阶段,当 use_cache=Trueconfig.use_cache=True 时,由模型返回的 past_key_values

    允许两种格式:

    • 一个 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(那些没有将其过去键值状态提供给此模型的输入),其形状为 (batch_size, 1),而不是所有形状为 (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 的标记。

    什么是标记类型 ID?

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

    什么是位置 ID?

  • 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.CausalLMOutputWithPasttuple(torch.FloatTensor)

一个 transformers.modeling_outputs.CausalLMOutputWithPast 或一个 torch.FloatTensor 元组(如果传递了 return_dict=Falseconfig.return_dict=False),根据配置 (CodeGenConfig) 和输入包含不同的元素。

  • 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 缓存指南

    包含预计算的隐藏状态(自注意力块中的键和值),可用于(参见 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 后的注意力权重,用于计算自注意力头中的加权平均值。

CodeGenForCausalLM 的前向方法覆盖了 __call__ 特殊方法。

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

示例

< > 在 GitHub 上更新