OPTCausalLM
類別keras_nlp.models.OPTCausalLM(backbone, preprocessor=None, **kwargs)
一個用於因果語言建模的端到端 OPT 模型。
因果語言模型 (LM) 會根據先前的標記預測下一個標記。此任務設定可用於在純文字輸入上以非監督方式訓練模型,或以自回歸方式產生類似於用於訓練的資料的純文字。只要呼叫 fit()
,這個任務就可以用於預先訓練或微調 GPT-2 模型。
這個模型有一個 generate()
方法,它會根據提示產生文字。使用的生成策略由 compile()
上的一個額外 sampler
參數控制。您可以使用不同的 keras_nlp.samplers
物件重新編譯模型來控制生成。預設情況下,將使用 "top_k"
採樣。
這個模型可以選擇性地配置一個 preprocessor
層,在這種情況下,它會在 fit()
、predict()
、evaluate()
和 generate()
期間自動對字串輸入應用預處理。使用 from_preset()
建立模型時,預設會執行此操作。
免責聲明:預先訓練的模型以「現狀」提供,不提供任何形式的保證或條件。底層模型由第三方提供,並受獨立授權條款約束,請參閱 此處。
參數
keras_nlp.models.OPTBackbone
實例。keras_nlp.models.OPTCausalLMPreprocessor
或 None
。如果為 None
,則此模型將不應用預處理,並且輸入應在呼叫模型之前進行預處理。範例
使用 generate()
進行文字生成。
opt_lm = keras_nlp.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_nlp.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_nlp.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_nlp.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_nlp.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_nlp.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_nlp.models.OPTTokenizer(
vocabulary=vocab,
merges=merges,
)
preprocessor = keras_nlp.models.OPTCausalLMPreprocessor(
tokenizer=tokenizer,
sequence_length=128,
)
model = keras_nlp.models.OPTBackbone(
vocabulary_size=50265,
num_layers=4,
num_heads=4,
hidden_dim=256,
intermediate_dim=512,
max_sequence_length=128,
)
opt_lm = keras_nlp.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_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,
)
預設集名稱 | 參數 | 說明 |
---|---|---|
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")
根據給定的提示 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.OPTCausalLM.backbone
具有核心架構的 keras_nlp.models.Backbone
模型。
preprocessor
屬性keras_nlp.models.OPTCausalLM.preprocessor
用於預處理輸入資料的 keras_nlp.models.Preprocessor
層。