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

如何保存预编译AutoTokenizer以避免加载时正则编译耗时?

解决扩展后预训练分词器加载过慢的问题

你提到的加载耗时(34分钟以上)确实和新增token触发的正则重新编译有关,相关问题在Hugging Face Tokenizers项目的议题中也有讨论。完全可以通过将分词器保存为二进制序列化格式,来规避下次加载时的完整正则编译流程,具体操作如下:

1. 扩展分词器后,额外保存二进制核心分词器

在完成token扩展并调用save_pretrained之后,直接导出底层的二进制分词器文件(tokenizer.json),这个文件已经包含预编译好的正则和所有分词逻辑:

from transformers import AutoTokenizer
from datasets import load_dataset

# 1. 加载原始预训练分词器
tokenizer = AutoTokenizer.from_pretrained('moussaKam/frugalscore_tiny_bert-base_bert-score')

# 2. 训练德语、法语专属分词器并提取新增token
ds_de = load_dataset("mc4", 'de')
ds_fr = load_dataset("mc4", 'fr')

de_tokenizer = tokenizer.train_new_from_iterator(ds_de['text'], vocab_size=50_000)
fr_tokenizer = tokenizer.train_new_from_iterator(ds_fr['text'], vocab_size=50_000)

new_tokens_de = set(de_tokenizer.vocab).difference(tokenizer.vocab)
new_tokens_fr = set(fr_tokenizer.vocab).difference(tokenizer.vocab)
new_tokens = set(new_tokens_de).union(new_tokens_fr)

# 3. 扩展原始分词器
tokenizer.add_tokens(list(new_tokens))

# 4. 保存transformers标准格式 + 二进制核心分词器
tokenizer.save_pretrained('frugalscore_tiny_bert-de-fr')
# 关键:保存预编译好的二进制分词器
tokenizer._tokenizer.save("frugalscore_tiny_bert-de-fr/tokenizer.json")

2. 加载时自动复用二进制文件

后续加载分词器时,AutoTokenizer会自动优先读取目录下的tokenizer.json,直接反序列化预编译好的逻辑,跳过正则编译步骤:

tokenizer = AutoTokenizer.from_pretrained(
    'frugalscore_tiny_bert-de-fr', local_files_only=True
)

额外优化点

如果无法重新生成分词器,也可以通过设置环境变量开启正则缓存,减少重复编译开销:

export TOKENIZERS_CACHE=/path/to/persistent/cache

但最彻底的方案还是保存tokenizer.json二进制文件,它能直接避免加载时的正则编译流程,大幅缩短加载时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:51:31