GPT2CausalLM
類別keras_nlp.models.GPT2CausalLM(backbone, preprocessor=None, **kwargs)
用於因果語言建模的端到端 GPT2 模型。
因果語言模型 (LM) 會根據先前的詞彙預測下一個詞彙。此任務設定可用於在純文字輸入上對模型進行非監督式訓練,或自動遞迴地生成類似於用於訓練的資料的純文字。只需呼叫 fit()
,即可將此任務用於預訓練或微調 GPT-2 模型。
此模型具有 generate()
方法,可以根據提示生成文字。所使用的生成策略由 compile()
上的額外 sampler
參數控制。您可以使用不同的 keras_nlp.samplers
物件重新編譯模型來控制生成。預設情況下,將使用 "top_k"
採樣。
此模型可以選擇性地配置 preprocessor
層,在這種情況下,它會在 fit()
、predict()
、evaluate()
和 generate()
期間自動將預處理應用於字串輸入。使用 from_preset()
建立模型時,預設會執行此操作。
免責聲明:預訓練模型按「原樣」提供,不提供任何形式的保證或條件。基礎模型由協力廠商提供,並受獨立授權的約束,請參閱此處。
參數
keras_nlp.models.GPT2Backbone
實例。keras_nlp.models.GPT2CausalLMPreprocessor
或 None
。如果為 None
,則此模型將不會套用預處理,並且應在呼叫模型之前對輸入進行預處理。範例
使用 generate()
進行文字生成。
gpt2_lm = keras_nlp.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_nlp.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_nlp.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_nlp.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_nlp.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_nlp.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_nlp.models.GPT2Tokenizer(
vocabulary=vocab,
merges=merges,
)
preprocessor = keras_nlp.models.GPT2CausalLMPreprocessor(
tokenizer=tokenizer,
sequence_length=128,
)
backbone = keras_nlp.models.GPT2Backbone(
vocabulary_size=30552,
num_layers=4,
num_heads=4,
hidden_dim=256,
intermediate_dim=512,
max_sequence_length=128,
)
gpt2_lm = keras_nlp.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_nlp.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_nlp.models.CausalLM.from_preset()
,也可以從模型類別呼叫,例如 keras_nlp.models.BertTextClassifier.from_preset()
。如果從基底類別呼叫,則傳回物件的子類別將從預設設定目錄中的設定推斷。
參數
True
,則會將儲存的權重載入模型架構中。如果為 False
,則會隨機初始化所有權重。範例
# Load a Gemma generative task.
causal_lm = keras_nlp.models.CausalLM.from_preset(
"gemma_2b_en",
)
# Load a Bert classification task.
model = keras_nlp.models.TextClassifier.from_preset(
"bert_base_en",
num_classes=2,
)
預設設定名稱 | 參數 | 說明 |
---|---|---|
gpt2_base_en | 124.44M | 12 層 GPT-2 模型,保留大小寫。使用 WebText 訓練。 |
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 訓練。 |
gpt2_base_en_cnn_dailymail | 124.44M | 12 層 GPT-2 模型,保留大小寫。使用 CNN/DailyMail 摘要資料集進行微調。 |
generate
方法GPT2CausalLM.generate(inputs, max_length=None, stop_token_ids="auto")
根據給定的提示 inputs
產生文字。
此方法根據給定的 inputs
產生文字。用於產生的取樣方法可以透過 compile()
方法設定。
如果 inputs
是 tf.data.Dataset
,則會「逐批」產生輸出並進行串聯。否則,所有輸入都將作為單一批次處理。
如果模型附加了 preprocessor
,則會在 generate()
函數內部對 inputs
進行預處理,並且應該符合 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_nlp.models.GPT2CausalLM.backbone
具有核心架構的 keras_nlp.models.Backbone
模型。
preprocessor
屬性keras_nlp.models.GPT2CausalLM.preprocessor
用於預先處理輸入的 keras_nlp.models.Preprocessor
層。