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

HuggingFace BPE Trainer训练报错:ByteLevelBPETokenizer触发TypeError

问题原因

报错是对ByteLevelBPETokenizer的接口设计不熟悉导致的:

  • ByteLevelBPETokenizer是tokenizers库封装好的高层便捷类,它的train_from_iterator方法会内部自动创建BpeTrainer,不需要手动传入实例化的Trainer对象。它的第二个入参要求是整数类型的vocab_size,你把BpeTrainer对象当位置参数传进去,自然会抛出无法将对象转为整数的类型错误。
  • 这个高层接口本身没有设计trainer关键字参数,所以用关键字传参也会报参数不识别的错误。
    另外你定义Trainer的时候存在参数拼写错误:min_frequence少了字母n,正确拼写是min_frequency。

解决方案

方案1:直接用高层接口的参数配置训练

不需要手动实例化BpeTrainer,直接把训练参数传到train_from_iterator方法里即可:

# 删掉手动实例化BpeTrainer的代码,直接调用训练方法
tokenizer.train_from_iterator(
    clean_data,
    vocab_size=20000,
    min_frequency=2,
    show_progress=True,
    special_tokens=["<s>","<pad>","</s>","<unk>","<mask>"]
)

方案2:用底层Tokenizer类自定义Trainer

如果确实需要自己实例化Trainer做更灵活的配置,就不要用封装好的ByteLevelBPETokenizer,改用底层通用Tokenizer类实现:

from tokenizers import Tokenizer
from tokenizers.models import BPE
from tokenizers.pre_tokenizers import ByteLevel

# 初始化底层tokenizer
tokenizer = Tokenizer(BPE(unk_token="<unk>"))
tokenizer.pre_tokenizer = ByteLevel(lowercase=True)

# 自定义的Trainer可以正常使用
trainer = BpeTrainer(
    vocab_size=20000,
    min_frequency = 2,
    show_progress=True,
    special_tokens=["<s>","<pad>","</s>","<unk>","<mask>"],
)

# 底层train_from_iterator支持传入trainer参数
tokenizer.train_from_iterator(clean_data, trainer=trainer)

# 补充ByteLevel的后处理适配BERT格式
tokenizer.post_processor = BertProcessing(
    ("</s>", tokenizer.token_to_id("</s>")),
    ("<s>", tokenizer.token_to_id("<s>")),
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:45:05