Transformers 文件

GPTSAN-japanese

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

GPTSAN-japanese

PyTorch

該模型目前僅處於維護模式,我們不接受任何更改其程式碼的新拉取請求(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 的模型結構。對於字首輸入詞元(Prefix Input tokens),它像一個經過移位的掩碼語言模型(Masked Language Model)。無字首的輸入行為則與普通生成模型相似。Spout 向量是 GPTSAN 特有的輸入。Spout 向量經過隨機輸入的預訓練,但您可以在微調期間指定一類文字或任意向量。這使您能夠指示生成文字的傾向。GPTSAN 具有基於 Switch-Transformer 的稀疏前饋網路(Feed Forward)。您還可以新增其他層並對其進行部分訓練。詳情請參見原始 GPTSAN 倉庫。

Prefix-LM 模型

GPTSAN 的結構與 T5 論文中名為 Prefix-LM 的模型相同。(原始 GPTSAN 倉庫稱之為 hybrid)在 GPTSAN 中,Prefix-LM 的 Prefix 部分,即可以被前後兩個詞元同時引用的輸入位置,可以指定為任意長度。對於每個批次,也可以指定不同的任意長度。此長度適用於分詞器中輸入到 prefix_text 的文字。分詞器將 Prefix-LM 的 Prefix 部分的掩碼作為 token_type_ids 返回。模型將 token_type_ids 為 1 的部分視為 Prefix 部分,即輸入可以同時引用前後的詞元。

使用技巧

指定 Prefix 部分是透過傳遞給自注意力機制的掩碼來完成的。當 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=“アイウエ”) input_ids: | SOT | ア | イ | ウ | エ | SEG | token_type_ids: | 1 | 1 | 1 | 1 | 1 | 0 | prefix_lm_mask: 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 向量

Spout 向量是一種用於控制文字生成的特殊向量。該向量在自注意力機制中被視為第一個嵌入,為生成的詞元帶來額外的注意力。在 Tanrei/GPTSAN-japanese 釋出的預訓練模型中,Spout 向量是一個 128 維的向量,它在模型中透過 8 個全連線層,並被投影到作為外部注意力的空間中。由全連線層投影的 Spout 向量被分割後傳遞給所有的自注意力模組。

GPTSanJapaneseConfig

class 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, 可選, 預設為 1024) — 編碼器層和池化層的大小。
  • d_ff (int, 可選, 預設為 8192) — 每個 SwitchTransformersBlock 中間前饋層的大小。
  • d_ext (int, 可選, 預設為 4096) — 每個額外層中中間前饋層的大小。
  • d_spout (int, 可選, 預設為 128) — spout 向量的大小。
  • num_switch_layers (int, 可選, 預設為 10) — Switch Transformer 層中的層數。
  • num_ext_layers (int, 可選, 預設為 0) — 額外層中的層數。
  • num_heads (int, 可選, 預設為 16) — Transformer 編碼器中每個注意力層的注意力頭數。
  • num_experts (int, 可選, 預設為 16) — 每個 SwitchTransformer 層的專家數量。
  • expert_capacity (int, 可選, 預設為 128) — 每個專家可以儲存的詞元數量。如果設定為 1,模型的行為將類似於常規 Transformer。
  • dropout_rate (float, 可選, 預設為 0.0) — 所有 dropout 層的比率。
  • layer_norm_eps (float, 可選, 預設為 1e-5) — 層歸一化層使用的 epsilon 值。
  • router_bias (bool, 可選, 預設為 False) — 是否為路由器新增偏置。
  • router_jitter_noise (float, 可選, 預設為 0.0) — 新增到路由器的噪聲量。在預測期間將其設定為 0.0,或在訓練期間設定一個較小的值(通常為 1e-2)。
  • router_dtype (str, 可選, 預設為 "float32") — 用於路由器的 dtype。最好將 dtype 保持為 "float32",正如 論文 中關於 選擇性精度 的討論中所述。
  • router_ignore_padding_tokens (bool, 可選, 預設為 False) — 在路由時是否忽略填充詞元(padding token)。
  • output_hidden_states (bool, 可選, 預設為 False) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的 `hidden_states`。
  • output_attentions (bool, 可選, 預設為 False) — 是否返回所有注意力層的注意力張量。
  • initializer_factor (float, 可選, 預設為 0.002) — 用於初始化所有權重矩陣的因子。
  • output_router_logits (bool, 可選, 預設為 False) — 是否返回所有專家的路由器 logits。
  • use_cache (bool, 可選, 預設為 True) — 模型是否應返回最後一個鍵/值注意力(並非所有模型都使用)。

這是一個用於儲存 GPTSanJapaneseModel 配置的配置類。它用於根據指定的引數例項化一個 GPTSANJapanese 模型,定義模型架構。使用預設值例項化配置將產生與 GPTSANJapanese Tanrei/GPTSAN-japanese 架構相似的配置。

