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

如何将自定义训练的HuggingFace Tokenizer上传至Hub?若不行如何用于模型训练?

问题解答

一、将自定义Tokenizer上传至Hub,用AutoTokenizer.from_pretrained()直接调用

你当前训练的是tokenizers库原生的Tokenizer,要让它兼容transformers库的AutoTokenizer,需要先转换格式再上传,具体步骤如下:

  1. 转换为transformers兼容格式
    用PreTrainedTokenizerFast包裹原生Tokenizer,保存生成transformers所需的标准配置文件:

    from transformers import PreTrainedTokenizerFast
    from tokenizers import Tokenizer
    
    # 加载你之前保存的原生tokenizer
    tokenizer = Tokenizer.from_file("data/tokenizer-custom.json")
    # 转换为FastTokenizer,显式指定所有特殊token
    fast_tokenizer = PreTrainedTokenizerFast(
        tokenizer_object=tokenizer,
        unk_token="[UNK]",
        cls_token="[CLS]",
        sep_token="[SEP]",
        pad_token="[PAD]",
        mask_token="[MASK]"
    )
    # 保存到本地文件夹,会自动生成tokenizer_config.json、special_tokens_map.json等必要文件
    fast_tokenizer.save_pretrained("./my-custom-tokenizer")
    
  2. 上传至Hugging Face Hub
    先安装依赖并登录你的Hub账号:

    pip install huggingface_hub
    huggingface-cli login
    

    接着上传本地的tokenizer文件夹:

    from huggingface_hub import upload_folder
    
    upload_folder(
        folder_path="./my-custom-tokenizer",
        repo_id="你的Hub用户名/自定义tokenizer名称",  # 示例:"dagim/my-bpe-tokenizer"
        repo_type="tokenizer"
    )
    
  3. 测试调用
    上传完成后,即可像使用官方Tokenizer一样调用:

    from transformers import AutoTokenizer
    
    tokenizer = AutoTokenizer.from_pretrained("你的Hub用户名/自定义tokenizer名称")
    # 测试tokenize功能
    print(tokenizer("这是测试文本"))
    

二、用自定义Tokenizer从零训练自定义模型

如果暂时无需上传Hub,可直接使用转换后的FastTokenizer搭建模型并训练:

  1. 预处理数据集
    用datasets库加载本地文本数据,再通过Tokenizer批量处理成模型所需格式:

    from datasets import load_dataset
    
    # 加载本地train/valid文本文件
    dataset = load_dataset("text", data_files={
        "train": "/content/drive/MyDrive/dataset_unicode/train.txt",
        "valid": "/content/drive/MyDrive/dataset_unicode/valid.txt"
    })
    
    # 定义预处理函数
    def preprocess_data(examples):
        return fast_tokenizer(
            examples["text"],
            truncation=True,
            padding="max_length",
            max_length=128  # 根据任务需求调整序列长度
        )
    
    # 批量处理数据集
    tokenized_dataset = dataset.map(preprocess_data, batched=True)
    
  2. 定义模型架构
    以掩码语言模型(MLM)为例,初始化自定义模型时需保证词表大小与Tokenizer匹配:

    from transformers import BertConfig, BertForMaskedLM
    
    config = BertConfig(
        vocab_size=fast_tokenizer.vocab_size,  # 必须与Tokenizer的词表大小一致
        hidden_size=768,
        num_hidden_layers=12,
        num_attention_heads=12,
        pad_token_id=fast_tokenizer.pad_token_id  # 指定pad token的ID
    )
    # 初始化MLM模型(若为其他任务,可替换为对应模型类,如BertForSequenceClassification)
    model = BertForMaskedLM(config)
    
  3. 启动训练
    使用Trainer管理训练流程:

    from transformers import Trainer, TrainingArguments
    
    training_args = TrainingArguments(
        output_dir="./my-trained-model",
        per_device_train_batch_size=8,
        num_train_epochs=3,
        logging_dir="./train-logs",
        logging_steps=100,
        save_steps=500,
        evaluation_strategy="epoch"  # 每个epoch结束后执行评估
    )
    
    trainer = Trainer(
        model=model,
        args=training_args,
        train_dataset=tokenized_dataset["train"],
        eval_dataset=tokenized_dataset["valid"]
    )
    
    # 开始训练
    trainer.train()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:52:56