解决初始化BertWordPieceTokenizer时传入vocab_file参数的TypeError问题
报错根因
这个报错完全是版本API不兼容导致的:你当前安装的tokenizers 0.10.1版本,对BertWordPieceTokenizer的初始化接口做了不向后兼容的重构,参考教程里沿用的旧版传参逻辑,在当前版本里已经完全被移除了。
具体的参数调整规则
- 老版本构造函数里的
vocab_file参数已经彻底删除,新版本里就算需要加载现成词表,也是用vocab关键字传词表路径。你现在要从头训练分词器、没有预存词表,完全可以把这个参数整行删掉——不传任何词表参数的话,会自动初始化为无词表的空分词器实例,适配从头训练的场景。 - 老版本里能直接传给构造函数的特殊token配置、文本处理规则,在新版本里全部不能在初始化阶段传入了,具体调整对应关系:
unk_token/sep_token/cls_token等特殊token的定义,要挪到分词器训练器的配置参数里clean_text/handle_chinese_chars/strip_accents/lowercase这类文本标准化规则,要单独配置分词器的normalizer组件,不能在构造函数里传- 你原来代码里还把
handle_chinese_chars拼错成了handle_chines_chars,就算参数兼容,这行也会触发单独的参数名错误 wordpieces_prefix参数可以保留在初始化配置里,新版本默认值就是##,不传也能正常运行
可直接运行的适配代码示例
from tokenizers import BertWordPieceTokenizer from tokenizers.trainers import WordPieceTrainer from tokenizers.normalizers import BertNormalizer # 空初始化,无预加载词表,适配从头训练场景 bwpt = BertWordPieceTokenizer() # 配置老版本里传在构造函数里的文本标准化逻辑 bwpt.normalizer = BertNormalizer( clean_text=True, handle_chinese_chars=True, strip_accents=True, lowercase=True ) # 配置训练阶段的特殊token规则 trainer = WordPieceTrainer( vocab_size=30522, special_tokens=["[UNK]", "[SEP]", "[CLS]", "[PAD]", "[MASK]"], wordpieces_prefix="##" ) # 后续替换为你的训练语料路径,调用train方法完成词表构建即可 # bwpt.train(files=["你的本地训练语料.txt"], trainer=trainer)
注意:你参考的教程内容是基于tokenizers 0.8.x之前的旧版本API编写的,0.9版本之后整个库切换成了模块化的组件式架构,所有文本预处理、训练逻辑都从构造函数拆分成了独立可替换的模块,直接照搬旧教程的初始化代码必然会触发参数不匹配的报错,不要硬套旧版参数列表。
内容的提问来源于stack exchange,提问作者Kamoula
相关产品推荐
相关产品推荐

