diff --git a/setup.py b/setup.py index 96cd1c16aed2..ba64455a5870 100644 --- a/setup.py +++ b/setup.py @@ -146,7 +146,7 @@ "tomli", "tiktoken", "timm>=1.0.23", - "tokenizers>=0.22.0,<=0.23.0", + "tokenizers>=0.23.1,<0.24.0", "torch>=2.4", "torchaudio", "torchvision", diff --git a/src/transformers/convert_slow_tokenizer.py b/src/transformers/convert_slow_tokenizer.py index 2637db428a11..5f7c80d1a9f2 100644 --- a/src/transformers/convert_slow_tokenizer.py +++ b/src/transformers/convert_slow_tokenizer.py @@ -481,8 +481,8 @@ def converted(self) -> Tokenizer: tokenizer.pre_tokenizer = pre_tokenizers.BertPreTokenizer() tokenizer.decoder = decoders.BPEDecoder(suffix=token_suffix) tokenizer.post_processor = processors.BertProcessing( - sep=(self.original_tokenizer.sep_token, self.original_tokenizer.sep_token_id), - cls=(self.original_tokenizer.cls_token, self.original_tokenizer.cls_token_id), + (self.original_tokenizer.sep_token, self.original_tokenizer.sep_token_id), + (self.original_tokenizer.cls_token, self.original_tokenizer.cls_token_id), ) return tokenizer @@ -552,10 +552,10 @@ def converted(self) -> Tokenizer: tokenizer.pre_tokenizer = pre_tokenizers.ByteLevel(add_prefix_space=ot.add_prefix_space) tokenizer.decoder = decoders.ByteLevel() tokenizer.post_processor = processors.RobertaProcessing( - sep=(ot.sep_token, ot.sep_token_id), - cls=(ot.cls_token, ot.cls_token_id), - add_prefix_space=ot.add_prefix_space, - trim_offsets=True, # True by default on Roberta (historical) + (ot.sep_token, ot.sep_token_id), + (ot.cls_token, ot.cls_token_id), + True, # trim_offsets: True by default on Roberta (historical) + ot.add_prefix_space, ) return tokenizer @@ -1459,10 +1459,10 @@ def converted(self) -> Tokenizer: # Hack to have a ByteLevel and TemplateProcessor tokenizer.post_processor = processors.RobertaProcessing( - sep=(self.original_tokenizer.eos_token, self.original_tokenizer.eos_token_id), - cls=(self.original_tokenizer.bos_token, self.original_tokenizer.bos_token_id), - add_prefix_space=False, - trim_offsets=False, + (self.original_tokenizer.eos_token, self.original_tokenizer.eos_token_id), + (self.original_tokenizer.bos_token, self.original_tokenizer.bos_token_id), + False, # trim_offsets + False, # add_prefix_space ) return tokenizer diff --git a/src/transformers/dependency_versions_table.py b/src/transformers/dependency_versions_table.py index 1c9d55d7507e..a70583dfe28d 100644 --- a/src/transformers/dependency_versions_table.py +++ b/src/transformers/dependency_versions_table.py @@ -73,7 +73,7 @@ "tomli": "tomli", "tiktoken": "tiktoken", "timm": "timm>=1.0.23", - "tokenizers": "tokenizers>=0.22.0,<=0.23.0", + "tokenizers": "tokenizers>=0.23.1,<0.24.0", "torch": "torch>=2.4", "torchaudio": "torchaudio", "torchvision": "torchvision", diff --git a/src/transformers/models/bertweet/tokenization_bertweet.py b/src/transformers/models/bertweet/tokenization_bertweet.py index 95e9f46787e8..5d639a705609 100644 --- a/src/transformers/models/bertweet/tokenization_bertweet.py +++ b/src/transformers/models/bertweet/tokenization_bertweet.py @@ -15,6 +15,7 @@ """Tokenization classes for BERTweet""" import html +import html.entities import os import re diff --git a/src/transformers/models/clip/tokenization_clip.py b/src/transformers/models/clip/tokenization_clip.py index 018c630afbce..cb0c02667d94 100644 --- a/src/transformers/models/clip/tokenization_clip.py +++ b/src/transformers/models/clip/tokenization_clip.py @@ -115,10 +115,10 @@ def __init__( ) self._tokenizer.post_processor = processors.RobertaProcessing( - sep=(str(eos_token), self.eos_token_id), - cls=(str(bos_token), self.bos_token_id), - add_prefix_space=False, - trim_offsets=False, + (str(eos_token), self.eos_token_id), + (str(bos_token), self.bos_token_id), + False, # trim_offsets + False, # add_prefix_space ) # Very ugly hack to enable padding to have a correct decoding see https://github.com/huggingface/tokenizers/issues/872 diff --git a/src/transformers/models/herbert/tokenization_herbert.py b/src/transformers/models/herbert/tokenization_herbert.py index eb0543187b62..97d7f12347af 100644 --- a/src/transformers/models/herbert/tokenization_herbert.py +++ b/src/transformers/models/herbert/tokenization_herbert.py @@ -103,8 +103,8 @@ def __init__( ) self._tokenizer.post_processor = processors.BertProcessing( - sep=(self.sep_token, 2), - cls=(self.cls_token, 0), + (self.sep_token, 2), + (self.cls_token, 0), ) diff --git a/src/transformers/models/layoutlmv2/tokenization_layoutlmv2.py b/src/transformers/models/layoutlmv2/tokenization_layoutlmv2.py index d8677d06facf..619efcd23c40 100644 --- a/src/transformers/models/layoutlmv2/tokenization_layoutlmv2.py +++ b/src/transformers/models/layoutlmv2/tokenization_layoutlmv2.py @@ -249,7 +249,7 @@ def __call__( word_labels: list[int] | list[list[int]] | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, stride: int = 0, pad_to_multiple_of: int | None = None, @@ -401,7 +401,7 @@ def batch_encode_plus( word_labels: list[int] | list[list[int]] | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, stride: int = 0, pad_to_multiple_of: int | None = None, @@ -466,7 +466,7 @@ def encode_plus( word_labels: list[int] | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, stride: int = 0, pad_to_multiple_of: int | None = None, diff --git a/src/transformers/models/layoutlmv3/tokenization_layoutlmv3.py b/src/transformers/models/layoutlmv3/tokenization_layoutlmv3.py index cda7c0b8f324..2fc53565b745 100644 --- a/src/transformers/models/layoutlmv3/tokenization_layoutlmv3.py +++ b/src/transformers/models/layoutlmv3/tokenization_layoutlmv3.py @@ -226,10 +226,10 @@ def __init__( sep_token_id = self.sep_token_id self._tokenizer.post_processor = processors.RobertaProcessing( - sep=(sep, sep_token_id), - cls=(cls, cls_token_id), - add_prefix_space=add_prefix_space, - trim_offsets=True, + (sep, sep_token_id), + (cls, cls_token_id), + True, # trim_offsets + add_prefix_space, ) self.cls_token_box = cls_token_box self.sep_token_box = sep_token_box @@ -246,7 +246,7 @@ def __call__( word_labels: list[int] | list[list[int]] | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, stride: int = 0, pad_to_multiple_of: int | None = None, @@ -398,7 +398,7 @@ def batch_encode_plus( word_labels: list[int] | list[list[int]] | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, stride: int = 0, pad_to_multiple_of: int | None = None, @@ -463,7 +463,7 @@ def encode_plus( word_labels: list[int] | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, stride: int = 0, pad_to_multiple_of: int | None = None, diff --git a/src/transformers/models/layoutxlm/tokenization_layoutxlm.py b/src/transformers/models/layoutxlm/tokenization_layoutxlm.py index b4d51c9bf3dc..25c8cad665ce 100644 --- a/src/transformers/models/layoutxlm/tokenization_layoutxlm.py +++ b/src/transformers/models/layoutxlm/tokenization_layoutxlm.py @@ -300,7 +300,7 @@ def encode_plus( word_labels: list[int] | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, stride: int = 0, pad_to_multiple_of: int | None = None, @@ -359,7 +359,7 @@ def batch_encode_plus( word_labels: list[list[int]] | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, stride: int = 0, pad_to_multiple_of: int | None = None, @@ -419,7 +419,7 @@ def __call__( word_labels: list[int] | list[list[int]] | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, stride: int = 0, pad_to_multiple_of: int | None = None, diff --git a/src/transformers/models/luke/tokenization_luke.py b/src/transformers/models/luke/tokenization_luke.py index bed415c79291..6b43b08f9a04 100644 --- a/src/transformers/models/luke/tokenization_luke.py +++ b/src/transformers/models/luke/tokenization_luke.py @@ -433,7 +433,7 @@ def __call__( entities_pair: EntityInput | list[EntityInput] | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, max_entity_length: int | None = None, stride: int = 0, @@ -1133,7 +1133,7 @@ def prepare_for_model( pair_entity_token_spans: list[tuple[int, int]] | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, max_entity_length: int | None = None, stride: int = 0, diff --git a/src/transformers/models/markuplm/tokenization_markuplm.py b/src/transformers/models/markuplm/tokenization_markuplm.py index 9ebfdde292f4..6af2438fffd9 100644 --- a/src/transformers/models/markuplm/tokenization_markuplm.py +++ b/src/transformers/models/markuplm/tokenization_markuplm.py @@ -284,7 +284,7 @@ def __call__( node_labels: list[int] | list[list[int]] | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, stride: int = 0, is_split_into_words: bool = False, @@ -459,7 +459,7 @@ def batch_encode_plus( node_labels: list[int] | list[list[int]] | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, stride: int = 0, pad_to_multiple_of: int | None = None, @@ -524,7 +524,7 @@ def encode_plus( node_labels: list[int] | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, stride: int = 0, pad_to_multiple_of: int | None = None, diff --git a/src/transformers/models/mluke/tokenization_mluke.py b/src/transformers/models/mluke/tokenization_mluke.py index abe9ff85d190..77f6dbe4387f 100644 --- a/src/transformers/models/mluke/tokenization_mluke.py +++ b/src/transformers/models/mluke/tokenization_mluke.py @@ -471,7 +471,7 @@ def __call__( entities_pair: EntityInput | list[EntityInput] | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, max_entity_length: int | None = None, stride: int = 0, @@ -1171,7 +1171,7 @@ def prepare_for_model( pair_entity_token_spans: list[tuple[int, int]] | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, max_entity_length: int | None = None, stride: int = 0, diff --git a/src/transformers/models/mpnet/tokenization_mpnet.py b/src/transformers/models/mpnet/tokenization_mpnet.py index 3400e31e5ea6..e7ac345fe15f 100644 --- a/src/transformers/models/mpnet/tokenization_mpnet.py +++ b/src/transformers/models/mpnet/tokenization_mpnet.py @@ -156,10 +156,10 @@ def __init__( sep_token_id = self.sep_token_id if self.sep_token_id is not None else 2 self._tokenizer.post_processor = processors.RobertaProcessing( - sep=(sep_str, sep_token_id), - cls=(cls_str, cls_token_id), - trim_offsets=True, - add_prefix_space=False, + (sep_str, sep_token_id), + (cls_str, cls_token_id), + True, # trim_offsets + False, # add_prefix_space ) @property diff --git a/src/transformers/models/pop2piano/tokenization_pop2piano.py b/src/transformers/models/pop2piano/tokenization_pop2piano.py index 7c58edaed35e..1964291129f8 100644 --- a/src/transformers/models/pop2piano/tokenization_pop2piano.py +++ b/src/transformers/models/pop2piano/tokenization_pop2piano.py @@ -305,7 +305,7 @@ def relative_tokens_ids_to_notes(self, tokens: np.ndarray, start_idx: float, cut notes = notes[note_order.argsort()] return notes - def notes_to_midi(self, notes: np.ndarray, beatstep: np.ndarray, offset_sec: int = 0.0): + def notes_to_midi(self, notes: np.ndarray, beatstep: np.ndarray, offset_sec: float = 0.0): """ Converts notes to Midi. @@ -474,7 +474,7 @@ def __call__( self, notes: np.ndarray | list[pretty_midi.Note] | list[list[pretty_midi.Note]], padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, pad_to_multiple_of: int | None = None, return_attention_mask: bool | None = None, diff --git a/src/transformers/models/roberta/tokenization_roberta.py b/src/transformers/models/roberta/tokenization_roberta.py index 40b4e78426f6..0ab78d76f931 100644 --- a/src/transformers/models/roberta/tokenization_roberta.py +++ b/src/transformers/models/roberta/tokenization_roberta.py @@ -168,10 +168,10 @@ def __init__( **kwargs, ) self._tokenizer.post_processor = processors.RobertaProcessing( - sep=(str(sep_token), self.sep_token_id), - cls=(str(cls_token), self.cls_token_id), - add_prefix_space=add_prefix_space, - trim_offsets=trim_offsets, + (str(sep_token), self.sep_token_id), + (str(cls_token), self.cls_token_id), + trim_offsets, + add_prefix_space, ) diff --git a/src/transformers/models/roc_bert/tokenization_roc_bert.py b/src/transformers/models/roc_bert/tokenization_roc_bert.py index 3663ee35f21b..a9641c93f1b8 100644 --- a/src/transformers/models/roc_bert/tokenization_roc_bert.py +++ b/src/transformers/models/roc_bert/tokenization_roc_bert.py @@ -175,7 +175,7 @@ def __call__( text_target: TextInput | list[TextInput] | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, max_target_length: int | None = None, stride: int = 0, @@ -299,7 +299,7 @@ def encode_plus( text_pair: TextInput | PreTokenizedInput | EncodedInput | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, stride: int = 0, is_split_into_words: bool = False, @@ -356,7 +356,7 @@ def batch_encode_plus( | list[EncodedInputPair], add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, stride: int = 0, is_split_into_words: bool = False, @@ -535,7 +535,7 @@ def prepare_for_model( pair_pronunciation_ids: list[int] | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, stride: int = 0, pad_to_multiple_of: int | None = None, diff --git a/src/transformers/models/tapas/tokenization_tapas.py b/src/transformers/models/tapas/tokenization_tapas.py index e3af74b816df..feacbce4134a 100644 --- a/src/transformers/models/tapas/tokenization_tapas.py +++ b/src/transformers/models/tapas/tokenization_tapas.py @@ -2539,7 +2539,7 @@ def parse_text(text): _PrimitiveNumericValue = float | tuple[float | None] -_SortKeyFn = Callable[[NumericValue], tuple[float, Ellipsis]] +_SortKeyFn = Callable[[NumericValue], tuple[float, ...]] _DATE_TUPLE_SIZE = 3 diff --git a/src/transformers/models/udop/tokenization_udop.py b/src/transformers/models/udop/tokenization_udop.py index cf49ebfd7e55..a1bf65af5c31 100644 --- a/src/transformers/models/udop/tokenization_udop.py +++ b/src/transformers/models/udop/tokenization_udop.py @@ -260,11 +260,11 @@ def __init__( @add_end_docstrings(UDOP_ENCODE_KWARGS_DOCSTRING) def __call__( self, - text: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] = None, + text: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = None, text_pair: PreTokenizedInput | list[PreTokenizedInput] | None = None, boxes: list[list[int]] | list[list[list[int]]] | None = None, word_labels: list[int] | list[list[int]] | None = None, - text_target: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] = None, + text_target: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = None, text_pair_target: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = None, **kwargs, ) -> BatchEncoding: @@ -305,7 +305,7 @@ def call_boxes( word_labels: list[int] | list[list[int]] | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, stride: int = 0, pad_to_multiple_of: int | None = None, @@ -467,7 +467,7 @@ def batch_encode_plus_boxes( word_labels: list[list[int]] | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, stride: int = 0, is_split_into_words: bool = False, @@ -767,7 +767,7 @@ def encode_boxes( word_labels: list[list[int]] | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, stride: int = 0, return_tensors: str | TensorType | None = None, @@ -810,7 +810,7 @@ def encode_plus_boxes( word_labels: list[list[int]] | None = None, add_special_tokens: bool = True, padding: bool | str | PaddingStrategy = False, - truncation: bool | str | TruncationStrategy = None, + truncation: bool | str | TruncationStrategy | None = None, max_length: int | None = None, stride: int = 0, is_split_into_words: bool = False, diff --git a/tests/test_tokenization_common.py b/tests/test_tokenization_common.py index 4335a8fd920c..64640f5d9f51 100644 --- a/tests/test_tokenization_common.py +++ b/tests/test_tokenization_common.py @@ -1713,14 +1713,9 @@ def test_maximum_encoding_length_single_input(self): # Overflowing tokens are handled quite differently in slow and fast tokenizers if isinstance(tokenizer, TokenizersBackend): truncated_sequence = information["input_ids"][0] - overflowing_tokens = information["input_ids"][1] - self.assertEqual(len(information["input_ids"]), 2) self.assertEqual(len(truncated_sequence), total_length - 2) self.assertEqual(truncated_sequence, sequence[:-2]) - - self.assertEqual(len(overflowing_tokens), 2 + stride) - self.assertEqual(overflowing_tokens, sequence[-(2 + stride) :]) else: truncated_sequence = information["input_ids"] overflowing_tokens = information["overflowing_tokens"] @@ -1752,8 +1747,6 @@ def test_maximum_encoding_length_pair_input(self): self.assertGreater(len(seq1_tokens), 2 + stride) - smallest = seq1_tokens if len(seq0_tokens) > len(seq1_tokens) else seq0_tokens - # We are not using the special tokens - a bit too hard to test all the tokenizers with this # TODO try this again later sequence = tokenizer.encode(seq_0, seq_1, add_special_tokens=False) # , add_prefix_space=False) @@ -1835,9 +1828,6 @@ def test_maximum_encoding_length_pair_input(self): tokenizer.encode(seq_0, add_special_tokens=False) + tokenizer.encode(seq_1, add_special_tokens=False)[-(2 + stride) :] ) - overflow_longest_sequence = ( - overflow_first_sequence if len(seq0_tokens) > len(seq1_tokens) else overflow_second_sequence - ) # Overflowing tokens are handled quite differently in slow and fast tokenizers if isinstance(tokenizer, TokenizersBackend): @@ -1852,14 +1842,9 @@ def test_maximum_encoding_length_pair_input(self): # add_prefix_space=False, ) truncated_sequence = information["input_ids"][0] - overflowing_tokens = information["input_ids"][1] - self.assertEqual(len(information["input_ids"]), 2) self.assertEqual(len(truncated_sequence), len(sequence) - 2) self.assertEqual(truncated_sequence, truncated_longest_sequence) - - self.assertEqual(len(overflowing_tokens), 2 + stride + len(smallest)) - self.assertEqual(overflowing_tokens, overflow_longest_sequence) else: # No overflowing tokens when using 'longest' in python tokenizers with self.assertRaises(ValueError) as context: @@ -1895,14 +1880,9 @@ def test_maximum_encoding_length_pair_input(self): # add_prefix_space=False, ) truncated_sequence = information["input_ids"][0] - overflowing_tokens = information["input_ids"][1] - self.assertEqual(len(information["input_ids"]), 2) self.assertEqual(len(truncated_sequence), len(sequence) - 2) self.assertEqual(truncated_sequence, truncated_longest_sequence) - - self.assertEqual(len(overflowing_tokens), 2 + stride + len(smallest)) - self.assertEqual(overflowing_tokens, overflow_longest_sequence) else: # No overflowing tokens when using 'longest' in python tokenizers with self.assertRaises(ValueError) as context: