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

使用Helsinki-NLP/opus-mt-de-en翻译模型报KeyError: 'size'错误如何解决

报错根因

报错里的KeyError: 'size'是因为你直接把tokenizer返回的BatchEncoding字典对象作为位置参数传给了模型,AutoModelForSeq2SeqLM的forward方法不接收这种整体对象,会把它误判为输入张量尝试调用size()方法,从而触发报错。同时翻译属于序列生成任务,不能直接调用模型的forward方法,需要调用专门的generate接口。

修复后可运行代码
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM

tokenizer = AutoTokenizer.from_pretrained("Helsinki-NLP/opus-mt-de-en")
model = AutoModelForSeq2SeqLM.from_pretrained("Helsinki-NLP/opus-mt-de-en")

batch = tokenizer(
    list(data_bert[:100]),
    padding=True,
    truncation=True,
    max_length=250,
    return_tensors="pt"
)

# 解包传入参数,调用generate方法执行翻译
generated_tokens = model.generate(
    **batch,
    max_length=250,
    num_beams=4,
    early_stopping=True
)
# 解码得到英文翻译结果
results = tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)
关键修改说明
  • 把model(batch)改为model.generate(**batch),**操作符会把BatchEncoding对象里的input_ids、attention_mask等字段作为关键字参数传给模型,匹配forward方法的参数要求
  • 翻译任务属于序列生成场景,必须调用generate方法才能得到完整的输出序列,直接调用forward只会返回模型的中间隐层状态,不是最终翻译结果
  • 最后用batch_decode把生成的token id转为可读的英文文本,skip_special_tokens=True会去掉生成结果里的特殊标记符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 04:33:01