Transformers documentation

XGLM

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

该模型于 2021-12-20 在 HF papers 上发布,并于 2022-01-28 贡献至 Hugging Face Transformers。

XGLM

概述

XGLM 模型由 Xi Victoria Lin、Todor Mihaylov、Mikel Artetxe、Tianlu Wang、Shuohui Chen、Daniel Simig、Myle Ott、Naman Goyal、Shruti Bhosale、Jingfei Du、Ramakanth Pasunuru、Sam Shleifer、Punit Singh Koura、Vishrav Chaudhary、Brian O’Horo、Jeff Wang、Luke Zettlemoyer、Zornitsa Kozareva、Mona Diab、Veselin Stoyanov 和 Xian Li 在 Few-shot Learning with Multilingual Language Models 中提出。

该论文的摘要如下:

诸如 GPT-3 这样的大规模自回归语言模型是少样本学习者,无需微调即可执行多种语言任务。虽然已知这些模型能够联合表示许多不同的语言,但其训练数据以英语为主,这可能会限制其跨语言泛化能力。在本工作中,我们在一个涵盖多种语言的平衡语料库上训练了多语言自回归语言模型,并研究了它们在广泛任务中的少样本和零样本学习能力。我们最大的模型拥有 75 亿参数,在 20 多种代表性语言的少样本学习中取得了新的最先进水平,在可比规模下超越了 GPT-3,在多语言常识推理(在 0-shot 设置中绝对准确率提升 7.4%,在 4-shot 设置中提升 9.4%)和自然语言推理(在 0-shot 和 4-shot 设置中各提升 5.4%)方面表现更优。在 FLORES-101 机器翻译基准测试中,使用 32 个训练样本,我们的模型在 182 个翻译方向中的 171 个上优于 GPT-3,并在 45 个方向上超过了官方的有监督基线。我们详细分析了模型成功和失败的地方,特别指出它在某些任务上实现了跨语言上下文学习,但在表面形式鲁棒性以及适应没有自然完形填空形式的任务方面仍有改进空间。最后,我们在五种语言的仇恨言论检测等社会价值任务中评估了我们的模型,发现其局限性类似于同等规模的 GPT-3 模型。

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

资源

XGLMConfig

类 transformers.XGLMConfig

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevocab_size: int = 256008max_position_embeddings: int = 2048d_model: int = 1024ffn_dim: int = 4096num_layers: int = 24attention_heads: int = 16activation_function: str = 'gelu'dropout: float | int = 0.1attention_dropout: float | int = 0.1activation_dropout: float | int = 0.0layerdrop: float | int = 0.0init_std: float = 0.02scale_embedding: bool = Trueuse_cache: bool = Truedecoder_start_token_id: int = 2pad_token_id: int | None = 1bos_token_id: int | None = 0eos_token_id: int | list[int] | None = 2add_cross_attention: bool = Falsetie_word_embeddings: bool = True )

