Transformers 文档

GPTSAN-日语

GPTSAN-日语

该模型目前处于维护模式,我们不接受任何更改其代码的新PR。 如果您在运行此模型时遇到任何问题,请重新安装支持此模型的最后一个版本:v4.40.2。 您可以通过运行以下命令来执行此操作:pip install -U transformers==4.40.2

概述

GPTSAN-japanese 模型由 Toshiyuki Sakamoto (tanreinama) 在仓库中发布。

GPTSAN 是一个使用 Switch Transformer 的日语语言模型。它具有与 T5 论文中介绍的 Prefix LM 模型相同的结构,并支持文本生成和掩码语言建模任务。这些基本任务同样可以用于翻译或摘要的微调。

使用示例

可以使用generate()方法通过GPTSAN-Japanese模型生成文本。

>>> from transformers import AutoModel, AutoTokenizer
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("Tanrei/GPTSAN-japanese")
>>> model = AutoModel.from_pretrained("Tanrei/GPTSAN-japanese").cuda()
>>> x_tok = tokenizer("は、", prefix_text="織田信長", return_tensors="pt")
>>> torch.manual_seed(0)
>>> gen_tok = model.generate(x_tok.input_ids.cuda(), token_type_ids=x_tok.token_type_ids.cuda(), max_new_tokens=20)
>>> tokenizer.decode(gen_tok[0])
'織田信長は、2004年に『戦国BASARA』のために、豊臣秀吉'

GPTSAN 特性

GPTSAN 具有一些独特的功能。它采用了 Prefix-LM 的模型结构。对于前缀输入标记,它作为移位的掩码语言模型工作。无前缀输入则表现得像普通的生成模型。 Spout 向量是 GPTSAN 特有的输入。Spout 使用随机输入进行预训练,但在微调期间,您可以指定文本类别或任意向量。这使您可以指示生成文本的趋势。 GPTSAN 具有基于 Switch-Transformer 的稀疏前馈网络。您还可以添加其他层并部分训练它们。详情请参阅原始的 GPTSAN 仓库。

前缀-LM 模型

GPTSAN 具有在 T5 论文中名为 Prefix-LM 的模型结构。(原始的 GPTSAN 仓库称之为 hybrid) 在 GPTSAN 中,Prefix-LM 的 Prefix 部分,即可以被两个 token 引用的输入位置,可以指定任意长度。 每个批次也可以指定不同的长度。 此长度适用于在 prefix_text 中输入的文本进行 tokenizer 处理。 tokenizer 返回 Prefix-LM 的 Prefix 部分的掩码作为 token_type_ids。 模型将 token_type_ids 为 1 的部分视为 Prefix 部分,即输入可以引用前后的 token。

使用提示

指定前缀部分是通过传递给自注意力的掩码完成的。 当token_type_ids为None或全为零时,它等同于常规的因果掩码

例如:

x_token = tokenizer(“アイウエ”) input_ids: | SOT | SEG | ア | イ | ウ | エ | token_type_ids: | 1 | 0 | 0 | 0 | 0 | 0 | prefix_lm_mask: SOT | 1 0 0 0 0 0 | SEG | 1 1 0 0 0 0 | ア | 1 1 1 0 0 0 | イ | 1 1 1 1 0 0 | ウ | 1 1 1 1 1 0 | エ | 1 1 1 1 1 1 |

x_token = tokenizer("", prefix_text=“アイウエ”) 输入ID: | SOT | ア | イ | ウ | エ | SEG | 令牌类型ID: | 1 | 1 | 1 | 1 | 1 | 0 | 前缀语言模型掩码: SOT | 1 1 1 1 1 0 | ア | 1 1 1 1 1 0 | イ | 1 1 1 1 1 0 | ウ | 1 1 1 1 1 0 | エ | 1 1 1 1 1 0 | SEG | 1 1 1 1 1 1 |

x_token = tokenizer(“ウエ”, prefix_text=“アイ”) input_ids: | SOT | ア | イ | SEG | ウ | エ | token_type_ids: | 1 | 1 | 1 | 0 | 0 | 0 | prefix_lm_mask: SOT | 1 1 1 0 0 0 | ア | 1 1 1 0 0 0 | イ | 1 1 1 0 0 0 | SEG | 1 1 1 1 0 0 | ウ | 1 1 1 1 1 0 | エ | 1 1 1 1 1 1 |

