GPT2CausalLM
類別keras_hub.models.GPT2CausalLM(backbone, preprocessor=None, **kwargs)
用於因果語言建模的端對端 GPT2 模型。
因果語言模型 (LM) 根據先前的詞元預測下一個詞元。此任務設定可用於在純文字輸入上以無監督方式訓練模型,或自動迴歸地生成類似於用於訓練的資料的純文字。此任務可用於預訓練或微調 GPT-2 模型,只需呼叫 fit()
即可。
此模型具有 generate()
方法,可根據提示生成文字。使用的生成策略由 compile()
上的額外 sampler
引數控制。您可以使用不同的 keras_hub.samplers
物件重新編譯模型來控制生成。預設情況下,將使用 "top_k"
採樣。
此模型可以選擇性地配置 preprocessor
層,在這種情況下,它將在 fit()
、predict()
、evaluate()
和 generate()
期間自動將預處理應用於字串輸入。當使用 from_preset()
建立模型時,預設會執行此操作。
免責聲明:預訓練模型以「現狀」為基礎提供,不提供任何形式的保證或條件。基礎模型由第三方提供,並受單獨的許可條款約束,詳情請參閱此處。
引數
keras_hub.models.GPT2Backbone
實例。keras_hub.models.GPT2CausalLMPreprocessor
或 None
。如果為 None
,則此模型不會套用預處理,且輸入應在呼叫模型之前進行預處理。範例
使用 generate()
進行文字生成。
gpt2_lm = keras_hub.models.GPT2CausalLM.from_preset("gpt2_base_en")
gpt2_lm.generate("I want to say", max_length=30)
# Generate with batched prompts.
gpt2_lm.generate(["This is a", "Where are you"], max_length=30)
使用自訂採樣器編譯 generate()
函數。
gpt2_lm = keras_hub.models.GPT2CausalLM.from_preset("gpt2_base_en")
gpt2_lm.compile(sampler="greedy")
gpt2_lm.generate("I want to say", max_length=30)
gpt2_lm.compile(sampler=keras_hub.samplers.BeamSampler(num_beams=2))
gpt2_lm.generate("I want to say", max_length=30)
在沒有預處理的情況下使用 generate()
。
# Prompt the model with `5338, 318` (the token ids for `"Who is"`).
# Use `"padding_mask"` to indicate values that should not be overridden.
prompt = {
"token_ids": np.array([[5338, 318, 0, 0, 0]] * 2),
"padding_mask": np.array([[1, 1, 0, 0, 0]] * 2),
}
gpt2_lm = keras_hub.models.GPT2CausalLM.from_preset(
"gpt2_base_en",
preprocessor=None,
)
gpt2_lm.generate(prompt)
在單一批次上呼叫 fit()
。
features = ["The quick brown fox jumped.", "I forgot my homework."]
gpt2_lm = keras_hub.models.GPT2CausalLM.from_preset("gpt2_base_en")
gpt2_lm.fit(x=features, batch_size=2)
在沒有預處理的情況下呼叫 fit()
。
x = {
"token_ids": np.array([[50256, 1, 2, 3, 4]] * 2),
"padding_mask": np.array([[1, 1, 1, 1, 1]] * 2),
}
y = np.array([[1, 2, 3, 4, 50256]] * 2)
sw = np.array([[1, 1, 1, 1, 1]] * 2)
gpt2_lm = keras_hub.models.GPT2CausalLM.from_preset(
"gpt2_base_en",
preprocessor=None,
)
gpt2_lm.fit(x=x, y=y, sample_weight=sw, batch_size=2)
自訂骨幹網路和詞彙表。
features = ["a quick fox.", "a fox quick."]
vocab = {"<|endoftext|>": 0, "a": 4, "Ġquick": 5, "Ġfox": 6}
merges = ["Ġ q", "u i", "c k", "ui ck", "Ġq uick"]
merges += ["Ġ f", "o x", "Ġf ox"]
tokenizer = keras_hub.models.GPT2Tokenizer(
vocabulary=vocab,
merges=merges,
)
preprocessor = keras_hub.models.GPT2CausalLMPreprocessor(
tokenizer=tokenizer,
sequence_length=128,
)
backbone = keras_hub.models.GPT2Backbone(
vocabulary_size=30552,
num_layers=4,
num_heads=4,
hidden_dim=256,
intermediate_dim=512,
max_sequence_length=128,
)
gpt2_lm = keras_hub.models.GPT2CausalLM(
backbone=backbone,
preprocessor=preprocessor,
)
gpt2_lm.fit(x=features, batch_size=2)
from_preset
方法GPT2CausalLM.from_preset(preset, load_weights=True, **kwargs)
從模型預設實例化 keras_hub.models.Task
。
預設是用於儲存和載入預訓練模型的配置、權重和其他檔案資產的目錄。preset
可以作為以下其中一項傳遞
'bert_base_en'
'kaggle://user/bert/keras/bert_base_en'
'hf://user/bert_base_en'
'./bert_base_en'
對於任何 Task
子類別,您可以執行 cls.presets.keys()
以列出類別上所有可用的內建預設。
此建構子可以透過兩種方式之一呼叫。從特定於任務的基底類別(例如 keras_hub.models.CausalLM.from_preset()
)呼叫,或從模型類別(例如 keras_hub.models.BertTextClassifier.from_preset()
)呼叫。如果從基底類別呼叫,則傳回物件的子類別將從預設目錄中的配置推斷。
引數
True
,則儲存的權重將載入到模型架構中。如果為 False
,則所有權重將隨機初始化。範例
# Load a Gemma generative task.
causal_lm = keras_hub.models.CausalLM.from_preset(
"gemma_2b_en",
)
# Load a Bert classification task.
model = keras_hub.models.TextClassifier.from_preset(
"bert_base_en",
num_classes=2,
)
預設 | 參數 | 描述 |
---|---|---|
gpt2_base_en | 124.44M | 12 層 GPT-2 模型,其中保留大小寫。在 WebText 上訓練。 |
gpt2_base_en_cnn_dailymail | 124.44M | 12 層 GPT-2 模型,其中保留大小寫。在 CNN/DailyMail 摘要資料集上微調。 |
gpt2_medium_en | 354.82M | 24 層 GPT-2 模型,其中保留大小寫。在 WebText 上訓練。 |
gpt2_large_en | 774.03M | 36 層 GPT-2 模型,其中保留大小寫。在 WebText 上訓練。 |
gpt2_extra_large_en | 1.56B | 48 層 GPT-2 模型,其中保留大小寫。在 WebText 上訓練。 |
generate
方法GPT2CausalLM.generate(
inputs, max_length=None, stop_token_ids="auto", strip_prompt=False
)
根據提示 inputs
生成文字。
此方法根據給定的 inputs
生成文字。用於生成的採樣方法可以透過 compile()
方法設定。
如果 inputs
是 tf.data.Dataset
,則輸出將「逐批次」生成並串聯。否則,所有輸入將作為單一批次處理。
如果模型附加了 preprocessor
,則 inputs
將在 generate()
函數內部進行預處理,並且應符合 preprocessor
層預期的結構(通常是原始字串)。如果未附加 preprocessor
,則輸入應符合 backbone
預期的結構。有關每個結構的示範,請參閱上面的範例用法。
引數
tf.data.Dataset
。如果模型附加了 preprocessor
,則 inputs
應符合 preprocessor
層預期的結構。如果未附加 preprocessor
,則 inputs
應符合 backbone
模型預期的結構。preprocessor
配置的最大 sequence_length
。如果 preprocessor
為 None
,則 inputs
應填充到所需的最大長度,並且此引數將被忽略。None
、「auto」或詞元 ID 元組。預設為「auto」,它使用 preprocessor.tokenizer.end_token_id
。不指定處理器將產生錯誤。None 會在生成 max_length
個詞元後停止生成。您也可以指定模型應停止的詞元 ID 列表。請注意,詞元序列將各自被解釋為停止詞元,並且不支援多詞元停止序列。backbone
屬性keras_hub.models.GPT2CausalLM.backbone
keras_hub.models.Backbone
模型,具有核心架構。
preprocessor
屬性keras_hub.models.GPT2CausalLM.preprocessor
用於預處理輸入的 keras_hub.models.Preprocessor
層。