快速结论:本地离线加载较老的大词表模型(如 DeBERTa-v3 / mDeBERTa-v3)时,`_patch_mistral_regex` 会把缺少 `transformers_version` 字段的 `config.json` 误判为 Mistral,从而打印 Mistral regex 警告;如果按照警告加上 `fix_mistral_regex=True`,分词结果会被静默改变(空格标记 `▁` 消失、词被拆开)。优先确认该模型的 `config.json` 是否缺少 `transformers_version` 字段,并避免对非 Mistral 模型启用该修复参数。
适用环境:Issue 已确认:transformers 5.19.0 与 main(5.21.0.dev0)、tokenizers 0.23.3、Python 3.11 与 3.12、macOS(含 macOS 15.7.9 / M4);纯 tokenizer 复现,无需 PyTorch;以 `local_files_only=True` 或 `HF_HUB_OFFLINE=1` 离线加载。CUDA 与显卡信息未涉及。
最快修复方案:暂无确认的一步修复方案。Issue 讨论中验证有效的是代码侧修改:把 `_patch_mistral_regex` 的第一个判断改为 `if transformers_version is None or version.parse(transformers_version) < version.parse("5.0.0"):`,使缺少版本字段时仍执行 `model_type` 判断;该改动已由 PR #49733 提交。在不改代码的前提下,可优先尝试不对非 Mistral 模型设置 `fix_mistral_regex=True`。
注意事项:该修复改变的是判定逻辑,需升级到包含 PR #49733 的 transformers 版本才自动生效,单纯安装旧版本不会变化。警告本身不是异常,忽略警告并不会改变分词结果,真正改变 token 的是随后的 `fix_mistral_regex=True`。`model_type` 缺失时仍按 Mistral 保守处理;远端 `base_model:*mistralai` 模型不受影响。该结论已通过 DeBERTa、mDeBERTa 以及移除版本字段的 Mistral-Nemo 反向验证,但仍建议在自有模型上复核分词结果。
问题场景
用户使用 Transformers 的 AutoTokenizer,以本地文件方式(local_files_only=True 或设置 HF_HUB_OFFLINE=1)加载 microsoft/deberta-v3-base 这类较老的大词表 checkpoint 时,加载过程会打印 Mistral regex 相关警告。若用户按警告建议传入 fix_mistral_regex=True,DeBERTa 原有的 pre-tokenizer 会被 Mistral 的 pre-tokenizer 替换,在普通英文文本上产生不同的 token 与 token id,且不抛出任何异常。讨论中确认 mdeberta-v3-base 同样受影响。
报错原文
_patch_mistral_regex treats a missing transformers_version as "Mistral": false positive on local DeBERTa-v3, and following its advice breaks the tokenizer
plain : ['▁The', '▁quick', '▁brown', '▁fox', '▁jumps', '▁over', '▁the', '▁lazy', '▁dog', '.']
patched: ['The', ' ', 'quick', ' ', 'brown', ' ', 'fox', ' ', 'jump', 's', ' ', 'over', ' ', 'the', ' ', 'lazy', ' ', 'dog', '.']
原因分析
在 tokenization_utils_tokenizers.py 中,_patch_mistral_regex 的非 Mistral 提前返回分支都要求 transformers_version 存在:
if transformers_version and version.parse(transformers_version) < version.parse("5.0.0"):
if (is_local and transformers_model_type is not None
and transformers_model_type not in ["mistral", "mistral3", "voxtral", "ministral", "pixtral"]):
return tokenizer
elif transformers_version and version.parse(transformers_version) >= version.parse("5.0.0"):
return tokenizer
mistral_config_detected = True # <- fallthrough
microsoft/deberta-v3-base 是 2021 年的 checkpoint,其 config.json 完全没有 transformers_version 键,两个分支都不成立,流程落入 fallthrough,被当作 Mistral 处理。触发需要同时满足四个条件:vocab_size > 100000、pre_tokenizer 不为 None、本地离线加载、config.json 缺少 transformers_version。对照模型 albert-base-v2 同样缺字段但词表为 30000,不进入该路径,故未受影响。
环境排查
- transformers 版本(问题出现于 5.19.0 与 5.21.0.dev0,确认是否已包含 PR #49733)。
- tokenizers 版本(复现环境为 0.23.3)。
- Python 版本(3.11 / 3.12 均有复现)。
- 是否以离线方式加载:
local_files_only=True或HF_HUB_OFFLINE=1。 - 目标模型
config.json中是否有transformers_version、其值是多少;vocab_size是否大于 100000。 - 是否向
from_pretrained传入了fix_mistral_regex=True。
解决步骤
- 先确认问题范围:打印或查看模型
config.json,确认其中没有transformers_version,且vocab_size > 100000。 - 在推理或数据处理脚本中移除
fix_mistral_regex=True,恢复原始 tokenizer 得到的分词结果。 - 若需在代码库层面根治,按 Issue 验证过的方案修改判定条件:
if transformers_version is None or version.parse(transformers_version) < version.parse("5.0.0"):,使缺失版本字段时仍走model_type判断。 - 等待或升级到包含 PR #49733 的 transformers 版本,该 PR 附带
PatchMistralRegexMissingVersionTests下的三个测试。 - 若本地已打补丁或使用开发版,可对比修复前后 DeBERTa 与 mDeBERTa 是否仍出现 Mistral 警告,并确认 Mistral 模型仍被正常识别。
验证方法
用同一段普通英文文本分别对 plain 与 patched 两种加载方式调用 tokenize,修复后 DeBERTa-v3 / mDeBERTa-v3 不应再出现 Mistral 警告,且两处分词结果一致并保留 ▁ 空格标记、不出现 jump + s 的拆分。反向验证:即使移除 Mistral-Nemo-Instruct-2407 配置中的 transformers_version,该模型仍应被标记为 Mistral,说明真实 Mistral 检测未受影响。
参考来源
huggingface/transformers #49623
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


![[Custom Node Registration] ANIMA_BOOSTER (BSS)](https://www.chat-gpts.plus/wp-content/uploads/2026/11/2893-6536225a-768x403.jpg)