в чем разница между len (tokenizer) и tokenizer.vocab_size

Я пытаюсь добавить несколько новых слов в словарь предварительно обученной модели HuggingFace Transformers. Я сделал следующее, чтобы изменить словарь токенизатора, а также увеличить размер встраивания модели:

tokenizer.add_tokens(['word1', 'word2', 'word3', 'word4'])
model.resize_token_embeddings(len(tokenizer))
print(len(tokenizer)) # outputs len_vocabulary + 4

Но после обучения модели на моем корпусе и ее сохранения я обнаружил, что размер сохраненного словаря токенизатора не изменился. После повторной проверки я обнаружил, что вышеупомянутый код не меняет размер словаря (tokenizer.vocab_size все тот же), и изменился только len (tokenizer).

Итак, теперь мой вопрос; в чем разница между tokenizer.vocab_size и len (tokenizer)?


person mitra mirshafiee    schedule 06.05.2021    source источник


Ответы (1)


В документах HuggingFace можно найти метод vocab_size. посмотрите в строке документации, что он возвращает размер без добавленных токенов:

Размер базового словаря (без добавленных токенов).

И затем, также вызвав метод len() для объекта токенизатора, который сам вызывает метод __len__:

def __len__(self):
    """
    Size of the full vocabulary with the added tokens.
    """
    return self.vocab_size + len(self.added_tokens_encoder)

Таким образом, вы можете ясно видеть, что первый возвращает размер без добавленных токенов, а второй включает добавленные токены, поскольку по сути это первый (vocab_size) плюс len(added_tokens_encoder).

person ML_Engine    schedule 06.05.2021