Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
62eaf03
Start landing code for Kaggle integration (#1320)
mattdangerw Nov 20, 2023
21fb04c
Switch byte pair tokenizer to save_assets/load_assets (#1322)
mattdangerw Nov 21, 2023
0e3c674
Convert SentencePieceTokenizer and associated models to new assets pa…
nkovela1 Nov 21, 2023
3619a6a
Add tests for Presets workflow, Add Metadata (#1326)
nkovela1 Nov 23, 2023
38806fd
Automatically add the keras framework to kaggle handles (#1331)
mattdangerw Nov 29, 2023
e0d34dc
Fix a failing byte pair tokenizer test (#1336)
mattdangerw Nov 30, 2023
0820d62
Use set comparison for assets (#1335)
mattdangerw Nov 30, 2023
c4b0c3c
Fix whisper tokenizer saving (#1334)
mattdangerw Nov 30, 2023
e3f8d06
Remove special case Bart from_preset (#1333)
mattdangerw Nov 30, 2023
dbb6487
Fix t5 tokenizer presets (#1339)
mattdangerw Nov 30, 2023
6130253
Script to convert presets (#1340)
mattdangerw Nov 30, 2023
814959b
Switch all preset to the new Kaggle format (#1338)
mattdangerw Dec 1, 2023
2aced24
Let kagglehub select latest version (#1342)
mattdangerw Dec 4, 2023
245b7e9
Use the proper title for example (#1346)
Philmod Dec 5, 2023
6ad8a30
Update conversion script (#1347)
mattdangerw Dec 6, 2023
7cc4323
Improve preset error messages (#1349)
mattdangerw Dec 7, 2023
9cc8110
Use subclass checking check_preset_class (#1344)
mattdangerw Dec 7, 2023
4606f32
Add a hacky fix for TF 2.13 and 2.14 weights.h5 loading (#1353)
mattdangerw Dec 7, 2023
9cb5838
Another fix for saving on Keras 2 (#1354)
mattdangerw Dec 7, 2023
039ff45
Switch our preset to there final kaggle location (#1345)
mattdangerw Dec 7, 2023
9cc3f84
Fix rebase issue in bytepair tokenizer (#1366)
nkovela1 Dec 12, 2023
6f7f9a0
Change encoding to utf-8 to fix Kaggle branch test failure for PyTorc…
sampathweb Dec 13, 2023
ddfca77
Fix GPU test issue with Keras 2 (#1368)
nkovela1 Dec 14, 2023
0e43f09
Add in-place modification of file keys for backwards compatibility (#…
nkovela1 Dec 15, 2023
4d84eb1
Add file renaming logic for modification (#1370)
nkovela1 Dec 16, 2023
29a0ae5
Fix task pre-processor in tasks (#1373)
sampathweb Dec 20, 2023
401e569
Backwards compatible fix for functional model saving (#1378)
mattdangerw Jan 4, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Remove special case Bart from_preset (#1333)
In doing this we need to remove an error for the case where a user
would try to use a sequence_length longer than the supported max length
of the backbone.

preprocessor = BertPreprocessor.from_preset(
    "bert_base_uncased",
    sequence_length=1500,
)

We would do this by reaching into the backbone config to read out the
max length.

Overall I think we shoud probably avoid cross cutting dependencies like
this, a preprocessor should not reach into a backbone config. Also it
is valid to want to use the vocab of a model to preprocess at a longer
sequence length than the backbone would allow (maybe you are using a
custom model).

Instead we should probably try to make a friendly error message from
the backbone (or position embedding), if a sequence length is too long.
  • Loading branch information
mattdangerw committed Jan 4, 2024
commit e3f8d062ebe72f2d9c95812a1a4b578ec863764f
60 changes: 0 additions & 60 deletions keras_nlp/models/bart/bart_preprocessor.py
Original file line number Diff line number Diff line change
Expand Up @@ -233,63 +233,3 @@ def tokenizer_cls(cls):
@classproperty
def presets(cls):
return copy.deepcopy(backbone_presets)

@classmethod
def from_preset(
cls,
preset,
**kwargs,
):
# Override base class's `from_preset` to handle `encoder_sequence_length`
# and `decoder_sequence_length`.
if not cls.presets:
raise NotImplementedError(
"No presets have been created for this class."
)
if preset not in cls.presets:
raise ValueError(
"`preset` must be one of "
f"""{", ".join(cls.presets)}. Received: {preset}."""
)

tokenizer = cls.tokenizer_cls.from_preset(preset)

metadata = cls.presets[preset]
# For task model presets, the backbone config is nested.
if "backbone" in metadata["config"]:
backbone_config = metadata["config"]["backbone"]["config"]
else:
backbone_config = metadata["config"]

# Use model's `max_sequence_length` if either `encoder_sequence_length`
# or `decoder_sequence_length` are unspecified; otherwise check that
# `encoder_sequence_length`/`decoder_sequence_length` are not too long.
encoder_sequence_length = kwargs.pop("encoder_sequence_length", None)
decoder_sequence_length = kwargs.pop("decoder_sequence_length", None)
max_sequence_length = backbone_config["max_sequence_length"]

def check_sequence_length(sequence_length, name):
if sequence_length is not None:
if sequence_length > max_sequence_length:
raise ValueError(
f"`{name}` cannot be longer than `{preset}` "
f"preset's `max_sequence_length` of {max_sequence_length}. "
f"Received: {sequence_length}."
)
return sequence_length
else:
return max_sequence_length

encoder_sequence_length = check_sequence_length(
encoder_sequence_length, "encoder_sequence_length"
)
decoder_sequence_length = check_sequence_length(
decoder_sequence_length, "decoder_sequence_length"
)

return cls(
tokenizer=tokenizer,
encoder_sequence_length=encoder_sequence_length,
decoder_sequence_length=decoder_sequence_length,
**kwargs,
)
23 changes: 0 additions & 23 deletions keras_nlp/models/preprocessor.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,31 +71,8 @@ def _legacy_from_preset(
**kwargs,
):
tokenizer = cls.tokenizer_cls.from_preset(preset)

metadata = cls.presets[preset]
# For task model presets, the backbone config is nested.
if "backbone" in metadata["config"]:
backbone_config = metadata["config"]["backbone"]["config"]
else:
backbone_config = metadata["config"]

# Use model's `max_sequence_length` if `sequence_length` unspecified;
# otherwise check that `sequence_length` not too long.
sequence_length = kwargs.pop("sequence_length", None)
max_sequence_length = backbone_config["max_sequence_length"]
if sequence_length is not None:
if sequence_length > max_sequence_length:
raise ValueError(
f"`sequence_length` cannot be longer than `{preset}` "
f"preset's `max_sequence_length` of {max_sequence_length}. "
f"Received: {sequence_length}."
)
else:
sequence_length = max_sequence_length

return cls(
tokenizer=tokenizer,
sequence_length=sequence_length,
**kwargs,
)

Expand Down