PaliGemmaCausalLM
類別keras_nlp.models.PaliGemmaCausalLM(preprocessor, backbone, **kwargs)
用於因果語言建模的端到端多模態 PaliGemma 模型。
因果語言模型 (LM) 會根據先前的詞彙預測下一個詞彙。這個任務設定可以用於在圖像和純文字輸入上對模型進行無監督訓練,或者以自回歸方式生成類似於用於訓練的數據的純文字。
此模型有一個 generate()
方法,可以根據提示生成文字。使用的生成策略由 compile()
上的附加 sampler
參數控制。您可以使用不同的 keras_nlp.samplers
物件重新編譯模型來控制生成。預設情況下,將使用 "greedy"
採樣。
此模型可以選擇配置 preprocessor
層,在這種情況下,它將在 fit()
、predict()
、evaluate()
和 generate()
期間自動將預處理應用於字串輸入。使用 from_preset()
創建模型時,預設情況下會執行此操作。
參數
keras_nlp.models.PaliGemmaBackbone
實例。keras_nlp.models.PaliGemmaCausalLMPreprocessor
或 None
。如果為 None
,則此模型將不應用預處理,並且應在調用模型之前對輸入進行預處理。範例
使用 generate()
進行文字生成。
image = np.random.rand(224, 224, 3)
pali_gemma_lm = keras_nlp.models.PaliGemmaCausalLM.from_preset(
"pali_gemma_3b_mix_224"
)
pali_gemma_lm.generate(
{
"images": image,
"text": ["answer en where is the cow standing?\n"]
}
)
# Generate with batched prompts.
pali_gemma_lm.generate(
{
"images": [image, image],
"text": ["answer en where is the cow standing?\n", "caption en\n"]
}
)
在沒有預處理的情況下使用 generate()
。
image = np.random.rand(224, 224, 3)
inputs = {
"images": [image, image],
# Token ids for "<bos> Keras is".
"token_ids": np.array([[2, 214064, 603, 0, 0, 0, 0]] * 2),
# Use `"padding_mask"` to indicate values that should not be overridden.
"padding_mask": np.array([[1, 1, 1, 0, 0, 0, 0]] * 2),
}
pali_gemma_lm = keras_nlp.models.PaliGemmaCausalLM.from_preset(
"pali_gemma_3b_mix_224",
preprocessor=None,
)
pali_gemma_lm.generate(inputs)
自定義骨幹和詞彙表。
tokenizer = keras_nlp.models.PaliGemmaTokenizer(
proto="proto.spm",
)
preprocessor = keras_nlp.models.PaliGemmaCausalLMPreprocessor(
tokenizer=tokenizer,
sequence_length=128,
)
backbone = keras_nlp.models.PaliGemmaBackbone()
pali_gemma_lm = keras_nlp.models.PaliGemmaCausalLM(
backbone=backbone,
preprocessor=preprocessor,
)
from_preset
方法PaliGemmaCausalLM.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,
)
預設名稱 | 參數 | 說明 |
---|---|---|
pali_gemma_3b_mix_224 | 2.92B | 影像大小 224,混合微調,文字序列長度為 256 |
pali_gemma_3b_mix_448 | 2.92B | 影像大小 448,混合微調,文字序列長度為 512 |
pali_gemma_3b_224 | 2.92B | 影像大小 224,預先訓練,文字序列長度為 128 |
pali_gemma_3b_448 | 2.92B | 影像大小 448,預先訓練,文字序列長度為 512 |
pali_gemma_3b_896 | 2.93B | 影像大小 896,預先訓練,文字序列長度為 512 |
generate
方法PaliGemmaCausalLM.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
、「自動」或 token ID 的元組。預設為「自動」,它使用 preprocessor.tokenizer.end_token_id
。未指定處理器將產生錯誤。None 會在生成 max_length
個 token 後停止生成。您也可以指定模型應停止的 token ID 列表。請注意,token 序列將分別被解釋為停止 token,不支援多 token 停止序列。backbone
屬性keras_nlp.models.PaliGemmaCausalLM.backbone
具有核心架構的 keras_nlp.models.Backbone
模型。
preprocessor
屬性keras_nlp.models.PaliGemmaCausalLM.preprocessor
用於預處理輸入的 keras_nlp.models.Preprocessor
層。