KerasHub: 预训练模型 / API文档 / 模型架构 / T5Gemma / T5GemmaSeq2SeqLM 模型

T5GemmaSeq2SeqLM 模型

[源代码]

T5GemmaSeq2SeqLM

keras_hub.models.T5GemmaSeq2SeqLM(backbone, preprocessor=None, **kwargs)

一个用于序列到序列语言建模的端到端 T5Gemma 模型。

序列到序列语言模型(LM)是一种用于条件文本生成的编码器-解码器模型。编码器接收“上下文”文本(输入给编码器),解码器根据编码器输入和前一个 token 来预测下一个 token。您可以对 T5GemmaSeq2SeqLM 进行微调,以生成用于任何序列到序列任务(例如,翻译或摘要)的文本。

该模型有一个 generate() 方法,该方法根据提示生成文本。使用的生成策略由 compile() 上的附加 sampler 参数控制。您可以使用不同的 keras_hub.samplers 对象重新编译模型来控制生成。默认情况下,将使用“greedy”采样。

此模型可以选择性地配置一个 preprocessor 层,在这种情况下,它将在 fit()predict()evaluate()generate() 期间自动对字符串输入应用预处理。使用 from_preset() 创建模型时,默认情况下会执行此操作。

参数

示例

使用 generate() 进行文本生成。

import numpy as np
t5gemma_lm = keras_hub.models.T5GemmaSeq2SeqLM.from_preset(
    "t5gemma_b_b_prefixlm_it"
)
# Generate with encoder-only input.
t5gemma_lm.generate("The quick brown fox jumped.", max_length=30)

# Generate with batched encoder-only inputs.
t5gemma_lm.generate(
    ["The quick brown fox jumped.", "The whale."],
    max_length=30
)
# Generate with encoder and decoder inputs.
t5gemma_lm.generate(
    {
        "encoder_text": "The quick brown fox jumped.",
        "decoder_text": "A fast fox"
    },
    max_length=30
)

使用自定义采样器编译 generate() 函数。

t5gemma_lm = keras_hub.models.T5GemmaSeq2SeqLM.from_preset(
    "t5gemma_b_b_prefixlm_it"
)
t5gemma_lm.compile(sampler="top_k")
t5gemma_lm.generate("I want to say", max_length=30)

t5gemma_lm.compile(sampler=keras_hub.samplers.BeamSampler(num_beams=2))
t5gemma_lm.generate("I want to say", max_length=30)

不带预处理使用 generate()

# Preprocessed inputs, with encoder inputs corresponding to
# "The quick brown fox", and the decoder inputs to "A fast fox".
# Use `"padding_mask"` to indicate values that should not be overridden.
prompt = {
    "encoder_token_ids": np.array([[2, 10, 133, 2119, 6219, 23602, 1, 0]]),
    "encoder_padding_mask": np.array([[1, 1, 1, 1, 1, 1, 1, 0]]),
    "decoder_token_ids": np.array([[2, 133, 1769, 1, 0, 0, 0]]),
    "decoder_padding_mask": np.array([[1, 1, 1, 1, 0, 0, 0]])
}

t5gemma_lm = keras_hub.models.T5GemmaSeq2SeqLM.from_preset(
    "t5gemma_b_b_prefixlm_it",
    preprocessor=None,
)
t5gemma_lm.generate(prompt)

在单个批次上调用 fit()

features = {
    "encoder_text": ["The quick fox jumped.", "I forgot my homework."],
    "decoder_text": ["The fast hazel fox leapt.", "I forgot my assignment."]
}
t5gemma_lm = keras_hub.models.T5GemmaSeq2SeqLM.from_preset(
    "t5gemma_b_b_prefixlm_it"
)
t5gemma_lm.fit(x=features, batch_size=2)

不带预处理调用 fit()

