2

我正在尝试在预训练的 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) 有什么区别?

4

1 回答 1

3

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).

于 2021-05-06T10:13:33.057 回答