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

训练BpeTokenizer时触发TypeError:BpeTrainer无法转换为Sequence

解决BPE Tokenizer训练时的TypeError问题

错误原因

你遇到的TypeError: argument 'files': 'BpeTrainer' object cannot be converted to 'Sequence',核心问题是**tokenizer.train()的参数顺序完全搞反了**。tokenizers库中Tokenizer.train()方法的第一个参数应该是文件路径序列,第二个参数才是训练器(BpeTrainer)对象。

另外代码里还有两个小问题:

  • inital_alphabet拼写错误,正确写法是initial_alphabet
  • 特殊符号用了HTML转义(&lt;s&gt;),这会导致训练出的token是&lt;s&gt;而不是预期的<s>,需要直接写原始符号

修正后的代码

修正后的BPE_token类

import os
from tokenizers.models import BPE
from tokenizers import Tokenizer
from tokenizers.decoders import ByteLevel as ByteLevelDecoder
from tokenizers.normalizers import NFKC, Sequence
from tokenizers.pre_tokenizers import ByteLevel
from tokenizers.trainers import BpeTrainer

class BPE_token(object):
    def __init__(self):
        self.tokenizer = Tokenizer(BPE())
        self.tokenizer.normalizer = Sequence([
            NFKC()
        ])
        self.tokenizer.pre_tokenizer = ByteLevel()
        self.tokenizer.decoder = ByteLevelDecoder()

    def bpe_train(self, paths):
        # 修正拼写错误:inital_alphabet -> initial_alphabet
        # 修正特殊符号的写法,去掉HTML转义
        trainer = BpeTrainer(
            vocab_size=50000, 
            show_progress=True, 
            initial_alphabet=ByteLevel.alphabet(), 
            special_tokens=[
                "<s>",
                "<pad>",
                "</s>",
                "<unk>",
                "<mask>"
            ]
        )
        # 修正参数顺序:先传paths,再传trainer
        self.tokenizer.train(paths, trainer)

    def save_tokenizer(self, location, prefix=None):
        if not os.path.exists(location):
            os.makedirs(location)
        self.tokenizer.model.save(location, prefix)
        # 额外补充:保存完整的tokenizer配置(可选,但推荐)
        self.tokenizer.save(os.path.join(location, "tokenizer.json"))

修正后的调用代码

from tokenise import BPE_token
from pathlib import Path
import os

# 遍历text文件夹下所有txt文件
paths = [str(x) for x in Path("./text/").glob("**/*.txt")]
tokenizer = BPE_token()
# 训练tokenizer
tokenizer.bpe_train(paths)
# 保存结果
save_path = 'tokenized_data'
tokenizer.save_tokenizer(save_path)

额外说明

  • 补充的self.tokenizer.save()可以保存完整的tokenizer配置(包括归一化、预分词器等设置),后续加载时直接用Tokenizer.from_file()就能还原整个tokenizer,比只保存模型更方便。
  • 如果你的文本文件编码有问题,可能需要在读取时指定编码,但当前代码是让tokenizers库直接读取文件,它会自动处理常见编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 05:09:55