Skip to content
Open
Changes from all commits
Commits
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
15 changes: 9 additions & 6 deletions metrics/perplexity/perplexity.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,15 +116,18 @@ def _compute(

tokenizer = AutoTokenizer.from_pretrained(model_id)

# if batch_size > 1 (which generally leads to padding being required), and
# if there is not an already assigned pad_token, assign an existing
# special token to also be the padding token
if tokenizer.pad_token is None and batch_size > 1:
existing_special_tokens = list(tokenizer.special_tokens_map_extended.values())
# Padding is always required when tokenizing multiple predictions together
# (tokenizer is called with padding=True regardless of batch_size).
# Use all_special_tokens instead of special_tokens_map_extended.values() for
# compatibility with both slow and fast tokenizers (e.g. GPT-2's slow tokenizer
# does not expose special_tokens_map_extended). See:
# https://github.com/huggingface/evaluate/issues/766
if tokenizer.pad_token is None:
existing_special_tokens = tokenizer.all_special_tokens
# check that the model already has at least one special token defined
assert (
len(existing_special_tokens) > 0
), "If batch_size > 1, model must have at least one special token to use for padding. Please use a different model or set batch_size=1."
), "Model must have at least one special token to use for padding. Please use a different model or set batch_size=1."
# assign one of the special tokens to also be the pad token
tokenizer.add_special_tokens({"pad_token": existing_special_tokens[0]})

Expand Down