配置物件繼承自 PretrainedConfig,可用於控制模型輸出。請閱讀 PretrainedConfig 的文件以獲取更多資訊。

GPTSanJapaneseTokenizer

class 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, 可選, 預設為 "<|nottoken|>") — 用於未知字元的詞元。
  • pad_token (str, 可選, 預設為 "<|separator|>") — 用於填充的詞元。
  • bos_token (str, 可選, 預設為 "<|startoftext|>") — 序列開始詞元。
  • eos_token (str, 可選, 預設為 "<|endoftext|>") — 序列結束詞元。
  • sep_token (str, 可選, 預設為 "<|segmenter|>") — 一個特殊詞元,用於將詞元分為字首部分和通用輸入部分。
  • do_clean_text (bool, 可選, 預設為 False) — 是否對文字中的 URL、EMAIL、TEL、日語日期和日語價格進行清理。

此分詞器基於 GPTNeoXJapaneseTokenizer,並進行了以下修改:

  • 正確解碼 byte0~byte255 詞元
  • 增加了詞袋(bagofword)詞元處理
  • 為 Prefix-LM 模型返回 token_type_ids 詞袋詞元表示前一個詞元的重複,在解碼時會轉換為 3 個連續的詞元。此外,原始的日語特殊子詞編碼已在此倉庫中釋出(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"])
'吾輩は貓である🐯。実は慶応(慶応)大學出身'

Prefix-LM 示例

>>> 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: list token_ids_1: typing.Optional[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 模型 Transformer,輸出原始隱藏狀態,頂部沒有任何特定的頭。

GPTSAN-japanese 模型在《通用 Swich Transformer 基礎上的日語語言模型》中被提出。

此模型也是 PyTorch torch.nn.Module 的子類。可以像常規 PyTorch 模組一樣使用它,並參考 PyTorch 文件瞭解所有與常規用法和行為相關的事項。

forward

< >

( 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[tuple[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,形狀為 (batch_size, sequence_length)) — 詞彙表中輸入序列詞元的索引。GPTSAN-japanese 是一個生成句子續寫或預測掩碼位置詞元的模型。模型所需的特殊詞元會自動附加。
  • attention_mask (torch.FloatTensor,形狀為 (batch_size, sequence_length)可選) — 用於避免對填充詞元索引執行注意力的掩碼。掩碼值在 `[0, 1]` 中選擇:

    • 1 表示詞元未被掩碼
    • 0 表示詞元被掩碼

    什麼是注意力掩碼?

  • token_type_ids (torch.FloatTensor,形狀為 (batch_size, sequence_length)可選) — 用於掩蓋 Prefix-LM 輸入中字首部分的輸入。掩碼值在 `[0, 1]` 中選擇:

    • 1 表示詞元是字首輸入,
    • 0 表示詞元是非字首輸入。
  • spout (torch.Tensor,形狀為 (batch_size, config.d_spout)) — 該向量透過一個 8 層 FFN 進行轉換,可以用來替代 past_key_values
  • past_key_values (tuple(tuple(torch.FloatTensor)),長度為 config.n_layers,每個元組包含 4 個形狀為 (batch_size, num_heads, sequence_length - 1, embed_size_per_head) 的張量) — 包含預先計算的注意力塊的鍵和值隱藏狀態。可用於加速解碼。

    如果使用 past_key_values,使用者可以選擇只輸入最後一個 decoder_input_ids(那些沒有為其提供過去鍵值狀態的 `decoder_input_ids`),形狀為 (batch_size, 1),而不是所有形狀為 (batch_size, sequence_length) 的 `decoder_input_ids`。

  • head_mask (torch.FloatTensor,形狀為 (num_heads,)(num_layers, num_heads)可選) — 用於使自注意力模組的選定頭無效的掩碼。掩碼值在 `[0, 1]` 中選擇:
  • use_cache (bool, 可選) — 如果設定為 True,則返回 `past_key_values` 鍵值狀態,可用於加速解碼(參見 `past_key_values`)。
  • inputs_embeds (torch.FloatTensor,形狀為 (batch_size, sequence_length, hidden_size)可選) — 可選地,你可以選擇直接傳遞嵌入表示,而不是傳遞 `input_ids`。如果你想比模型內部的嵌入查詢矩陣更能控制如何將 `input_ids` 索引轉換為相關向量,這將非常有用。
  • decoder_inputs_embeds (torch.FloatTensor,形狀為 (batch_size, target_sequence_length, hidden_size)可選) — 可選地,你可以選擇直接傳遞嵌入表示,而不是傳遞 `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=True` 或 `config.add_router_probs=True` 時返回) — `torch.FloatTensor` 的元組(每層一個),形狀為 `(batch_size, sequence_length, num_experts)`。解碼器模型的路由器 logits,可用於計算混合專家模型(MoE)的輔助損失。
  • num_precontext (torch.LongTensor,形狀為 (batch_size,1)) — 輸入中 `hybrid` 輸入詞元的長度。此長度之前的詞元同時參考前後文(如 BERT),之後的詞元只參考前文(如 GPT)。另請參閱:https://github.com/tanreinama/GPTSAN/blob/main/report/model.md

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

儘管前向傳遞的配方需要在此函式內定義,但之後應呼叫 `Module` 例項而不是此函式,因為前者會處理執行前後處理步驟,而後者會靜默地忽略它們。

GPTSanJapaneseForConditionalGeneration

class transformers.GPTSanJapaneseForConditionalGeneration

< >

( config: GPTSanJapaneseConfig )

引數

  • config (GPTSanJapaneseConfig) — 模型配置類,包含模型的所有引數。使用配置檔案進行初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法來載入模型權重。

帶語言建模頭的原始 GPTSAN-japanese 模型。

GPTSAN-japanese 模型在《通用 Swich Transformer 基礎上的日語語言模型》中被提出。

此模型也是 PyTorch torch.nn.Module 的子類。可以像常規 PyTorch 模組一樣使用它,並參考 PyTorch 文件瞭解所有與常規用法和行為相關的事項。

forward

< >

( 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[tuple[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,形狀為 (batch_size, sequence_length)) — 詞彙表中輸入序列詞元的索引。GPTSAN-japanese 是一個生成句子續寫或預測掩碼位置詞元的模型。模型所需的特殊詞元會自動附加。
  • attention_mask (torch.FloatTensor,形狀為 (batch_size, sequence_length)可選) — 用於避免對填充詞元索引執行注意力的掩碼。掩碼值在 `[0, 1]` 中選擇:

    • 1 表示詞元未被掩碼
    • 0 表示詞元被掩碼

    什麼是注意力掩碼?

  • token_type_ids (torch.FloatTensor,形狀為 (batch_size, sequence_length)可選) — 用於在 Prefix-LM 輸入中掩碼字首部分的輸入。掩碼值在 [0, 1] 中選擇:

    • 1 表示作為字首輸入的詞元,
    • 0 表示作為非字首輸入的詞元。
  • spout (torch.Tensor,形狀為 (batch_size, config.d_spout)) — 該向量透過一個 8 層的 FFN 進行轉換,可用於替代 past_key_values
  • past_key_values (tuple(tuple(torch.FloatTensor)),長度為 config.n_layers,每個元組包含 4 個形狀為 (batch_size, num_heads, sequence_length - 1, embed_size_per_head) 的張量) — 包含注意力模組預先計算好的鍵和值隱藏狀態。可用於加速解碼。

    如果使用了 past_key_values,使用者可以選擇只輸入最後一個 decoder_input_ids(即那些沒有為其提供過去鍵值狀態的詞元),其形狀為 (batch_size, 1),而不是輸入所有形狀為 (batch_size, sequence_length)decoder_input_ids

  • head_mask (torch.FloatTensor,形狀為 (num_heads,)(num_layers, num_heads)可選) — 用於使自注意力模組中選定的頭無效的掩碼。掩碼值在 [0, 1] 中選擇:
  • use_cache (bool可選) — 如果設定為 True,則返回 past_key_values 的鍵值狀態,並可用於加速解碼(參見 past_key_values)。
  • inputs_embeds (torch.FloatTensor,形狀為 (batch_size, sequence_length, hidden_size)可選) — 可選地,你可以直接傳遞嵌入表示,而不是傳遞 input_ids。如果你想比模型內部的嵌入查詢矩陣更好地控制如何將 input_ids 索引轉換為關聯向量,這會很有用。
  • decoder_inputs_embeds (torch.FloatTensor,形狀為 (batch_size, target_sequence_length, hidden_size)可選) — 可選地,你可以直接傳遞嵌入表示,而不是傳遞 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,可用於計算專家混合(Mixture of Experts)模型的輔助損失。
  • labels (torch.LongTensor,形狀為 (batch_size,)可選) — 用於計算序列分類損失的標籤。索引應在 [-100, 0, ..., config.vocab_size - 1] 範圍內。所有設定為 -100 的標籤都會被忽略(掩碼),損失只對 [0, ..., config.vocab_size] 範圍內的標籤計算。

GPTSanJapaneseForConditionalGeneration 的 forward 方法重寫了 __call__ 特殊方法。

儘管前向傳遞的配方需要在此函式內定義,但之後應呼叫 `Module` 例項而不是此函式,因為前者會處理執行前後處理步驟,而後者會靜默地忽略它們。

示例

使用常規 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("織田信長は、", 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甲斐市に住む、日本史上最大の戦國大名。..."
< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.