SPLIT PR: add user defined symbols and control symbols (#31305)
* PR SPLIT: moving origina changes for adding user defined symbols * adding gemma test and generalizing gemma converter * ruff * update common test * update serialization test * deberta v2 tests updates as rust version adds '.' as a user added token, so a space is not added * removing commented lines * applying feedback - user only added_tokens to add and check piece.type instead of trainer_spec for user_defined_symbols * add comment referencing sentencepiece
This commit is contained in:
@@ -144,7 +144,7 @@ class CamembertTokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
self.assertTrue(str(expected_eos) not in tokenizer.additional_special_tokens)
|
||||
self.assertIn(new_eos, tokenizer.added_tokens_decoder.values())
|
||||
self.assertEqual(tokenizer.added_tokens_decoder[tokenizer.eos_token_id], new_eos)
|
||||
self.assertDictEqual(expected, tokenizer.added_tokens_decoder)
|
||||
self.assertTrue(all(item in tokenizer.added_tokens_decoder.items() for item in expected.items()))
|
||||
return tokenizer
|
||||
|
||||
new_eos = AddedToken("[NEW_EOS]", rstrip=False, lstrip=True, normalized=False)
|
||||
@@ -198,7 +198,13 @@ class CamembertTokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
self.assertIn(new_eos, list(tokenizer_fast.added_tokens_decoder.values()))
|
||||
# We can't test the following because for BC we kept the default rstrip lstrip in slow not fast. Will comment once normalization is alright
|
||||
with self.subTest("Hub -> Fast == Hub -> Slow: make sure slow and fast tokenizer match"):
|
||||
self.assertDictEqual(EXPECTED_ADDED_TOKENS_DECODER, tokenizer_fast.added_tokens_decoder)
|
||||
with self.subTest("Hub -> Fast == Hub -> Slow: make sure slow and fast tokenizer match"):
|
||||
self.assertTrue(
|
||||
all(
|
||||
item in tokenizer.added_tokens_decoder.items()
|
||||
for item in EXPECTED_ADDED_TOKENS_DECODER.items()
|
||||
)
|
||||
)
|
||||
|
||||
EXPECTED_ADDED_TOKENS_DECODER = tokenizer_fast.added_tokens_decoder
|
||||
with tempfile.TemporaryDirectory() as tmp_dir_4:
|
||||
|
||||
@@ -89,8 +89,8 @@ class DebertaV2TokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
|
||||
def test_split_by_punct(self):
|
||||
# fmt: off
|
||||
sequence = "I was born in 92000, and this is falsé."
|
||||
tokens_target = ["▁", "<unk>", "▁was", "▁born", "▁in", "▁9", "2000", "▁", ",", "▁and", "▁this", "▁is", "▁fal", "s", "<unk>", "▁", ".", ]
|
||||
sequence = "I was born in 92000, and this is falsé!"
|
||||
tokens_target = ["▁", "<unk>", "▁was", "▁born", "▁in", "▁9", "2000", "▁", ",", "▁and", "▁this", "▁is", "▁fal", "s", "<unk>", "▁", "!", ]
|
||||
# fmt: on
|
||||
|
||||
tokenizer = DebertaV2Tokenizer(SAMPLE_VOCAB, unk_token="<unk>", split_by_punct=True)
|
||||
@@ -105,8 +105,8 @@ class DebertaV2TokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
|
||||
def test_do_lower_case_split_by_punct(self):
|
||||
# fmt: off
|
||||
sequence = "I was born in 92000, and this is falsé."
|
||||
tokens_target = ["▁i", "▁was", "▁born", "▁in", "▁9", "2000", "▁", ",", "▁and", "▁this", "▁is", "▁fal", "s", "<unk>", "▁", ".", ]
|
||||
sequence = "I was born in 92000, and this is falsé!"
|
||||
tokens_target = ["▁i", "▁was", "▁born", "▁in", "▁9", "2000", "▁", ",", "▁and", "▁this", "▁is", "▁fal", "s", "<unk>", "▁", "!", ]
|
||||
# fmt: on
|
||||
|
||||
tokenizer = DebertaV2Tokenizer(SAMPLE_VOCAB, unk_token="<unk>", do_lower_case=True, split_by_punct=True)
|
||||
@@ -121,8 +121,8 @@ class DebertaV2TokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
|
||||
def test_do_lower_case_split_by_punct_false(self):
|
||||
# fmt: off
|
||||
sequence = "I was born in 92000, and this is falsé."
|
||||
tokens_target = ["▁i", "▁was", "▁born", "▁in", "▁9", "2000", ",", "▁and", "▁this", "▁is", "▁fal", "s", "<unk>", ".", ]
|
||||
sequence = "I was born in 92000, and this is falsé!"
|
||||
tokens_target = ["▁i", "▁was", "▁born", "▁in", "▁9", "2000", ",", "▁and", "▁this", "▁is", "▁fal", "s", "<unk>", "!", ]
|
||||
# fmt: on
|
||||
|
||||
tokenizer = DebertaV2Tokenizer(SAMPLE_VOCAB, unk_token="<unk>", do_lower_case=True, split_by_punct=False)
|
||||
@@ -139,8 +139,8 @@ class DebertaV2TokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
|
||||
def test_do_lower_case_false_split_by_punct(self):
|
||||
# fmt: off
|
||||
sequence = "I was born in 92000, and this is falsé."
|
||||
tokens_target = ["▁", "<unk>", "▁was", "▁born", "▁in", "▁9", "2000", "▁", ",", "▁and", "▁this", "▁is", "▁fal", "s", "<unk>", "▁", ".", ]
|
||||
sequence = "I was born in 92000, and this is falsé!"
|
||||
tokens_target = ["▁", "<unk>", "▁was", "▁born", "▁in", "▁9", "2000", "▁", ",", "▁and", "▁this", "▁is", "▁fal", "s", "<unk>", "▁", "!", ]
|
||||
# fmt: on
|
||||
|
||||
tokenizer = DebertaV2Tokenizer(SAMPLE_VOCAB, unk_token="<unk>", do_lower_case=False, split_by_punct=True)
|
||||
@@ -177,7 +177,7 @@ class DebertaV2TokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
tokenizer = self.get_tokenizer()
|
||||
rust_tokenizer = self.get_rust_tokenizer()
|
||||
|
||||
sequence = "I was born in 92000, and this is falsé."
|
||||
sequence = "I was born in 92000, and this is falsé!"
|
||||
|
||||
tokens = tokenizer.convert_ids_to_tokens(tokenizer.encode(sequence, add_special_tokens=False))
|
||||
rust_tokens = rust_tokenizer.convert_ids_to_tokens(rust_tokenizer.encode(sequence, add_special_tokens=False))
|
||||
@@ -216,10 +216,10 @@ class DebertaV2TokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
self.assertListEqual(rust_back_tokens, back_tokens_target)
|
||||
|
||||
# fmt: off
|
||||
sequence = "I was born in 92000, and this is falsé."
|
||||
ids_target = [13, 1, 23, 386, 19, 561, 3050, 15, 17, 48, 25, 8256, 18, 1, 9]
|
||||
tokens_target = ["▁", "I", "▁was", "▁born", "▁in", "▁9", "2000", ",", "▁and", "▁this", "▁is", "▁fal", "s", "é", ".", ]
|
||||
back_tokens_target = ["▁", "<unk>", "▁was", "▁born", "▁in", "▁9", "2000", ",", "▁and", "▁this", "▁is", "▁fal", "s", "<unk>", ".", ]
|
||||
sequence = "I was born in 92000, and this is falsé!"
|
||||
ids_target = [13, 1, 23, 386, 19, 561, 3050, 15, 17, 48, 25, 8256, 18, 1, 187]
|
||||
tokens_target = ["▁", "I", "▁was", "▁born", "▁in", "▁9", "2000", ",", "▁and", "▁this", "▁is", "▁fal", "s", "é", "!", ]
|
||||
back_tokens_target = ["▁", "<unk>", "▁was", "▁born", "▁in", "▁9", "2000", ",", "▁and", "▁this", "▁is", "▁fal", "s", "<unk>", "!", ]
|
||||
# fmt: on
|
||||
|
||||
ids = tokenizer.encode(sequence, add_special_tokens=False)
|
||||
|
||||
@@ -193,6 +193,19 @@ class GemmaIntegrationTest(unittest.TestCase):
|
||||
},
|
||||
)
|
||||
|
||||
def test_user_added_tokens(self):
|
||||
# Ensure that user added tokens are not split in the fast tokenizer
|
||||
slow_tokenizer = self.tokenizer
|
||||
fast_tokenizer = self.rust_tokenizer
|
||||
|
||||
user_added_token = "<mask>"
|
||||
|
||||
slow_tokens = slow_tokenizer.convert_ids_to_tokens(slow_tokenizer.encode(user_added_token))
|
||||
fast_tokens = slow_tokenizer.convert_ids_to_tokens(fast_tokenizer.encode(user_added_token))
|
||||
|
||||
self.assertTrue(user_added_token in fast_tokens)
|
||||
self.assertEqual(slow_tokens, fast_tokens)
|
||||
|
||||
def test_fast_special_tokens(self):
|
||||
slow_tokenizer = self.tokenizer
|
||||
fast_tokenizer = self.rust_tokenizer
|
||||
|
||||
@@ -172,7 +172,7 @@ class RemBertTokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
self.assertTrue(str(expected_eos) not in tokenizer.additional_special_tokens)
|
||||
self.assertIn(new_eos, tokenizer.added_tokens_decoder.values())
|
||||
self.assertEqual(tokenizer.added_tokens_decoder[tokenizer.eos_token_id], new_eos)
|
||||
self.assertDictEqual(expected, tokenizer.added_tokens_decoder)
|
||||
self.assertTrue(all(item in tokenizer.added_tokens_decoder.items() for item in expected.items()))
|
||||
return tokenizer
|
||||
|
||||
new_eos = AddedToken("[NEW_EOS]", rstrip=False, lstrip=True, normalized=False, special=True)
|
||||
@@ -227,7 +227,12 @@ class RemBertTokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
self.assertIn(new_eos, list(tokenizer_fast.added_tokens_decoder.values()))
|
||||
# We can't test the following because for BC we kept the default rstrip lstrip in slow not fast. Will comment once normalization is alright
|
||||
with self.subTest("Hub -> Fast == Hub -> Slow: make sure slow and fast tokenizer match"):
|
||||
self.assertDictEqual(EXPECTED_ADDED_TOKENS_DECODER, tokenizer_fast.added_tokens_decoder)
|
||||
self.assertTrue(
|
||||
all(
|
||||
item in tokenizer.added_tokens_decoder.items()
|
||||
for item in EXPECTED_ADDED_TOKENS_DECODER.items()
|
||||
)
|
||||
)
|
||||
|
||||
EXPECTED_ADDED_TOKENS_DECODER = tokenizer_fast.added_tokens_decoder
|
||||
with tempfile.TemporaryDirectory() as tmp_dir_4:
|
||||
|
||||
Reference in New Issue
Block a user