Spout Vector

Spout Vector 是一种用于控制文本生成的特殊向量。 该向量被视为自注意力机制中的第一个嵌入,以引起对生成标记的额外关注。 在从 Tanrei/GPTSAN-japanese 发布的预训练模型中,Spout Vector 是一个 128 维向量,它通过模型中的 8 个全连接层,并投影到作为外部注意力的空间中。 由全连接层投影的 Spout Vector 被分割以传递给所有自注意力机制。

GPTSanJapaneseConfig

transformers.GPTSanJapaneseConfig

< >

( vocab_size = 36000 max_position_embeddings = 1280 d_model = 1024 d_ff = 8192 d_ext = 4096 d_spout = 128 num_switch_layers = 10 num_ext_layers = 0 num_heads = 16 num_experts = 16 expert_capacity = 128 dropout_rate = 0.0 layer_norm_epsilon = 1e-05 router_bias = False router_jitter_noise = 0.0 router_dtype = 'float32' router_ignore_padding_tokens = False output_hidden_states = False output_attentions = False initializer_factor = 0.002 output_router_logits = False use_cache = True separator_token_id = 35998 pad_token_id = 35995 eos_token_id = 35999 **kwargs )

参数

  • vocab_size (int, 可选, 默认为 36000) — GPTSANJapanese 模型的词汇量大小。定义了调用 GPTSanJapaneseModel 时传递的 inputs_ids 可以表示的不同标记的数量。
  • max_position_embeddings (int, 可选, 默认为 1280) — 此模型可能使用的最大序列长度。默认设置为1280.
  • d_model (int, optional, 默认为 1024) — 编码器层和池化层的大小.
  • d_ff (int, optional, 默认为 8192) — 每个 SwitchTransformersBlock 中中间前馈层的大小.
  • d_ext (int, 可选, 默认为 4096) — 每个额外层中的中间前馈层的大小。
  • d_spout (int, 可选, 默认值为 128) — spout 向量的大小.
  • num_switch_layers (int, 可选, 默认为 10) — Switch Transformer 层中的层数。
  • num_ext_layers (int, optional, 默认为 0) — Extra-layers 中的层数。
  • num_heads (int, 可选, 默认为 16) — Transformer 编码器中每个注意力层的注意力头数。
  • num_experts (int, optional, defaults to 16) — 每个SwitchTransformer层的专家数量。
  • expert_capacity (int, optional, 默认为 128) — 每个专家可以存储的令牌数量。如果设置为1,模型将表现得像一个普通的Transformer。
  • dropout_rate (float, optional, 默认为 0.0) — 所有 dropout 层的比率。
  • layer_norm_eps (float, optional, defaults to 1e-5) — 层归一化层使用的epsilon值。
  • router_bias (bool, optional, defaults to False) — 是否向路由器添加偏置。
  • router_jitter_noise (float, optional, 默认为 0.0) — 添加到路由器的噪声量。在预测时设置为 0.0 或在训练时设置为较小的值(通常为 1e-2)。
  • router_dtype (str, 可选, 默认为 "float32") — 用于路由器的dtype。最好将dtype保持为"float32",如论文中的选择性精度讨论中所指定的那样。
  • router_ignore_padding_tokens (bool, 可选, 默认为 False) — 是否在路由时忽略填充标记。
  • output_hidden_states (bool, 可选, 默认为 False) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的 hidden_states
  • output_attentions (bool, 可选, 默认为 False) — 是否返回所有注意力层的注意力张量。
  • initializer_factor (float, optional, 默认为 0.002) — 用于初始化所有权重矩阵的因子。
  • output_router_logits (bool, optional, default to False) — 是否返回所有专家的路由器logits。
  • use_cache (bool, 可选, 默认为 True) — 模型是否应返回最后的键/值注意力(并非所有模型都使用)

这是用于存储GPTSanJapaneseModel配置的配置类。它用于根据指定的参数实例化GPTSANJapanese模型,定义模型架构。使用默认值实例化配置将产生与GPTSANJapanese Tanrei/GPTSAN-japanese架构类似的配置。

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

GPTSanJapaneseTokenizer

transformers.GPTSanJapaneseTokenizer

< >

