
TypeError: argument ‘vocab’: ‘dict’ object cannot be converted to ‘Sequence’
快速结论:该报错出现在使用 AutoTokenizer.from_pretrained("vesteinn/ScandiBERT") 加载 tokenizer 时,原因是 XLMRobertaTokenizer.__init__ 将 dict 类型的词汇表直接传给了期望 Sequence(列表)的 Unigram 构造函数。优先排查模型是否真的属于 XLM-RoBERTa 架构。
问题场景
在 Transformers 5.12.1 中,使用 AutoTokenizer.from_pretrained("vesteinn/ScandiBERT") 加载 vesteinn/ScandiBERT 模型的 tokenizer 时触发。该 tokenizer 的原始模型是 BPE 类型,但 tokenizer_config.json 中错误地配置了 XLMRobertaTokenizer 作为 tokenizer_class,导致代码进入 XLMRobertaTokenizer.__init__ 分支。
报错原文
File ".../transformers/models/xlm_roberta/tokenization_xlm_roberta.py", line 81, in __init__
self._tokenizer = Tokenizer(Unigram(vocab=self._vocab, unk_id=3, byte_fallback=False))
TypeError: argument 'vocab': 'dict' object cannot be converted to 'Sequence'
原因分析
直接原因:XLMRobertaTokenizer.__init__ 将 self._vocab(一个 dict 对象)传递给 Unigram(vocab=...),而 Unigram 期望 vocab 是 list[tuple[str, float]] 类型。
根本原因:模型 vesteinn/ScandiBERT 实际上使用 BPE 分词模型(通过 TokenizersBackend.from_pretrained("vesteinn/ScandiBERT") 验证可见其 model 为 BPE 类型),但 tokenizer_config.json 中错误地设置了 tokenizer_class: "XLMRobertaTokenizer",导致加载时走错了代码路径。这并非 transformers 库本身的 bug,而是模型配置文件的问题。
环境排查
- Python 版本:3.12 / 3.14
- transformers 版本:5.12.1
- tokenizers 版本:0.22.2
- 操作系统:macOS / Linux
解决步骤
- 确定模型实际分词器类型:使用
TokenizersBackend.from_pretrained("vesteinn/ScandiBERT")检查_tokenizer.model属性,确认是 BPE 还是 Unigram。 - 更换加载方式(可优先尝试):直接使用
TokenizersBackend.from_pretrained("vesteinn/ScandiBERT")代替AutoTokenizer.from_pretrained("vesteinn/ScandiBERT"),如下示例:
from transformers import AutoTokenizer, TokenizersBackend
tokenizer = TokenizersBackend.from_pretrained("vesteinn/ScandiBERT")
- 修复模型配置文件(可选):在 Hugging Face 模型中心(https://huggingface.co/vesteinn/ScandiBERT/discussions)提交 PR 或讨论,建议将
tokenizer_config.json中的tokenizer_class更新为PreTrainedTokenizerFast,使其能通过TokenizersBackend正确加载。
验证方法
执行 tokenizer = TokenizersBackend.from_pretrained("vesteinn/ScandiBERT") 后无报错,并可通过 tokenizer._tokenizer.model 确认模型为 BPE 类型(输出类似 BPE(dropout=None, unk_token="<unk>", ...)),即问题已解决。



