必须将本地词表置入指定路径并强制指向该目录,否则模型初始化会因网络问题报错;需先查config.json中tokenizer_class字段确认分词器类型,再按jieba系(dict.txt)或HF Tokenizers系(vocab.json/merges.txt/tokenizer_config.json)准备对应格式词表,最后通过from_pretrained参数指定路径或设HF_HUB_OFFLINE=1离线加载,并验证分词、encode长度及decode一致性。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在Jev模型中加载本地自定义词表并扩展其Tokenizer分词器,必须绕过默认远程加载逻辑,将词表文件置入指定路径并强制指向本地目录,否则模型初始化时会因网络不可达或权限限制直接报错退出。
确认Jev模型Tokenizer的底层类型
打开模型配置文件config.json,查找tokenizer_class字段值。若为"JiebaTokenizer"或"CustomChineseTokenizer",说明使用的是基于jieba或自研中文分词器;若为"PreTrainedTokenizerFast"且model_max_length存在,则大概率依赖Hugging Face Tokenizers库的BPE/WordPiece实现——这两类加载方式完全不同,不可混用。
这一步不能跳过。强行按jieba方式去配一个SentencePiece词表,会导致decode时ID映射全乱,输出一堆字符。
准备本地词表文件
根据上一步确认的类型,准备对应格式的词表:
● 若为jieba系:新建dict.txt,每行一个词,可带频次与词性(如“妇科凝胶 100 nz”),保存为UTF-8无BOM编码;
● 若为Hugging Face Tokenizers系:需提供三个文件——vocab.json(token→id映射)、merges.txt(BPE合并规则)、tokenizer_config.json(配置元信息),缺一不可;
【vocab.json必须包含特殊token:[PAD]、[UNK]、[CLS]、[SEP]、[MASK],且其ID必须从0开始连续】。漏掉[PAD]会导致DataLoader batchify失败,报错“index out of range in self”。
修改模型加载路径
方法一:通过from_pretrained参数硬指定
在加载模型前,将本地词表所在目录路径传给tokenizer参数,例如:
tokenizer = AutoTokenizer.from_pretrained("./my_jieba_tokenizer/", use_fast=False, add_prefix_space=False)
注意:./my_jieba_tokenizer/目录下必须包含tokenizer_config.json,否则AutoTokenizer无法识别类型,会回退到默认空白分词器。
方法二:覆盖环境变量强制离线
在Python脚本最开头插入:
import os
os.environ["HF_HUB_OFFLINE"] = "1"
再执行from_pretrained("jev-base"),此时它将放弃联网拉取,转而搜索本地缓存目录~/.cache/huggingface/transformers/中是否已有同名文件夹。若无,则报错,不自动创建。
验证词表是否生效
第一步:输入测试文本,观察分词结果是否包含自定义词
print(tokenizer.tokenize("妇科凝胶每日1次")) → 输出应为["妇科凝胶", "每日1次"]而非["妇科", "凝胶", "每日", "1", "次"]
第二步:检查encode后ID序列长度是否合理
ids = tokenizer.encode("妇科凝胶每日1次")
若len(ids) > 512,说明未触发子词合并,大概率是词表没加载成功,仍在走字符级fallback逻辑。
第三步:反向decode验证映射一致性
assert tokenizer.decode(ids) == "妇科凝胶每日1次"
如果不等,说明vocab.json中token字符串与实际切分结果存在Unicode空格、全角标点等隐形差异,需用hex()查看原始字节。


