( vocab_file emoji_file unk_token = '<|nottoken|>' pad_token = '<|separator|>' bos_token = '<|startoftext|>' eos_token = '<|endoftext|>' sep_token = '<|segmenter|>' do_clean_text = False **kwargs )

参数

  • vocab_file (str) — 包含词汇表的文件。
  • emoji_file (str) — 包含表情符号的文件。
  • unk_token (str, optional, defaults to "<|nottoken|>") — 用于未知字符的令牌
  • pad_token (str, optional, defaults to "<|separator|>") — 用于填充的令牌
  • bos_token (str, optional, defaults to "<|startoftext|>") — 序列的开始标记。
  • eos_token (str, optional, defaults to "<|endoftext|>") — 序列结束标记。
  • sep_token (str, optional, defaults to "<|segmenter|>") — 一个特殊的标记,用于将标记分隔为前缀部分和通用输入部分。
  • do_clean_text (bool, optional, defaults to False) — 是否清理文本中的URL、EMAIL、TEL、日语日期和日语价格。

此分词器基于GPTNeoXJapaneseTokenizer,并进行了以下修改

  • 正确解码byte0~byte255的令牌
  • 添加了bagofword标记处理
  • 返回Prefix-LM模型的token_type_ids bagofword token表示前一个token的重复,并在解码时转换为3个连续的token。此外,原始的日语特殊子词编码已在此仓库中发布 (https://github.com/tanreinama/Japanese-BPEEncoder_V2)。token_type_ids是一个指示Prefix-LM模型前缀输入位置的掩码。要指定前缀位置,请为prefix_text指定前缀输入,或将前缀部分及其后的部分作为批量输入的文本对指定。

示例:

>>> from transformers import GPTSanJapaneseTokenizer

>>> tokenizer = GPTSanJapaneseTokenizer.from_pretrained("Tanrei/GPTSAN-japanese")
>>> # You can confirm both 慶応 and 慶應 are encoded to 17750
>>> tokenizer("吾輩は猫である🐯。実は慶応(慶應)大学出身")["input_ids"]
[35993, 35998, 34347, 31459, 30647, 31448, 25, 30659, 35729, 35676, 32417, 30647, 17750, 35589, 17750, 35590, 321, 1281]

>>> # Both 慶応 and 慶應 are decoded to 慶応
>>> tokenizer.decode(tokenizer("吾輩は猫である🐯。実は慶応(慶應)大学出身")["input_ids"])
'吾輩は猫である🐯。実は慶応(慶応)大学出身'

前缀语言模型示例:

>>> from transformers import GPTSanJapaneseTokenizer

>>> tokenizer = GPTSanJapaneseTokenizer.from_pretrained("Tanrei/GPTSAN-japanese")
>>> tokenizer("実は慶応(慶應)大学出身", prefix_text="吾輩は猫である🐯。")["input_ids"]
[35993, 34347, 31459, 30647, 31448, 25, 30659, 35729, 35676, 35998, 32417, 30647, 17750, 35589, 17750, 35590, 321, 1281]

>>> # Mask for Prefix-LM inputs
>>> tokenizer("実は慶応(慶應)大学出身", prefix_text="吾輩は猫である🐯。")["token_type_ids"]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]

批量编码示例:

>>> from transformers import GPTSanJapaneseTokenizer

>>> tokenizer = GPTSanJapaneseTokenizer.from_pretrained("Tanrei/GPTSAN-japanese")
>>> tokenizer([["武田信玄", "は、"], ["織田信長", "の配下の、"]], padding=True)["input_ids"]
[[35993, 35998, 8640, 25948, 35993, 35998, 30647, 35675, 35999, 35999], [35993, 35998, 10382, 9868, 35993, 35998, 30646, 9459, 30646, 35675]]