参数

  • vocab_size (int,可选,默认为 256008) — 模型的词汇表大小。定义了 input_ids 可以表示的不同 token 数量。
  • max_position_embeddings (int,可选,默认为 2048) — 该模型可能使用的最大序列长度。
  • d_model (int,可选,默认为 1024) — 编码器层和池化层的维度大小。
  • ffn_dim (int,可选,默认为 4096) — MLP 表示的维度。
  • num_layers (int,可选,默认为 24) — Transformer 解码器中的隐藏层数量。
  • attention_heads (int, 可选,默认为 16) — Transformer 解码器中每个注意力层的注意力头数量。
  • activation_function (str,可选,默认为 gelu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu"、"relu"、"silu" 等。
  • dropout (Union[float, int],可选,默认为 0.1) — 所有 dropout 层的比率。
  • attention_dropout (Union[float, int],可选,默认为 0.1) — 注意力概率的 dropout 比率。
  • activation_dropout (Union[float, int],可选,默认为 0.0) — 全连接层中激活值的 dropout 比率。
  • layerdrop (Union[float, int],可选,默认为 0.0) — LayerDrop 概率。有关更多详细信息,请参阅 [LayerDrop 论文](见 https://huggingface.co/papers/1909.11556)。
  • init_std (float,可选,默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • scale_embedding (bool,可选,默认为 True) — 是否通过将嵌入除以 sqrt(d_model) 来对嵌入进行缩放。
  • use_cache (bool,可选,默认为 True) — 模型是否应返回最后一次键/值注意力(并非所有模型都使用)。仅当 config.is_decoder=True 或模型为仅解码器生成式模型时相关。
  • decoder_start_token_id (int,可选,默认为 2) — 如果编码器-解码器模型使用不同于 bos 的 token 开始解码,则指定该 token 的 id。
  • pad_token_id (int,可选,默认为 1) — 词表中用于填充的 token id。
  • bos_token_id (int,可选,默认为 0) — 词汇表中用于表示流起始的 Token id。
  • eos_token_id (Union[int, list[int]],可选,默认为 2) — 词汇表中用于表示流结束(end-of-stream)的 token id。
  • add_cross_attention (bool,可选,默认为 False) — 是否应在模型中添加交叉注意力层。
  • tie_word_embeddings (bool,可选,默认为 True) — 是否根据模型的 tied_weights_keys 映射来绑定权重嵌入。

这是用于存储 XGLMModel 配置的类。它根据指定的参数实例化 Xglm 模型,并定义模型架构。使用默认值实例化配置将生成与 facebook/xglm-564M 类似的配置。

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

示例:

>>> from transformers import XGLMModel, XGLMConfig

>>> # Initializing a XGLM facebook/xglm-564M style configuration
>>> configuration = XGLMConfig()

>>> # Initializing a model from the facebook/xglm-564M style configuration
>>> model = XGLMModel(configuration)

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

XGLMTokenizer

class transformers.XGLMTokenizer

< >

( vocab: str | list[tuple[str, float]] | None = Nonebos_token: str = '<s>'eos_token: str = '</s>'sep_token: str = '</s>'cls_token: str = '<s>'unk_token: str = '<unk>'pad_token: str = '<pad>'_spm_precompiled_charsmap: str | None = Noneadd_prefix_space: bool = True**kwargs )

参数

  • tokenizer_file (str, 可选) — 指向包含分词器序列化内容的 tokenizers JSON 文件的路径。
  • bos_token (str,可选,默认为 "<s>") — 预训练期间使用的序列起始标记。可用作序列分类器标记。
  • eos_token (str,可选,默认为 "</s>") — 序列结束标记。
  • sep_token (str,可选,默认为 "</s>") — 分隔符 token,用于将多个序列构建为一个序列时。
  • cls_token (str,可选,默认为 "<s>") — 用于执行序列分类时的分类器标记。
  • unk_token (str,可选,默认为 "<unk>") — 未知标记。
  • pad_token (str,可选,默认为 "<pad>") — 用于填充的标记。
  • vocab (str、dict 或 list,可选) — 自定义词汇表。如果未提供,将创建一个最小词汇表。
  • merges (list[tuple[str, str]],可选) — BPE 的自定义合并规则。如果未提供,则从词汇表中生成合并规则。
  • add_prefix_space (bool,可选,默认为 True) — 是否在编码前添加前导空格。

构建一个 XGLM 分词器(基于 HuggingFace 的 tokenizers 库)。基于 BPE。

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

get_special_tokens_mask

< >

( token_ids_0: list[int]token_ids_1: list[int] | None = Nonealready_has_special_tokens: bool = False ) → A list of integers in the range [0, 1]

参数

  • token_ids_0 — (可能已格式化的)序列的 ID 列表。
  • token_ids_1 — 当 already_has_special_tokens=True 时未使用。在这种情况下,该值必须为 None。
  • already_has_special_tokens — 序列是否已使用特殊标记进行格式化。

返回值

一个取值范围为 [0, 1] 的整数列表

1 表示特殊标记,0 表示序列标记。

从未添加特殊标记的标记列表中检索序列 ID。

对于快速分词器,数据整理器会传入 already_has_special_tokens=True 来调用此方法,以在已格式化的序列上构建掩码。在这种情况下,我们通过检查元素是否属于 all_special_ids 来计算掩码。

save_vocabulary

< >

( save_directory: strfilename_prefix: str | None = None )

XGLMModel

class transformers.XGLMModel

< >

( config: XGLMConfig )

参数

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

未添加任何特定头部的裸 Xglm 模型,输出原始隐藏状态。

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

该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。

forward

< >

( input_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Noneencoder_hidden_states: typing.Optional[torch.Tensor] = Noneencoder_attention_mask: typing.Optional[torch.Tensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPastAndCrossAttentions or tuple(torch.Tensor)

参数

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

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

    什么是输入 ID?

  • attention_mask (torch.Tensor 形状为 (batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自 [0, 1]:
    • 1 表示未被屏蔽的 token,
    • 对于被掩码的 token,值为 0。

    什么是注意力掩码?

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

    什么是位置 ID?

  • encoder_hidden_states (torch.Tensor,形状为 (batch_size, encoder_sequence_length, hidden_size),可选) — 编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力机制。
  • encoder_attention_mask (torch.LongTensor 形状为 (batch_size, encoder_sequence_length), 可选) — 用于避免对 encoder input_ids 中填充 token 的索引执行交叉注意力的掩码。掩码值在 [0, 1]:
    • 1 表示未被屏蔽的 token,
    • 对于被掩码的 token,值为 0。

    什么是注意力掩码?

  • past_key_values (~cache_utils.Cache, 可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常由 past_key_values 在解码的先前阶段返回,当 use_cache=True 或 config.use_cache=True.

    仅允许将 Cache 实例作为输入,请参阅我们的 kv cache 指南。 如果未传入 past_key_values,则默认会初始化 DynamicCache。

    模型将输出与输入相同的缓存格式。

    如果使用了 past_key_values,用户应仅输入未处理的 input_ids(即未向该模型提供其过去键值状态的那些),其形状为 (batch_size, unprocessed_length),而不是形状为 (batch_size, sequence_length) 的全部 input_ids。

  • inputs_embeds(形状为 (batch_size, sequence_length, hidden_size) 的 torch.Tensor,可选) — 可选地,您可以选择直接传入嵌入表示,而不是传入 input_ids。如果您希望对 input_ids 索引如何转换为相应向量拥有比模型内部嵌入查找矩阵更多的控制权,这将非常有用。
  • use_cache (bool,可选) — 如果设置为 True,则会返回 past_key_values 键值状态,可用于加速解码(参见 past_key_values)。

返回值

BaseModelOutputWithPastAndCrossAttentions 或 tuple(torch.Tensor)

一个 BaseModelOutputWithPastAndCrossAttentions 或 torch.Tensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(XGLMConfig)和输入。

XGLMModel 的 forward 方法重写了 __call__ 特殊方法。

尽管前向传播的实现需要在此函数中定义,但之后应调用 Module 实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。

  • last_hidden_state(形状为 (batch_size, sequence_length, hidden_size) 的 torch.Tensor)— 模型最后一层输出的隐藏状态序列。

    如果使用了 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.Tensor),可选,当传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.Tensor 元组(如果模型具有嵌入层,则包含嵌入层的输出,以及每一层的输出),形状为 (batch_size, sequence_length, hidden_size)。

    模型在每一层输出处的隐藏状态,以及可选的初始嵌入输出。

  • attentions (tuple(torch.Tensor),可选,当传入 output_attentions=True 或 config.output_attentions=True 时返回) — 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

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

  • cross_attentions (tuple(torch.Tensor),可选,当传入 output_attentions=True 且 config.add_cross_attention=True,或当 config.output_attentions=True 时返回) — 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

    解码器交叉注意力层在注意力 softmax 之后的注意力权重,用于在交叉注意力头中计算加权平均值。

XGLMForCausalLM

class transformers.XGLMForCausalLM

< >

( config: XGLMConfig )

参数

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

XGLM 模型,在 Transformer 之上添加了一个语言建模头(一个线性层,其权重与输入嵌入共享)。

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

该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。

forward

< >

( input_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Noneencoder_hidden_states: typing.Optional[torch.Tensor] = Noneencoder_attention_mask: typing.Optional[torch.Tensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = Nonelogits_to_keep: typing.Union[int, torch.Tensor] = 0**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → CausalLMOutputWithCrossAttentions or tuple(torch.Tensor)

参数

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

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

    什么是输入 ID?

  • attention_mask (torch.Tensor 形状为 (batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自 [0, 1]:
    • 1 表示未被屏蔽的 token,
    • 对于被掩码的 token,值为 0。

    什么是注意力掩码?

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

    什么是位置 ID?

  • encoder_hidden_states (torch.Tensor,形状为 (batch_size, encoder_sequence_length, hidden_size),可选) — 编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力机制。
  • encoder_attention_mask (torch.LongTensor 形状为 (batch_size, encoder_sequence_length), 可选) — 用于避免对 encoder input_ids 中填充 token 的索引执行交叉注意力的掩码。掩码值在 [0, 1]:
    • 1 表示未被屏蔽的 token,
    • 对于被掩码的 token,值为 0。

    什么是注意力掩码?

  • past_key_values (~cache_utils.Cache, 可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常由 past_key_values 在解码的先前阶段返回,当 use_cache=True 或 config.use_cache=True.

    仅允许将 Cache 实例作为输入,请参阅我们的 kv cache 指南。 如果未传入 past_key_values,则默认会初始化 DynamicCache。

    模型将输出与输入相同的缓存格式。

    如果使用了 past_key_values,用户应仅输入未处理的 input_ids(即未向该模型提供其过去键值状态的那些),其形状为 (batch_size, unprocessed_length),而不是形状为 (batch_size, sequence_length) 的全部 input_ids。

  • inputs_embeds(形状为 (batch_size, sequence_length, hidden_size) 的 torch.Tensor,可选) — 可选地,您可以选择直接传入嵌入表示,而不是传入 input_ids。如果您希望对 input_ids 索引如何转换为相应向量拥有比模型内部嵌入查找矩阵更多的控制权,这将非常有用。
  • labels (torch.LongTensor,形状为 (batch_size, sequence_length),可选) — 用于计算掩码语言建模损失的标签。索引值应在 [0, ..., config.vocab_size] 范围内,或为 -100(参见 input_ids 的文档字符串)。索引值设为 -100 的 token 将被忽略(即被掩码),损失仅针对标签位于 [0, ..., config.vocab_size] 范围内的 token 进行计算。
  • use_cache (bool,可选) — 如果设置为 True,则会返回 past_key_values 键值状态,可用于加速解码(参见 past_key_values)。
  • logits_to_keep (Union[int, torch.Tensor], 可选,默认为 0) — 如果为 int,则计算最后 logits_to_keep 个 token 的 logits。如果为 0,则计算所有 input_ids 的 logits(特殊情况)。生成过程只需要最后一个 token 的 logits,仅针对该 token 进行计算可以节省内存,对于长序列或大词汇量而言,这种节省相当显著。 如果为 torch.Tensor,则必须是一维张量,对应于序列长度维度中需要保留的索引。 这在使用打包张量格式(将批次和序列长度合并为单一维度)时非常有用。

返回值

CausalLMOutputWithCrossAttentions 或 tuple(torch.Tensor)

一个 CausalLMOutputWithCrossAttentions 或 torch.Tensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(XGLMConfig)和输入。

XGLMForCausalLM 的 forward 方法重写了 __call__ 特殊方法。

尽管前向传播的实现需要在此函数中定义,但之后应调用 Module 实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。

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

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

  • hidden_states (tuple(torch.Tensor),可选,当传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.Tensor 元组(如果模型具有嵌入层,则包含嵌入层的输出,以及每一层的输出),形状为 (batch_size, sequence_length, hidden_size)。

    模型在每一层输出处的隐藏状态,以及可选的初始嵌入输出。

  • attentions (tuple(torch.Tensor),可选,当传入 output_attentions=True 或 config.output_attentions=True 时返回) — 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

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

  • cross_attentions (tuple(torch.Tensor),可选,在传入 output_attentions=True 或 config.output_attentions=True 时返回) — 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

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

  • past_key_values(Cache,可选,在传入 use_cache=True 或 config.use_cache=True 时返回)—— 它是一个 Cache 实例。更多详情,请参阅我们的 kv cache 指南。

    包含预计算的隐藏状态(注意力块中的键和值),可用于(参见 past_key_values 输入)加速顺序解码。

示例:

Update on GitHub