x = {
    "encoder_token_ids": np.array([[2, 133, 2119, 1, 0]] * 2),
    "encoder_padding_mask": np.array([[1, 1, 1, 1, 0]] * 2),
    "decoder_token_ids": np.array([[2, 133, 1769, 1, 0]] * 2),
    "decoder_padding_mask": np.array([[1, 1, 1, 1, 1]] * 2),
}
y = np.array([[133, 1769, 1, 0, 0]] * 2)
sw = np.array([[1, 1, 1, 0, 0]] * 2)

t5gemma_lm = keras_hub.models.T5GemmaSeq2SeqLM.from_preset(
    "t5gemma_b_b_prefixlm_it",
    preprocessor=None,
)
t5gemma_lm.fit(x=x, y=y, sample_weight=sw, batch_size=2)

自定义骨干和词汇表。

features = {
    "encoder_text": ["The quick fox jumped.", "I forgot my homework."],
    "decoder_text": ["The fast hazel fox leapt.", "I forgot my assignment."]
}
tokenizer = keras_hub.models.T5GemmaTokenizer(
    proto="proto.spm",
)
preprocessor = keras_hub.models.T5GemmaSeq2SeqLMPreprocessor(
    tokenizer=tokenizer,
    encoder_sequence_length=128,
    decoder_sequence_length=128,
)
backbone = keras_hub.models.T5GemmaBackbone(
    vocabulary_size=32000,
    # Encoder parameters.
    encoder_hidden_dim=256,
    encoder_intermediate_dim=512,
    encoder_num_layers=4,
    encoder_num_attention_heads=4,
    encoder_num_key_value_heads=2,
    encoder_head_dim=64,
    encoder_layer_types=["full_attention"] * 4,
    # Decoder parameters.
    decoder_hidden_dim=256,
    decoder_intermediate_dim=512,
    decoder_num_layers=4,
    decoder_num_attention_heads=4,
    decoder_num_key_value_heads=2,
    decoder_head_dim=64,
    decoder_layer_types=["full_attention"] * 4,
    # Common parameters.
    dropout_rate=0.1,
    rms_norm_eps=1e-6,
    query_pre_attn_scalar=1.0,
    attention_bias=False,
    hidden_activation="gelu_approximate",
)
t5gemma_lm = keras_hub.models.T5GemmaSeq2SeqLM(
    backbone=backbone,
    preprocessor=preprocessor,
)
t5gemma_lm.fit(x=features, batch_size=2)

[源代码]

from_preset 方法

T5GemmaSeq2SeqLM.from_preset(preset, load_weights=True, **kwargs)

从模型预设实例化一个 keras_hub.models.Task

预设是一个包含配置、权重和其他文件资产的目录,用于保存和加载预训练模型。preset 可以作为以下之一传递:

  1. 一个内置的预设标识符,如 'bert_base_en'
  2. 一个 Kaggle Models 句柄,如 'kaggle://user/bert/keras/bert_base_en'
  3. 一个 Hugging Face 句柄,如 'hf://user/bert_base_en'
  4. 一个本地预设目录的路径,如 './bert_base_en'

对于任何 Task 子类,您都可以运行 cls.presets.keys() 来列出该类上所有可用的内置预设。

此构造函数可以通过两种方式调用。一种方式是从特定任务的基类(如 keras_hub.models.CausalLM.from_preset())调用,另一种方式是从模型类(如 keras_hub.models.BertTextClassifier.from_preset())调用。如果从基类调用,返回对象的子类将从预设目录中的配置推断出来。