>>> # Mask for Prefix-LM inputs
>>> tokenizer([["武田信玄", "は、"], ["織田信長", "の配下の、"]], padding=True)["token_type_ids"]
[[1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

>>> # Mask for padding
>>> tokenizer([["武田信玄", "は、"], ["織田信長", "の配下の、"]], padding=True)["attention_mask"]
[[1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]

convert_tokens_to_string

< >

( tokens )

将一系列标记(字符串)转换为单个字符串。

create_token_type_ids_from_sequences

< >

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

分词器返回的token_type_ids作为前缀部分和其余部分之间的分隔符。 对于前缀部分,token_type_ids为1,对于其余部分,token_type_ids为0。

示例:

>>> from transformers import GPTSanJapaneseTokenizer

>>> tokenizer = GPTSanJapaneseTokenizer.from_pretrained("Tanrei/GPTSAN-japanese")
>>> x_token = tokenizer("アイウエ")
>>> # input_ids:      | SOT | SEG | ア | イ | ウ | エ |
>>> # token_type_ids: | 1   | 0   | 0 | 0 | 0 | 0 |

>>> x_token = tokenizer("", prefix_text="アイウエ")
>>> # input_ids:      | SOT | ア | イ | ウ | エ | SEG |
>>> # token_type_ids: | 1   | 1 | 1 | 1 | 1 | 0  |

>>> x_token = tokenizer("ウエ", prefix_text="アイ")
>>> # input_ids:      | SOT | ア | イ | SEG | ウ | エ |
>>> # token_type_ids: | 1   | 1 | 1 | 0   | 0 | 0 |

GPTSanJapaneseModel

class transformers.GPTSanJapaneseModel

< >

( config: GPTSanJapaneseConfig )

参数

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

裸的GPTSAN-japanese模型变压器输出原始隐藏状态,没有任何特定的头部。

GPTSAN-japanese 模型是在通用开关变压器基础上提出的日语语言模型

该模型也是一个PyTorch torch.nn.Module 子类。 将其作为常规的PyTorch模块使用,并参考PyTorch文档以获取与一般使用和行为相关的所有信息。

前进

< >

( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.FloatTensor] = None spout: typing.Optional[torch.FloatTensor] = None past_key_values: typing.Optional[typing.Tuple[typing.Tuple[torch.FloatTensor]]] = None head_mask: typing.Optional[torch.FloatTensor] = None use_cache: typing.Optional[bool] = False inputs_embeds: typing.Optional[torch.FloatTensor] = None decoder_inputs_embeds: typing.Optional[torch.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None output_router_logits: typing.Optional[bool] = None num_precontext: typing.Optional[torch.LongTensor] = None )

参数

  • input_ids (torch.LongTensor of shape (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。GPTSAN-japanese 是一个生成句子延续或预测掩码位置标记的模型。模型输入所需的特殊标记会自动附加。
  • attention_mask (torch.FloatTensor of shape (batch_size, sequence_length), optional) — Mask to avoid performing attention on padding token indices. Mask values selected in [0, 1]:
    • 1 for tokens that are not masked,
    • 0 for tokens that are masked.

    什么是注意力掩码?

  • token_type_ids (torch.FloatTensor 形状为 (batch_size, sequence_length), 可选) — 一个用于屏蔽Prefix-LM输入中Prefix部分的输入。屏蔽值在 [0, 1] 中选择:
    • 1 表示是 前缀 输入的标记,
    • 0 表示是 非前缀 输入的标记。
  • spout (torch.Tensor 形状为 (batch_size, config.d_spout)) — 这个向量通过一个8层的前馈神经网络进行转换,可以用来代替 past_key_values.
  • past_key_values (tuple(tuple(torch.FloatTensor)) of length config.n_layers with each tuple having 4 tensors of shape (batch_size, num_heads, sequence_length - 1, embed_size_per_head)) — Contains precomputed key and value hidden states of the attention blocks. Can be used to speed up decoding.

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

  • head_mask (torch.FloatTensor 形状为 (num_heads,)(num_layers, num_heads), 可选) — 用于屏蔽自注意力模块中选定的头部的掩码。掩码值在 [0, 1] 中选择:
  • use_cache (bool, 可选) — 如果设置为 Truepast_key_values 键值状态将被返回,并可用于加速解码(参见 past_key_values)。
  • inputs_embeds (torch.FloatTensor of shape (batch_size, sequence_length, hidden_size), optional) — 可选地,您可以选择直接传递嵌入表示,而不是传递 input_ids。如果您希望对如何将 input_ids 索引转换为相关向量有更多控制权,而不是使用模型的内部嵌入查找矩阵,这将非常有用。
  • decoder_inputs_embeds (torch.FloatTensor of shape (batch_size, target_sequence_length, hidden_size), optional) — 可选地,您可以选择直接传递嵌入表示,而不是传递decoder_input_ids。如果使用了past_key_values,则可以选择仅输入最后一个decoder_inputs_embeds(参见past_key_values)。如果您希望对如何将decoder_input_ids索引转换为相关向量有更多控制,而不是使用模型的内部嵌入查找矩阵,这将非常有用。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
  • return_dict (bool, 可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。
  • router_logits (tuple(torch.FloatTensor), 可选, 当传递 output_router_logits=Trueconfig.add_router_probs=True 时返回) — torch.FloatTensor 的元组(每层一个),形状为 (batch_size, sequence_length, num_experts)。 解码器模型的路由 logits,用于计算专家混合模型的辅助损失。
  • num_precontext (torch.LongTensor of shape (batch_size,1)) — 输入中hybrid输入标记的长度。达到此长度的标记像BERT一样同时指向前后,之后的标记仅像GPT一样指向前方。另见: https://github.com/tanreinama/GPTSAN/blob/main/report/model.md

GPTSanJapaneseModel 的 forward 方法,重写了 __call__ 特殊方法。

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

GPTSanJapaneseForConditionalGeneration

transformers.GPTSanJapaneseForConditionalGeneration

< >

( config: GPTSanJapaneseConfig )

参数

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

带有语言建模头的裸GPTSAN-japanese模型。

GPTSAN-japanese 模型是在通用开关变压器基础上提出的日语语言模型

该模型也是一个PyTorch torch.nn.Module 子类。 将其作为常规的PyTorch模块使用,并参考PyTorch文档以获取与一般使用和行为相关的所有信息。

前进

< >

( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.FloatTensor] = None spout: typing.Optional[torch.FloatTensor] = None past_key_values: typing.Optional[typing.Tuple[typing.Tuple[torch.FloatTensor]]] = None head_mask: typing.Optional[torch.FloatTensor] = None use_cache: typing.Optional[bool] = False inputs_embeds: typing.Optional[torch.FloatTensor] = None decoder_inputs_embeds: typing.Optional[torch.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None output_router_logits: typing.Optional[bool] = None labels: typing.Optional[torch.LongTensor] = None )

参数

  • input_ids (torch.LongTensor of shape (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。GPTSAN-japanese 是一个生成句子延续或预测掩码位置标记的模型。模型输入所需的特殊标记会自动附加。
  • attention_mask (torch.FloatTensor of shape (batch_size, sequence_length), optional) — Mask to avoid performing attention on padding token indices. Mask values selected in [0, 1]:
    • 1 for tokens that are not masked,
    • 0 for tokens that are masked.

    什么是注意力掩码?

  • token_type_ids (torch.FloatTensor 形状为 (batch_size, sequence_length), 可选) — 一个用于屏蔽Prefix-LM输入中Prefix部分的输入。屏蔽值在 [0, 1] 中选择:
    • 1 表示 prefix 输入的标记,
    • 0 表示 非prefix 输入的标记。
  • spout (torch.Tensor 形状为 (batch_size, config.d_spout)) — 这个向量通过一个8层的前馈神经网络进行转换,可以用来替代 past_key_values.
  • past_key_values (tuple(tuple(torch.FloatTensor)) of length config.n_layers with each tuple having 4 tensors of shape (batch_size, num_heads, sequence_length - 1, embed_size_per_head)) — Contains precomputed key and value hidden states of the attention blocks. Can be used to speed up decoding.

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

  • head_mask (torch.FloatTensor 形状为 (num_heads,)(num_layers, num_heads), 可选) — 用于屏蔽自注意力模块中选定的头部的掩码。掩码值在 [0, 1] 之间选择:
  • use_cache (bool, 可选) — 如果设置为 Truepast_key_values 键值状态将被返回,并可用于加速解码(参见 past_key_values)。
  • inputs_embeds (torch.FloatTensor of shape (batch_size, sequence_length, hidden_size), optional) — 可选地,您可以选择直接传递嵌入表示,而不是传递 input_ids。如果您希望对如何将 input_ids 索引转换为相关向量有更多控制,而不是使用模型的内部嵌入查找矩阵,这将非常有用。
  • decoder_inputs_embeds (torch.FloatTensor of shape (batch_size, target_sequence_length, hidden_size), optional) — 可选地,您可以选择直接传递嵌入表示,而不是传递decoder_input_ids。如果使用了past_key_values,则可以选择仅输入最后一个decoder_inputs_embeds(参见past_key_values)。如果您希望对如何将decoder_input_ids索引转换为相关向量有更多控制,而不是使用模型的内部嵌入查找矩阵,这将非常有用。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量中的attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
  • return_dict (bool, 可选) — 是否返回一个ModelOutput而不是一个普通的元组。
  • router_logits (tuple(torch.FloatTensor), 可选, 当传递 output_router_logits=Trueconfig.add_router_probs=True 时返回) — torch.FloatTensor 的元组(每层一个),形状为 (batch_size, sequence_length, num_experts)。 解码器模型的路由 logits,用于计算专家混合模型的辅助损失。
  • labels (torch.LongTensor of shape (batch_size,), optional) — 用于计算序列分类损失的标签。索引应在 [-100, 0, ..., config.vocab_size - 1] 范围内。所有设置为 -100 的标签将被忽略(掩码),损失仅计算在 [0, ..., config.vocab_size] 范围内的标签

GPTSanJapaneseForConditionalGeneration 的前向方法,重写了 __call__ 特殊方法。

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

示例:

使用常规语言模型进行文本生成

>>> from transformers import AutoModel, AutoTokenizer, trainer_utils

>>> device = "cuda"
>>> model = AutoModel.from_pretrained("Tanrei/GPTSAN-japanese").to(device)
>>> tokenizer = AutoTokenizer.from_pretrained("Tanrei/GPTSAN-japanese")
>>> x_token = tokenizer("織田信長は、", return_tensors="pt")
>>> trainer_utils.set_seed(30)
>>> input_ids = x_token.input_ids.to(device)
>>> gen_token = model.generate(input_ids, max_new_tokens=50)
>>> tokenizer.decode(gen_token[0])
"織田信長は、政治・軍事の中枢まで掌握した政治家であり、日本史上類を見ない驚異的な軍事侵攻を続け..."

使用Prefix-LM模型进行文本生成

>>> from transformers import AutoModel, AutoTokenizer, trainer_utils

>>> device = "cuda"
>>> model = AutoModel.from_pretrained("Tanrei/GPTSAN-japanese").to(device)
>>> tokenizer = AutoTokenizer.from_pretrained("Tanrei/GPTSAN-japanese")
>>> x_token = tokenizer("", prefix_text="織田信長は、", return_tensors="pt")
>>> trainer_utils.set_seed(30)
>>> input_ids = x_token.input_ids.to(device)
>>> token_type_ids = x_token.token_type_ids.to(device)
>>> gen_token = model.generate(input_ids, token_type_ids=token_type_ids, max_new_tokens=50)
>>> tokenizer.decode(gen_token[0])
"織田信長は、政治・外交で数々の戦果を上げるが、1568年からは、いわゆる本能寺の変で細川晴元に暗殺される..."

同时进行文本生成和掩码语言模型

>>> from transformers import AutoModel, AutoTokenizer, trainer_utils

>>> device = "cuda"
>>> model = AutoModel.from_pretrained("Tanrei/GPTSAN-japanese").to(device)
>>> tokenizer = AutoTokenizer.from_pretrained("Tanrei/GPTSAN-japanese")
>>> masked_sentence = "武田信玄は、<|inputmask|>時代ファンならぜひ押さえ<|inputmask|>きたい名将の一人。"
>>> x_token = tokenizer("", prefix_text=masked_sentence, return_tensors="pt")
>>> trainer_utils.set_seed(30)
>>> input_ids = x_token.input_ids.to(device)
>>> token_type_ids = x_token.token_type_ids.to(device)
>>> out_lm_token = model.generate(input_ids, token_type_ids=token_type_ids, max_new_tokens=50)
>>> out_mlm_token = model(input_ids, token_type_ids=token_type_ids).logits.argmax(axis=-1)
>>> tokenizer.decode(out_mlm_token[0])
"武田信玄は、戦国時代ファンならぜひ押さえておきたい名将の一人。"

>>> tokenizer.decode(out_lm_token[0][input_ids.shape[1] :])
"武田氏の三代に渡った武田家のひとり\n甲斐市に住む、日本史上最大の戦国大名。..."
< > Update on GitHub