OPTCausalLM model
- 원본 링크 : https://keras.io/api/keras_hub/models/opt/opt_causal_lm/
- 최종 확인 : 2024-11-26
OPTCausalLM class
keras_hub.models.OPTCausalLM(backbone, preprocessor=None, **kwargs)An end-to-end OPT model for causal language modeling.
A causal language model (LM) predicts the next token based on previous
tokens. This task setup can be used to train the model unsupervised on
plain text input, or to autoregressively generate plain text similar to
the data used for training. This task can be used for pre-training or
fine-tuning a GPT-2 model, simply by calling fit().
This model has a generate() method, which generates text based on a
prompt. The generation strategy used is controlled by an additional
sampler argument on compile(). You can recompile the model with
different keras_hub.samplers objects to control the generation. By
default, "top_k" sampling will be used.
This model can optionally be configured with a preprocessor layer, in
which case it will automatically apply preprocessing to string inputs during
fit(), predict(), evaluate() and generate(). This is done by default
when creating the model with from_preset().
Disclaimer: Pre-trained models are provided on an “as is” basis, without warranties or conditions of any kind. The underlying model is provided by a third party and subject to a separate license, available here.
Arguments
- backbone: A
keras_hub.models.OPTBackboneinstance. - preprocessor: A
keras_hub.models.OPTCausalLMPreprocessororNone. IfNone, this model will not apply preprocessing, and inputs should be preprocessed before calling the model.
Examples
Use generate() to do text generation.
opt_lm = keras_hub.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)Compile the generate() function with a custom sampler.
opt_lm = keras_hub.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_hub.samplers.BeamSampler(num_beams=2))
opt_lm.generate("I want to say", max_length=30)Use generate() without preprocessing.
# 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_hub.models.OPTCausalLM.from_preset(
"opt_125m_en",
preprocessor=None,
)
opt_lm.generate(prompt)Call fit() on a single batch.
features = ["The quick brown fox jumped.", "I forgot my homework."]
opt_lm = keras_hub.models.OPTCausalLM.from_preset("opt_125m_en")
opt_lm.fit(x=features, batch_size=2)Call fit() without preprocessing.
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_hub.models.OPTCausalLM.from_preset(
"opt_base_en",
preprocessor=None,
)
opt_lm.fit(x=x, y=y, sample_weight=sw, batch_size=2)Custom backbone and vocabulary.
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_hub.models.OPTTokenizer(
vocabulary=vocab,
merges=merges,
)
preprocessor = keras_hub.models.OPTCausalLMPreprocessor(
tokenizer=tokenizer,
sequence_length=128,
)
model = keras_hub.models.OPTBackbone(
vocabulary_size=50265,
num_layers=4,
num_heads=4,
hidden_dim=256,
intermediate_dim=512,
max_sequence_length=128,
)
opt_lm = keras_hub.models.OPTCausalLM(
backbone=backbone,
preprocessor=preprocessor,
)
opt_lm.fit(x=features, batch_size=2)from_preset method
OPTCausalLM.from_preset(preset, load_weights=True, **kwargs)Instantiate a keras_hub.models.Task from a model preset.
A preset is a directory of configs, weights and other file assets used
to save and load a pre-trained model. The preset can be passed as
one of:
- a built-in preset identifier like
'bert_base_en' - a Kaggle Models handle like
'kaggle://user/bert/keras/bert_base_en' - a Hugging Face handle like
'hf://user/bert_base_en' - a path to a local preset directory like
'./bert_base_en'
For any Task subclass, you can run cls.presets.keys() to list all
built-in presets available on the class.
This constructor can be called in one of two ways. Either from a task
specific base class like keras_hub.models.CausalLM.from_preset(), or
from a model class like keras_hub.models.BertTextClassifier.from_preset().
If calling from the a base class, the subclass of the returning object
will be inferred from the config in the preset directory.
Arguments
- preset: string. A built-in preset identifier, a Kaggle Models handle, a Hugging Face handle, or a path to a local directory.
- load_weights: bool. If
True, saved weights will be loaded into the model architecture. IfFalse, all weights will be randomly initialized.
Examples
# 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,
)| Preset name | Parameters | Description |
|---|---|---|
| opt_125m_en | 125.24M | 12-layer OPT model where case in maintained. Trained on BookCorpus, CommonCrawl, Pile, and PushShift.io corpora. |
| opt_1.3b_en | 1.32B | 24-layer OPT model where case in maintained. Trained on BookCorpus, CommonCrawl, Pile, and PushShift.io corpora. |
| opt_2.7b_en | 2.70B | 32-layer OPT model where case in maintained. Trained on BookCorpus, CommonCrawl, Pile, and PushShift.io corpora. |
| opt_6.7b_en | 6.70B | 32-layer OPT model where case in maintained. Trained on BookCorpus, CommonCrawl, Pile, and PushShift.io corpora. |
generate method
OPTCausalLM.generate(
inputs, max_length=None, stop_token_ids="auto", strip_prompt=False
)Generate text given prompt inputs.
This method generates text based on given inputs. The sampling method
used for generation can be set via the compile() method.
If inputs are a tf.data.Dataset, outputs will be generated
“batch-by-batch” and concatenated. Otherwise, all inputs will be handled
as a single batch.
If a preprocessor is attached to the model, inputs will be
preprocessed inside the generate() function and should match the
structure expected by the preprocessor layer (usually raw strings).
If a preprocessor is not attached, inputs should match the structure
expected by the backbone. See the example usage above for a
demonstration of each.
Arguments
- inputs: python data, tensor data, or a
tf.data.Dataset. If apreprocessoris attached to the model,inputsshould match the structure expected by thepreprocessorlayer. If apreprocessoris not attached,inputsshould match the structure expected thebackbonemodel. - max_length: Optional. int. The max length of the generated sequence.
Will default to the max configured
sequence_lengthof thepreprocessor. IfpreprocessorisNone,inputsshould be should be padded to the desired maximum length and this argument will be ignored. - stop_token_ids: Optional.
None, “auto”, or tuple of token ids. Defaults to “auto” which uses thepreprocessor.tokenizer.end_token_id. Not specifying a processor will produce an error. None stops generation after generatingmax_lengthtokens. You may also specify a list of token id’s the model should stop on. Note that sequences of tokens will each be interpreted as a stop token, multi-token stop sequences are not supported. - strip_prompt: Optional. By default, generate() returns the full prompt followed by its completion generated by the model. If this option is set to True, only the newly generated text is returned.
backbone property
keras_hub.models.OPTCausalLM.backboneA keras_hub.models.Backbone model with the core architecture.
preprocessor property
keras_hub.models.OPTCausalLM.preprocessorA keras_hub.models.Preprocessor layer used to preprocess input.