Enable padding_side as call time kwargs (#33385)
* fix * add padding-side kwarg * add padding side in all models & fix tests * fix copies * fix tests
This commit is contained in:
committed by
GitHub
parent
1027a532c5
commit
4b0418df11
@@ -21,6 +21,8 @@ import tempfile
|
||||
import unittest
|
||||
from typing import List
|
||||
|
||||
from parameterized import parameterized
|
||||
|
||||
from transformers import (
|
||||
AddedToken,
|
||||
LayoutLMv2TokenizerFast,
|
||||
@@ -393,7 +395,8 @@ class LayoutLMv2TokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
def test_split_special_tokens(self):
|
||||
pass
|
||||
|
||||
def test_encode_plus_with_padding(self):
|
||||
@parameterized.expand([(True,), (False,)])
|
||||
def test_encode_plus_with_padding(self, use_padding_as_call_kwarg: bool):
|
||||
tokenizers = self.get_tokenizers(do_lower_case=False)
|
||||
for tokenizer in tokenizers:
|
||||
with self.subTest(f"{tokenizer.__class__.__name__}"):
|
||||
@@ -444,15 +447,18 @@ class LayoutLMv2TokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
self.assertTrue(special_tokens_mask == not_padded_special_tokens_mask)
|
||||
|
||||
# Test right padding
|
||||
tokenizer.padding_side = "right"
|
||||
tokenizer_kwargs_right = {
|
||||
"max_length": sequence_length + padding_size,
|
||||
"padding": "max_length",
|
||||
"return_special_tokens_mask": True,
|
||||
}
|
||||
|
||||
right_padded_sequence = tokenizer.encode_plus(
|
||||
words,
|
||||
boxes=boxes,
|
||||
max_length=sequence_length + padding_size,
|
||||
padding="max_length",
|
||||
return_special_tokens_mask=True,
|
||||
)
|
||||
if not use_padding_as_call_kwarg:
|
||||
tokenizer.padding_side = "right"
|
||||
else:
|
||||
tokenizer_kwargs_right["padding_side"] = "right"
|
||||
|
||||
right_padded_sequence = tokenizer.encode_plus(words, boxes=boxes, **tokenizer_kwargs_right)
|
||||
right_padded_input_ids = right_padded_sequence["input_ids"]
|
||||
|
||||
right_padded_special_tokens_mask = right_padded_sequence["special_tokens_mask"]
|
||||
@@ -463,14 +469,18 @@ class LayoutLMv2TokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
self.assertTrue(special_tokens_mask + [1] * padding_size == right_padded_special_tokens_mask)
|
||||
|
||||
# Test left padding
|
||||
tokenizer.padding_side = "left"
|
||||
left_padded_sequence = tokenizer.encode_plus(
|
||||
words,
|
||||
boxes=boxes,
|
||||
max_length=sequence_length + padding_size,
|
||||
padding="max_length",
|
||||
return_special_tokens_mask=True,
|
||||
)
|
||||
tokenizer_kwargs_left = {
|
||||
"max_length": sequence_length + padding_size,
|
||||
"padding": "max_length",
|
||||
"return_special_tokens_mask": True,
|
||||
}
|
||||
|
||||
if not use_padding_as_call_kwarg:
|
||||
tokenizer.padding_side = "left"
|
||||
else:
|
||||
tokenizer_kwargs_left["padding_side"] = "left"
|
||||
|
||||
left_padded_sequence = tokenizer.encode_plus(words, boxes=boxes, **tokenizer_kwargs_left)
|
||||
left_padded_input_ids = left_padded_sequence["input_ids"]
|
||||
left_padded_special_tokens_mask = left_padded_sequence["special_tokens_mask"]
|
||||
left_padded_sequence_length = len(left_padded_input_ids)
|
||||
|
||||
@@ -22,6 +22,8 @@ import tempfile
|
||||
import unittest
|
||||
from typing import List
|
||||
|
||||
from parameterized import parameterized
|
||||
|
||||
from transformers import (
|
||||
AddedToken,
|
||||
LayoutLMv3TokenizerFast,
|
||||
@@ -273,7 +275,8 @@ class LayoutLMv3TokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
def test_split_special_tokens(self):
|
||||
pass
|
||||
|
||||
def test_encode_plus_with_padding(self):
|
||||
@parameterized.expand([(True,), (False,)])
|
||||
def test_encode_plus_with_padding(self, use_padding_as_call_kwarg: bool):
|
||||
tokenizers = self.get_tokenizers(do_lower_case=False)
|
||||
for tokenizer in tokenizers:
|
||||
with self.subTest(f"{tokenizer.__class__.__name__}"):
|
||||
@@ -324,15 +327,18 @@ class LayoutLMv3TokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
self.assertTrue(special_tokens_mask == not_padded_special_tokens_mask)
|
||||
|
||||
# Test right padding
|
||||
tokenizer.padding_side = "right"
|
||||
tokenizer_kwargs_right = {
|
||||
"max_length": sequence_length + padding_size,
|
||||
"padding": "max_length",
|
||||
"return_special_tokens_mask": True,
|
||||
}
|
||||
|
||||
right_padded_sequence = tokenizer.encode_plus(
|
||||
words,
|
||||
boxes=boxes,
|
||||
max_length=sequence_length + padding_size,
|
||||
padding="max_length",
|
||||
return_special_tokens_mask=True,
|
||||
)
|
||||
if not use_padding_as_call_kwarg:
|
||||
tokenizer.padding_side = "right"
|
||||
else:
|
||||
tokenizer_kwargs_right["padding_side"] = "right"
|
||||
|
||||
right_padded_sequence = tokenizer.encode_plus(words, boxes=boxes, **tokenizer_kwargs_right)
|
||||
right_padded_input_ids = right_padded_sequence["input_ids"]
|
||||
|
||||
right_padded_special_tokens_mask = right_padded_sequence["special_tokens_mask"]
|
||||
@@ -343,14 +349,18 @@ class LayoutLMv3TokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
self.assertTrue(special_tokens_mask + [1] * padding_size == right_padded_special_tokens_mask)
|
||||
|
||||
# Test left padding
|
||||
tokenizer.padding_side = "left"
|
||||
left_padded_sequence = tokenizer.encode_plus(
|
||||
words,
|
||||
boxes=boxes,
|
||||
max_length=sequence_length + padding_size,
|
||||
padding="max_length",
|
||||
return_special_tokens_mask=True,
|
||||
)
|
||||
tokenizer_kwargs_left = {
|
||||
"max_length": sequence_length + padding_size,
|
||||
"padding": "max_length",
|
||||
"return_special_tokens_mask": True,
|
||||
}
|
||||
|
||||
if not use_padding_as_call_kwarg:
|
||||
tokenizer.padding_side = "left"
|
||||
else:
|
||||
tokenizer_kwargs_left["padding_side"] = "left"
|
||||
|
||||
left_padded_sequence = tokenizer.encode_plus(words, boxes=boxes, **tokenizer_kwargs_left)
|
||||
left_padded_input_ids = left_padded_sequence["input_ids"]
|
||||
left_padded_special_tokens_mask = left_padded_sequence["special_tokens_mask"]
|
||||
left_padded_sequence_length = len(left_padded_input_ids)
|
||||
|
||||
@@ -19,6 +19,8 @@ import tempfile
|
||||
import unittest
|
||||
from typing import List
|
||||
|
||||
from parameterized import parameterized
|
||||
|
||||
from transformers import (
|
||||
AddedToken,
|
||||
LayoutXLMTokenizerFast,
|
||||
@@ -324,7 +326,8 @@ class LayoutXLMTokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
decoded = tokenizer.decode(encoded, spaces_between_special_tokens=self.space_between_special_tokens)
|
||||
self.assertIn(decoded, [output, output.lower()])
|
||||
|
||||
def test_encode_plus_with_padding(self):
|
||||
@parameterized.expand([(True,), (False,)])
|
||||
def test_encode_plus_with_padding(self, use_padding_as_call_kwarg: bool):
|
||||
tokenizers = self.get_tokenizers(do_lower_case=False)
|
||||
for tokenizer in tokenizers:
|
||||
with self.subTest(f"{tokenizer.__class__.__name__}"):
|
||||
@@ -375,15 +378,18 @@ class LayoutXLMTokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
self.assertTrue(special_tokens_mask == not_padded_special_tokens_mask)
|
||||
|
||||
# Test right padding
|
||||
tokenizer.padding_side = "right"
|
||||
tokenizer_kwargs_right = {
|
||||
"max_length": sequence_length + padding_size,
|
||||
"padding": "max_length",
|
||||
"return_special_tokens_mask": True,
|
||||
}
|
||||
|
||||
right_padded_sequence = tokenizer.encode_plus(
|
||||
words,
|
||||
boxes=boxes,
|
||||
max_length=sequence_length + padding_size,
|
||||
padding="max_length",
|
||||
return_special_tokens_mask=True,
|
||||
)
|
||||
if not use_padding_as_call_kwarg:
|
||||
tokenizer.padding_side = "right"
|
||||
else:
|
||||
tokenizer_kwargs_right["padding_side"] = "right"
|
||||
|
||||
right_padded_sequence = tokenizer.encode_plus(words, boxes=boxes, **tokenizer_kwargs_right)
|
||||
right_padded_input_ids = right_padded_sequence["input_ids"]
|
||||
|
||||
right_padded_special_tokens_mask = right_padded_sequence["special_tokens_mask"]
|
||||
@@ -394,14 +400,18 @@ class LayoutXLMTokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
self.assertTrue(special_tokens_mask + [1] * padding_size == right_padded_special_tokens_mask)
|
||||
|
||||
# Test left padding
|
||||
tokenizer.padding_side = "left"
|
||||
left_padded_sequence = tokenizer.encode_plus(
|
||||
words,
|
||||
boxes=boxes,
|
||||
max_length=sequence_length + padding_size,
|
||||
padding="max_length",
|
||||
return_special_tokens_mask=True,
|
||||
)
|
||||
tokenizer_kwargs_left = {
|
||||
"max_length": sequence_length + padding_size,
|
||||
"padding": "max_length",
|
||||
"return_special_tokens_mask": True,
|
||||
}
|
||||
|
||||
if not use_padding_as_call_kwarg:
|
||||
tokenizer.padding_side = "left"
|
||||
else:
|
||||
tokenizer_kwargs_left["padding_side"] = "left"
|
||||
|
||||
left_padded_sequence = tokenizer.encode_plus(words, boxes=boxes, **tokenizer_kwargs_left)
|
||||
left_padded_input_ids = left_padded_sequence["input_ids"]
|
||||
left_padded_special_tokens_mask = left_padded_sequence["special_tokens_mask"]
|
||||
left_padded_sequence_length = len(left_padded_input_ids)
|
||||
|
||||
@@ -22,6 +22,8 @@ import tempfile
|
||||
import unittest
|
||||
from typing import List
|
||||
|
||||
from parameterized import parameterized
|
||||
|
||||
from transformers import (
|
||||
AddedToken,
|
||||
MarkupLMTokenizerFast,
|
||||
@@ -211,7 +213,8 @@ class MarkupLMTokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
def test_right_and_left_truncation(self):
|
||||
pass
|
||||
|
||||
def test_encode_plus_with_padding(self):
|
||||
@parameterized.expand([(True,), (False,)])
|
||||
def test_encode_plus_with_padding(self, use_padding_as_call_kwarg: bool):
|
||||
tokenizers = self.get_tokenizers(do_lower_case=False)
|
||||
for tokenizer in tokenizers:
|
||||
with self.subTest(f"{tokenizer.__class__.__name__}"):
|
||||
@@ -262,15 +265,18 @@ class MarkupLMTokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
self.assertTrue(special_tokens_mask == not_padded_special_tokens_mask)
|
||||
|
||||
# Test right padding
|
||||
tokenizer.padding_side = "right"
|
||||
tokenizer_kwargs_right = {
|
||||
"max_length": sequence_length + padding_size,
|
||||
"padding": "max_length",
|
||||
"return_special_tokens_mask": True,
|
||||
}
|
||||
|
||||
right_padded_sequence = tokenizer.encode_plus(
|
||||
nodes,
|
||||
xpaths=xpaths,
|
||||
max_length=sequence_length + padding_size,
|
||||
padding="max_length",
|
||||
return_special_tokens_mask=True,
|
||||
)
|
||||
if not use_padding_as_call_kwarg:
|
||||
tokenizer.padding_side = "right"
|
||||
else:
|
||||
tokenizer_kwargs_right["padding_side"] = "right"
|
||||
|
||||
right_padded_sequence = tokenizer.encode_plus(nodes, xpaths=xpaths, **tokenizer_kwargs_right)
|
||||
right_padded_input_ids = right_padded_sequence["input_ids"]
|
||||
|
||||
right_padded_special_tokens_mask = right_padded_sequence["special_tokens_mask"]
|
||||
@@ -281,14 +287,18 @@ class MarkupLMTokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
self.assertTrue(special_tokens_mask + [1] * padding_size == right_padded_special_tokens_mask)
|
||||
|
||||
# Test left padding
|
||||
tokenizer.padding_side = "left"
|
||||
left_padded_sequence = tokenizer.encode_plus(
|
||||
nodes,
|
||||
xpaths=xpaths,
|
||||
max_length=sequence_length + padding_size,
|
||||
padding="max_length",
|
||||
return_special_tokens_mask=True,
|
||||
)
|
||||
tokenizer_kwargs_left = {
|
||||
"max_length": sequence_length + padding_size,
|
||||
"padding": "max_length",
|
||||
"return_special_tokens_mask": True,
|
||||
}
|
||||
|
||||
if not use_padding_as_call_kwarg:
|
||||
tokenizer.padding_side = "left"
|
||||
else:
|
||||
tokenizer_kwargs_left["padding_side"] = "left"
|
||||
|
||||
left_padded_sequence = tokenizer.encode_plus(nodes, xpaths=xpaths, **tokenizer_kwargs_left)
|
||||
left_padded_input_ids = left_padded_sequence["input_ids"]
|
||||
left_padded_special_tokens_mask = left_padded_sequence["special_tokens_mask"]
|
||||
left_padded_sequence_length = len(left_padded_input_ids)
|
||||
|
||||
@@ -21,6 +21,7 @@ from typing import List
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
from parameterized import parameterized
|
||||
|
||||
from transformers import AddedToken, is_torch_available
|
||||
from transformers.models.tapas.tokenization_tapas import (
|
||||
@@ -494,7 +495,8 @@ class TapasTokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
decoded = tokenizer.decode(encoded, spaces_between_special_tokens=self.space_between_special_tokens)
|
||||
self.assertIn(decoded, [output, output.lower()])
|
||||
|
||||
def test_encode_plus_with_padding(self):
|
||||
@parameterized.expand([(True,), (False,)])
|
||||
def test_encode_plus_with_padding(self, use_padding_as_call_kwarg: bool):
|
||||
tokenizers = self.get_tokenizers(do_lower_case=False)
|
||||
for tokenizer in tokenizers:
|
||||
with self.subTest(f"{tokenizer.__class__.__name__}"):
|
||||
@@ -547,15 +549,18 @@ class TapasTokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
assert special_tokens_mask == not_padded_special_tokens_mask
|
||||
|
||||
# Test right padding
|
||||
tokenizer.padding_side = "right"
|
||||
tokenizer_kwargs_right = {
|
||||
"max_length": sequence_length + padding_size,
|
||||
"padding": "max_length",
|
||||
"return_special_tokens_mask": True,
|
||||
}
|
||||
|
||||
right_padded_sequence = tokenizer.encode_plus(
|
||||
table,
|
||||
sequence,
|
||||
max_length=sequence_length + padding_size,
|
||||
padding="max_length",
|
||||
return_special_tokens_mask=True,
|
||||
)
|
||||
if not use_padding_as_call_kwarg:
|
||||
tokenizer.padding_side = "right"
|
||||
else:
|
||||
tokenizer_kwargs_right["padding_side"] = "right"
|
||||
|
||||
right_padded_sequence = tokenizer.encode_plus(table, sequence, **tokenizer_kwargs_right)
|
||||
right_padded_input_ids = right_padded_sequence["input_ids"]
|
||||
|
||||
right_padded_special_tokens_mask = right_padded_sequence["special_tokens_mask"]
|
||||
@@ -566,14 +571,18 @@ class TapasTokenizationTest(TokenizerTesterMixin, unittest.TestCase):
|
||||
assert special_tokens_mask + [1] * padding_size == right_padded_special_tokens_mask
|
||||
|
||||
# Test left padding
|
||||
tokenizer.padding_side = "left"
|
||||
left_padded_sequence = tokenizer.encode_plus(
|
||||
table,
|
||||
sequence,
|
||||
max_length=sequence_length + padding_size,
|
||||
padding="max_length",
|
||||
return_special_tokens_mask=True,
|
||||
)
|
||||
tokenizer_kwargs_left = {
|
||||
"max_length": sequence_length + padding_size,
|
||||
"padding": "max_length",
|
||||
"return_special_tokens_mask": True,
|
||||
}
|
||||
|
||||
if not use_padding_as_call_kwarg:
|
||||
tokenizer.padding_side = "left"
|
||||
else:
|
||||
tokenizer_kwargs_left["padding_side"] = "left"
|
||||
|
||||
left_padded_sequence = tokenizer.encode_plus(table, sequence, **tokenizer_kwargs_left)
|
||||
left_padded_input_ids = left_padded_sequence["input_ids"]
|
||||
left_padded_special_tokens_mask = left_padded_sequence["special_tokens_mask"]
|
||||
left_padded_sequence_length = len(left_padded_input_ids)
|
||||
|
||||
@@ -2225,7 +2225,15 @@ class TokenizerTesterMixin:
|
||||
else:
|
||||
self.assertListEqual(padded_features["attention_mask"], [[1, 1, 1, 1, 1, 0], [0, 0, 0, 1, 1, 0]])
|
||||
|
||||
def test_encode_plus_with_padding(self):
|
||||
@parameterized.expand([(True,), (False,)])
|
||||
def test_encode_plus_with_padding(self, use_padding_as_call_kwarg: bool):
|
||||
"""
|
||||
This test checks that padding works as expected when tokenizing a sequence.
|
||||
Padding is expected to have no effect when the input is a single sequence and
|
||||
the padding-strategy is not `max_length`. Otherwise it pads to the specified max-length
|
||||
using tokenizer classes `padding_side` attribute. Also, we check that passing `padding_side`
|
||||
as call time kwarg works same way as when one sets `tokenizer.padding_side` attribute.
|
||||
"""
|
||||
tokenizers = self.get_tokenizers(do_lower_case=False)
|
||||
for tokenizer in tokenizers:
|
||||
with self.subTest(f"{tokenizer.__class__.__name__}"):
|
||||
@@ -2244,8 +2252,6 @@ class TokenizerTesterMixin:
|
||||
sequence_length = len(input_ids)
|
||||
|
||||
# Test 'longest' and 'no_padding' don't do anything
|
||||
tokenizer.padding_side = "right"
|
||||
|
||||
not_padded_sequence = tokenizer.encode_plus(
|
||||
sequence,
|
||||
padding=True,
|
||||
@@ -2275,14 +2281,18 @@ class TokenizerTesterMixin:
|
||||
self.assertEqual(special_tokens_mask, not_padded_special_tokens_mask)
|
||||
|
||||
# Test right padding
|
||||
tokenizer.padding_side = "right"
|
||||
tokenizer_kwargs_right = {
|
||||
"max_length": sequence_length + padding_size,
|
||||
"padding": "max_length",
|
||||
"return_special_tokens_mask": True,
|
||||
}
|
||||
|
||||
right_padded_sequence = tokenizer.encode_plus(
|
||||
sequence,
|
||||
max_length=sequence_length + padding_size,
|
||||
padding="max_length",
|
||||
return_special_tokens_mask=True,
|
||||
)
|
||||
if not use_padding_as_call_kwarg:
|
||||
tokenizer.padding_side = "right"
|
||||
else:
|
||||
tokenizer_kwargs_right["padding_side"] = "right"
|
||||
|
||||
right_padded_sequence = tokenizer.encode_plus(sequence, **tokenizer_kwargs_right)
|
||||
right_padded_input_ids = right_padded_sequence["input_ids"]
|
||||
|
||||
right_padded_special_tokens_mask = right_padded_sequence["special_tokens_mask"]
|
||||
@@ -2293,13 +2303,18 @@ class TokenizerTesterMixin:
|
||||
self.assertEqual(special_tokens_mask + [1] * padding_size, right_padded_special_tokens_mask)
|
||||
|
||||
# Test left padding
|
||||
tokenizer.padding_side = "left"
|
||||
left_padded_sequence = tokenizer.encode_plus(
|
||||
sequence,
|
||||
max_length=sequence_length + padding_size,
|
||||
padding="max_length",
|
||||
return_special_tokens_mask=True,
|
||||
)
|
||||
tokenizer_kwargs_left = {
|
||||
"max_length": sequence_length + padding_size,
|
||||
"padding": "max_length",
|
||||
"return_special_tokens_mask": True,
|
||||
}
|
||||
|
||||
if not use_padding_as_call_kwarg:
|
||||
tokenizer.padding_side = "left"
|
||||
else:
|
||||
tokenizer_kwargs_left["padding_side"] = "left"
|
||||
|
||||
left_padded_sequence = tokenizer.encode_plus(sequence, **tokenizer_kwargs_left)
|
||||
left_padded_input_ids = left_padded_sequence["input_ids"]
|
||||
left_padded_special_tokens_mask = left_padded_sequence["special_tokens_mask"]
|
||||
left_padded_sequence_length = len(left_padded_input_ids)
|
||||
|
||||
Reference in New Issue
Block a user