参数

  • preset:字符串。一个内置预设标识符、一个 Kaggle Models 句柄、一个 Hugging Face 句柄或一个本地目录的路径。
  • load_weights: 布尔值。如果为 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,
)
预设 参数 描述
t5gemma_s_s_ul2 312.52M T5Gemma S/S 模型,具有小型编码器和小型解码器,被适配为 UL2 模型。
t5gemma_s_s_prefixlm 312.52M T5Gemma S/S 模型,具有小型编码器和小型解码器,被适配为前缀语言模型。
t5gemma_s_s_ul2_it 312.52M T5Gemma S/S 模型,具有小型编码器和小型解码器,被适配为 UL2 模型,并进行了指令遵循微调。
t5gemma_s_s_prefixlm_it 312.52M T5Gemma S/S 模型,具有小型编码器和小型解码器,被适配为前缀语言模型,并进行了指令遵循微调。
t5gemma_b_b_ul2 591.49M T5Gemma B/B 模型,具有基础编码器和基础解码器,被适配为 UL2 模型。
t5gemma_b_b_prefixlm 591.49M T5Gemma B/B 模型,具有基础编码器和基础解码器,被适配为前缀语言模型。
t5gemma_b_b_ul2_it 591.49M T5Gemma B/B 模型,具有基础编码器和基础解码器,被适配为 UL2 模型,并进行了指令遵循微调。
t5gemma_b_b_prefixlm_it 591.49M T5Gemma B/B 模型,具有基础编码器和基础解码器,被适配为前缀语言模型,并进行了指令遵循微调。
t5gemma_l_l_ul2 1.24B T5Gemma L/L 模型,具有大型编码器和大型解码器,被适配为 UL2 模型。
t5gemma_l_l_prefixlm 1.24B T5Gemma L/L 模型,具有大型编码器和大型解码器,被适配为前缀语言模型。
t5gemma_l_l_ul2_it 1.24B T5Gemma L/L 模型,具有大型编码器和大型解码器,被适配为 UL2 模型,并进行了指令遵循微调。
t5gemma_l_l_prefixlm_it 1.24B T5Gemma L/L 模型,具有大型编码器和大型解码器,被适配为前缀语言模型,并进行了指令遵循微调。
t5gemma_ml_ml_ul2 2.20B T5Gemma ML/ML 模型,具有中大型编码器和中大型解码器,被适配为 UL2 模型。
t5gemma_ml_ml_prefixlm 2.20B T5Gemma ML/ML 模型,具有中大型编码器和中大型解码器,被适配为前缀语言模型。
t5gemma_ml_ml_ul2_it 2.20B T5Gemma ML/ML 模型,具有中大型编码器和中大型解码器,被适配为 UL2 模型,并进行了指令遵循微调。
t5gemma_ml_ml_prefixlm_it 2.20B T5Gemma ML/ML 模型,具有中大型编码器和中大型解码器,被适配为前缀语言模型,并进行了指令遵循微调。
t5gemma_xl_xl_ul2 3.77B T5Gemma XL/XL 模型,具有超大型编码器和超大型解码器,被适配为 UL2 模型。
t5gemma_xl_xl_prefixlm 3.77B T5Gemma XL/XL 模型,具有超大型编码器和超大型解码器,被适配为前缀语言模型。
t5gemma_xl_xl_ul2_it 3.77B T5Gemma XL/XL 模型,具有超大型编码器和超大型解码器,被适配为 UL2 模型,并进行了指令遵循微调。
t5gemma_xl_xl_prefixlm_it 3.77B T5Gemma XL/XL 模型,具有超大型编码器和超大型解码器,被适配为前缀语言模型,并进行了指令遵循微调。
t5gemma_2b_2b_ul2 5.60B T5Gemma 2B/2B 模型,具有 20 亿参数的编码器和 20 亿参数的解码器,被适配为 UL2 模型。
t5gemma_2b_2b_prefixlm 5.60B T5Gemma 2B/2B 模型,具有 20 亿参数的编码器和 20 亿参数的解码器,被适配为前缀语言模型。
t5gemma_2b_2b_ul2_it 5.60B T5Gemma 2B/2B 模型,具有 20 亿参数的编码器和 20 亿参数的解码器,被适配为 UL2 模型,并进行了指令遵循微调。
t5gemma_2b_2b_prefixlm_it 5.60B T5Gemma 2B/2B 模型,具有 20 亿参数的编码器和 20 亿参数的解码器,被适配为前缀语言模型,并进行了指令遵循微调。
t5gemma_9b_2b_ul2 12.29B T5Gemma 9B/2B 模型,具有 90 亿参数的编码器和 20 亿参数的解码器,被适配为 UL2 模型。
t5gemma_9b_2b_prefixlm 12.29B T5Gemma 9B/2B 模型,具有 90 亿参数的编码器和 20 亿参数的解码器,被适配为前缀语言模型。
t5gemma_9b_2b_ul2_it 12.29B T5Gemma 9B/2B 模型,具有 90 亿参数的编码器和 20 亿参数的解码器,被适配为 UL2 模型,并进行了指令遵循微调。
t5gemma_9b_2b_prefixlm_it 12.29B T5Gemma 9B/2B 模型,具有 90 亿参数的编码器和 20 亿参数的解码器,被适配为前缀语言模型,并进行了指令遵循微调。
t5gemma_9b_9b_ul2 20.33B T5Gemma 9B/9B 模型,具有 90 亿参数的编码器和 90 亿参数的解码器,被适配为 UL2 模型。
t5gemma_9b_9b_prefixlm 20.33B T5Gemma 9B/9B 模型,具有 90 亿参数的编码器和 90 亿参数的解码器,被适配为前缀语言模型。
t5gemma_9b_9b_ul2_it 20.33B T5Gemma 9B/9B 模型,具有 90 亿参数的编码器和 90 亿参数的解码器,被适配为 UL2 模型,并进行了指令遵循微调。
t5gemma_9b_9b_prefixlm_it 20.33B T5Gemma 9B/9B 模型,具有 90 亿参数的编码器和 90 亿参数的解码器,被适配为前缀语言模型,并进行了指令遵循微调。

