You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加自定义token后BertTokenizer的vocab_size未更新,如何更新并保存?

问题解决方法

首先明确:vocab_size是预训练tokenizer初始化时固定的原始词汇表大小,属于只读属性,不会随新增token自动更新;而len(tokenizer)返回的是包含新增token后的总词汇量,这才是实际有效的数值。要保存更新后的tokenizer并确保新增token生效,按以下步骤操作:

1. 正确保存更新后的tokenizer

执行add_tokens()后,直接调用save_pretrained()方法即可完成保存,重新加载后的tokenizer会正确识别新增token,len(tokenizer)也会保持更新后的数值。示例代码:

from transformers import BertTokenizer

# 加载预训练tokenizer
tokenizer = BertTokenizer.from_pretrained("fnlp/bart-base-chinese")

# 添加新token
tokenizer.add_tokens(["new_token"])

# 保存更新后的tokenizer到本地目录
tokenizer.save_pretrained("./updated_bart_tokenizer")

# 重新加载验证
new_tokenizer = BertTokenizer.from_pretrained("./updated_bart_tokenizer")
print("重新加载后的总词汇量:", len(new_tokenizer))  # 输出51272
print("新增token是否存在:", "new_token" in new_tokenizer.get_vocab())  # 输出True

2. 手动同步vocab_size(可选)

如果需要让vocab_size显示更新后的数值,可手动修改该属性,但这仅为表面调整,实际生效的词汇量仍以len(tokenizer)为准:

tokenizer.vocab_size = len(tokenizer)
print("修改后的vocab_size:", tokenizer.vocab_size)  # 输出51272

更推荐依赖len(tokenizer)获取真实词汇量,因为vocab_size的语义本身就是预训练模型的原始词汇表大小。


内容的提问来源于stack exchange,提问作者Raptor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 12:12:05