BloomCausalLM
類別keras_nlp.models.BloomCausalLM(backbone, preprocessor=None, **kwargs)
用於因果語言建模的端到端 BLOOM 模型。
因果語言模型 (LM) 會根據先前的詞彙預測下一個詞彙。此任務設定可用於在純文字輸入上對模型進行無監督訓練,或自動遞迴地生成類似於用於訓練的資料的純文字。只需呼叫 fit()
,即可將此任務用於預訓練或微調 BLOOM 模型。
此模型具有 generate()
方法,可根據提示生成文字。使用的生成策略由 compile()
上的附加參數 sampler
控制。您可以使用不同的 keras_nlp.samplers
物件重新編譯模型來控制生成。預設情況下,將使用 "greedy"
取樣。
此模型可以選擇使用 preprocessor
層進行配置,在這種情況下,它會在 fit()
、predict()
、evaluate()
和 generate()
期間自動將預處理應用於字串輸入。使用 from_preset()
建立模型時,預設會執行此操作。
參數
keras_nlp.models.BloomBackbone
實例。keras_nlp.models.BloomCausalLMPreprocessor
或 None
。如果為 None
,則此模型將不會應用預處理,並且應在呼叫模型之前對輸入進行預處理。範例
使用 generate()
進行文字生成。
bloom_lm = keras_nlp.models.BloomCausalLM.from_preset("bloom_560m_multi")
bloom_lm.generate("I want to say", max_length=30)
# Generate with batched prompts.
bloom_lm.generate(["This is a", "Where are you"], max_length=30)
使用自訂取樣器編譯 generate()
函數。
bloom_lm = keras_nlp.models.BloomCausalLM.from_preset("bloom_560m_multi")
bloom_lm.compile(sampler="top_k")
bloom_lm.generate("I want to say", max_length=30)
bloom_lm.compile(sampler=keras_nlp.samplers.BeamSampler(num_beams=2))
bloom_lm.generate("I want to say", max_length=30)
在沒有預處理的情況下使用 generate()
。
prompt = {
# Token ids for "<s> Keras is".
"token_ids": np.array([[1, 46, 15762, 632, 3, 3, 3, 3, 3]] * 2),
# Use `"padding_mask"` to indicate values that should not be overridden.
"padding_mask": np.array([[1, 1, 1, 1, 0, 0, 0, 0, 0]] * 2),
}
bloom_lm = keras_nlp.models.BloomCausalLM.from_preset(
"bloom_560m_multi",
preprocessor=None,
)
bloom_lm.generate(prompt)
在單一批次上呼叫 fit()
。
features = ["The quick brown fox jumped.", "I forgot my homework."]
bloom_lm = keras_nlp.models.BloomCausalLM.from_preset("bloom_560m_multi")
bloom_lm.fit(x=features, batch_size=2)
在沒有預處理的情況下呼叫 fit()
。
x = {
# Token ids for "<bos> Keras is deep learning library<eos>"
"token_ids": np.array([[2, 214064, 603, 5271, 6044, 9581, 1, 0]] * 2),
"padding_mask": np.array([[1, 1, 1, 1, 1, 1, 1, 0]] * 2),
}
y = np.array([[214064, 603, 5271, 6044, 9581, 3, 0, 0]] * 2)
sw = np.array([[1, 1, 1, 1, 1, 1, 0, 0]] * 2)
bloom_lm = keras_nlp.models.BloomCausalLM.from_preset(
"bloom_560m_multi",
preprocessor=None,
)
bloom_lm.fit(x=x, y=y, sample_weight=sw, batch_size=2)
自訂骨幹和詞彙表。
features = [
" airplane at airport",
" airplane airport",
]
vocab = ["<unk>", "<s>", "</s>", "<pad>"]
vocab += ["!", "air", "Ġair", "plane", "Ġat", "port"]
vocab = dict([(token, i) for i, token in enumerate(vocab)])
merges = ["Ġ a", "Ġ t", "Ġ i", "Ġ b", "a i", "p l", "n e"]
merges += ["Ġa t", "p o", "r t", "Ġt h", "ai r", "pl a", "po rt"]
merges += ["Ġai r", "Ġa i", "pla ne"]
tokenizer = keras_nlp.models.BloomTokenizer(vocabulary=vocab, merges=merges)
preprocessor = keras_nlp.models.BloomCausalLMPreprocessor(
tokenizer=tokenizer,
sequence_length=128,
)
backbone = keras_nlp.models.BloomBackbone(
vocabulary_size=tokenizer.vocabulary_size(),
num_layers=4,
num_heads=4,
hidden_dim=32,
intermediate_dim=128,
)
bloom_lm = keras_nlp.models.BloomCausalLM(
backbone=backbone,
preprocessor=preprocessor,
)
bloom_lm.fit(x=features, batch_size=2)
from_preset
方法BloomCausalLM.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,
)
預設範本名稱 | 參數 | 描述 |
---|---|---|
bloom_560m_multi | 559.21M | 具有 1024 個隱藏維度的 24 層 Bloom 模型。針對 45 種自然語言和 12 種程式語言進行訓練。 |
bloom_1.1b_multi | 1.07B | 具有 1536 個隱藏維度的 24 層 Bloom 模型。針對 45 種自然語言和 12 種程式語言進行訓練。 |
bloom_1.7b_multi | 1.72B | 具有 2048 個隱藏維度的 24 層 Bloom 模型。針對 45 種自然語言和 12 種程式語言進行訓練。 |
bloom_3b_multi | 3.00B | 具有 2560 個隱藏維度的 30 層 Bloom 模型。針對 45 種自然語言和 12 種程式語言進行訓練。 |
bloomz_560m_multi | 559.21M | 具有 1024 個隱藏維度的 24 層 Bloom 模型。在跨語言任務混合 (xP3) 資料集上進行微調。 |
bloomz_1.1b_multi | 1.07B | 具有 1536 個隱藏維度的 24 層 Bloom 模型。在跨語言任務混合 (xP3) 資料集上進行微調。 |
bloomz_1.7b_multi | 1.72B | 具有 2048 個隱藏維度的 24 層 Bloom 模型。在跨語言任務混合 (xP3) 資料集上進行微調。 |
bloomz_3b_multi | 3.00B | 具有 2560 個隱藏維度的 30 層 Bloom 模型。在跨語言任務混合 (xP3) 資料集上進行微調。 |
generate
方法BloomCausalLM.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」或 token ID 的元組。預設為「auto」,它會使用 preprocessor.tokenizer.end_token_id
。未指定處理器會產生錯誤。None 會在產生 max_length
個 token 後停止產生。您也可以指定模型應停止處理的 token ID 清單。請注意,每個 token 序列都會被解譯為停止 token,不支援多個 token 的停止序列。backbone
屬性keras_nlp.models.BloomCausalLM.backbone
具備核心架構的 keras_nlp.models.Backbone
模型。
preprocessor
屬性keras_nlp.models.BloomCausalLM.preprocessor
用於預先處理輸入的 keras_nlp.models.Preprocessor
層。