OPTCausalLM
類別keras_hub.models.OPTCausalLM(backbone, preprocessor=None, **kwargs)
用於因果語言建模的端到端 OPT 模型。
因果語言模型 (LM) 會根據先前的詞符預測下一個詞符。此任務設定可用於在純文字輸入上以非監督方式訓練模型,或自動迴歸產生類似於用於訓練的資料的純文字。這個任務可以用於預訓練或微調 GPT-2 模型,只需呼叫 fit()
。
此模型有一個 generate()
方法,它會根據提示產生文字。所使用的產生策略由 compile()
上的額外 sampler
引數控制。您可以使用不同的 keras_hub.samplers
物件重新編譯模型以控制產生。預設情況下,將使用 "top_k"
取樣。
此模型可以選擇使用 preprocessor
層進行配置,在這種情況下,它會在 fit()
、predict()
、evaluate()
和 generate()
期間自動將預處理應用於字串輸入。當使用 from_preset()
建立模型時,預設會執行此操作。
免責聲明:預訓練模型以「現狀」為基礎提供,不附帶任何形式的擔保或條件。基礎模型由第三方提供,並受獨立授權的約束,可在此處取得:這裡。
引數
keras_hub.models.OPTBackbone
實例。keras_hub.models.OPTCausalLMPreprocessor
或 None
。如果為 None
,此模型將不會套用預處理,並且輸入應在呼叫模型之前進行預處理。範例
使用 generate()
進行文字產生。
opt_lm = keras_hub.models.OPTCausalLM.from_preset("opt_125m_en")
opt_lm.generate("I want to say", max_length=30)
# Generate with batched prompts.
opt_lm.generate(["This is a", "Where are you"], max_length=30)
使用自訂取樣器編譯 generate()
函式。
opt_lm = keras_hub.models.OPTCausalLM.from_preset("opt_125m_en")
opt_lm.compile(sampler="greedy")
opt_lm.generate("I want to say", max_length=30)
opt_lm.compile(sampler=keras_hub.samplers.BeamSampler(num_beams=2))
opt_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),
}
opt_lm = keras_hub.models.OPTCausalLM.from_preset(
"opt_125m_en",
preprocessor=None,
)
opt_lm.generate(prompt)
在單一批次上呼叫 fit()
。
features = ["The quick brown fox jumped.", "I forgot my homework."]
opt_lm = keras_hub.models.OPTCausalLM.from_preset("opt_125m_en")
opt_lm.fit(x=features, batch_size=2)
在不進行預處理的情況下呼叫 fit()
。
x = {
"token_ids": np.array([[1, 2, 3, 4, 5]] * 2),
"padding_mask": np.array([[1, 1, 1, 1, 1]] * 2),
}
y = np.array([[2, 3, 4, 5, 0]] * 2)
sw = np.array([[1, 1, 1, 1, 1]] * 2)
opt_lm = keras_hub.models.OPTCausalLM.from_preset(
"opt_base_en",
preprocessor=None,
)
opt_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.OPTTokenizer(
vocabulary=vocab,
merges=merges,
)
preprocessor = keras_hub.models.OPTCausalLMPreprocessor(
tokenizer=tokenizer,
sequence_length=128,
)
model = keras_hub.models.OPTBackbone(
vocabulary_size=50265,
num_layers=4,
num_heads=4,
hidden_dim=256,
intermediate_dim=512,
max_sequence_length=128,
)
opt_lm = keras_hub.models.OPTCausalLM(
backbone=backbone,
preprocessor=preprocessor,
)
opt_lm.fit(x=features, batch_size=2)
from_preset
方法OPTCausalLM.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,
)
預設 | 參數 | 說明 |
---|---|---|
opt_125m_en | 125.24M | 12 層 OPT 模型,其中維護了大小寫。在 BookCorpus、CommonCrawl、Pile 和 PushShift.io 語料庫上訓練。 |
opt_1.3b_en | 1.32B | 24 層 OPT 模型,其中維護了大小寫。在 BookCorpus、CommonCrawl、Pile 和 PushShift.io 語料庫上訓練。 |
opt_2.7b_en | 2.70B | 32 層 OPT 模型,其中維護了大小寫。在 BookCorpus、CommonCrawl、Pile 和 PushShift.io 語料庫上訓練。 |
opt_6.7b_en | 6.70B | 32 層 OPT 模型,其中維護了大小寫。在 BookCorpus、CommonCrawl、Pile 和 PushShift.io 語料庫上訓練。 |
generate
方法OPTCausalLM.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.OPTCausalLM.backbone
具有核心架構的 keras_hub.models.Backbone
模型。
preprocessor
屬性keras_hub.models.OPTCausalLM.preprocessor
用於預處理輸入的 keras_hub.models.Preprocessor
層。