TypeError: argument ‘vocab’: ‘dict’ object cannot be converted to ‘Sequence’

在 Transformers 5.12.1 中,使用 AutoTokenizer.from_pretrained("vesteinn/ScandiBERT") 加载 vesteinn/ScandiBERT 模型的 tokenizer 时触发。该 tokenizer 的原始模型是 BPE 类型,但 t

TypeError: argument 'vocab': 'dict' object cannot be converted to 'Sequence'

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 期望 vocablist[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

解决步骤

  1. 确定模型实际分词器类型:使用 TokenizersBackend.from_pretrained("vesteinn/ScandiBERT") 检查 _tokenizer.model 属性,确认是 BPE 还是 Unigram。
  2. 更换加载方式(可优先尝试):直接使用 TokenizersBackend.from_pretrained("vesteinn/ScandiBERT") 代替 AutoTokenizer.from_pretrained("vesteinn/ScandiBERT"),如下示例:
from transformers import AutoTokenizer, TokenizersBackend
tokenizer = TokenizersBackend.from_pretrained("vesteinn/ScandiBERT")
  1. 修复模型配置文件(可选):在 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>", ...)),即问题已解决。

参考来源

huggingface/transformers #47020

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 12026

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注