len(tokenizer) 和 tokenizer.vocab_size 有什么区别
what is the difference between len(tokenizer) and 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) 有什么区别?
从 HuggingFace docs 中,如果您搜索方法 vocab_size
,您可以在文档字符串中看到它 returns 不包括添加的标记的大小:
Size of the base vocabulary (without the added tokens).
然后通过对分词器对象调用 len()
方法,它本身调用 __len__
方法:
def __len__(self):
"""
Size of the full vocabulary with the added tokens.
"""
return self.vocab_size + len(self.added_tokens_encoder)
所以你可以清楚地看到前者 returns 的大小不包括添加的令牌,而后者包括添加的令牌,因为它本质上是前者 (vocab_size
) 加上 len(added_tokens_encoder)
.
我正在尝试向预训练的 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) 有什么区别?
从 HuggingFace docs 中,如果您搜索方法 vocab_size
,您可以在文档字符串中看到它 returns 不包括添加的标记的大小:
Size of the base vocabulary (without the added tokens).
然后通过对分词器对象调用 len()
方法,它本身调用 __len__
方法:
def __len__(self):
"""
Size of the full vocabulary with the added tokens.
"""
return self.vocab_size + len(self.added_tokens_encoder)
所以你可以清楚地看到前者 returns 的大小不包括添加的令牌,而后者包括添加的令牌,因为它本质上是前者 (vocab_size
) 加上 len(added_tokens_encoder)
.