如何将自定义训练的HuggingFace Tokenizer上传至Hub?若不行如何用于模型训练?
问题解答
一、将自定义Tokenizer上传至Hub,用AutoTokenizer.from_pretrained()直接调用
你当前训练的是tokenizers库原生的Tokenizer,要让它兼容transformers库的AutoTokenizer,需要先转换格式再上传,具体步骤如下:
转换为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")上传至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" )测试调用
上传完成后,即可像使用官方Tokenizer一样调用:from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("你的Hub用户名/自定义tokenizer名称") # 测试tokenize功能 print(tokenizer("这是测试文本"))
二、用自定义Tokenizer从零训练自定义模型
如果暂时无需上传Hub,可直接使用转换后的FastTokenizer搭建模型并训练:
预处理数据集
用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)定义模型架构
以掩码语言模型(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)启动训练
使用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
相关产品推荐
相关产品推荐

