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
附加到模型,则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_nlp.models.PaliGemmaCausalLM.backbone
具有核心架构的 keras_nlp.models.Backbone
模型。
preprocessor
属性keras_nlp.models.PaliGemmaCausalLM.preprocessor
用于预处理输入的 keras_nlp.models.Preprocessor
层。