[源代码]

generate 方法

T5GemmaSeq2SeqLM.generate(
    inputs, max_length=None, stop_token_ids="auto", strip_prompt=False
)

根据提示 inputs 生成文本。

此方法根据给定的 inputs 生成文本。用于生成的采样方法可以通过 compile() 方法设置。

如果 inputs 是一个 tf.data.Dataset,输出将“逐批”生成并连接起来。否则,所有输入将被视为单个批次处理。

如果模型附加了 preprocessorinputs 将在 generate() 函数内部进行预处理,并且应与 preprocessor 层期望的结构匹配(通常是原始字符串)。如果未附加 preprocessor,则 inputs 应与 backbone 期望的结构匹配。请参阅上面的示例用法以了解每个的演示。

参数

  • inputs: python 数据、张量数据或 tf.data.Dataset。如果模型附加了 preprocessorinputs 应与 preprocessor 层期望的结构匹配。如果未附加 preprocessorinputs 应与 backbone 模型期望的结构匹配。
  • max_length: 可选。int。生成序列的最大长度。将默认为 preprocessor 配置的 sequence_length 最大值。如果 preprocessorNone,则 inputs 应填充到所需的最大长度,并且此参数将被忽略。
  • stop_token_ids: 可选。None、"auto" 或 token ID 的元组。默认为 "auto",它使用 preprocessor.tokenizer.end_token_id。不指定处理器将产生错误。None 在生成 max_length 个 token 后停止生成。您也可以指定一个 token ID 列表,模型应在此停止。请注意,token 序列中的每个序列都将被解释为一个停止 token,不支持多 token 停止序列。
  • strip_prompt:可选。默认情况下,generate() 返回完整的提示及其后由模型生成的补全内容。如果此选项设置为 True,则只返回新生成的文本。

backbone 属性

keras_hub.models.T5GemmaSeq2SeqLM.backbone

一个具有核心架构的 keras_hub.models.Backbone 模型。


preprocessor 属性

keras_hub.models.T5GemmaSeq2SeqLM.preprocessor

用于预处理输入的 keras_hub.models.Preprocessor 层。