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

修复AttributeError: MaskedLMOutput对象无view属性报错

问题报错

运行基于Bert的日文标点恢复模型评估流程时,触发如下属性错误:
AttributeError: 'MaskedLMOutput' object has no attribute 'view'
错误触发位置为模型forward函数中,对BertForMaskedLM的输出直接调用.view()方法的代码行。


MaskedLMOutput 含义

MaskedLMOutput是Hugging Face Transformers库中,掩码语言模型类(比如你用到的BertForMaskedLM)前向传播返回的结构化结果对象,不是PyTorch原生张量,它内置多个属性存储不同维度的输出结果:

  • logits:模型最终输出的分类得分张量,形状为(批次大小, 序列长度, 词表大小),是下游任务需要取用的核心计算结果
  • loss:传入标签参数时计算得到的掩码语言模型损失,未传标签时返回None
  • hidden_states:可选返回项,模型各层的隐藏状态张量,需要初始化模型时设置output_hidden_states=True才会返回
  • attentions:可选返回项,模型各层的注意力权重张量,需要初始化模型时设置output_attentions=True才会返回

由于该对象本身是结构体,没有张量专属的.view()形变方法,直接调用就会触发你遇到的报错。


修复方案

你代码中的问题是直接把MaskedLMOutput对象当成张量做形变,只需要在拿到Bert输出后,先取它的logits属性(这才是你需要的张量结果),再做后续操作即可。
修正后的forward函数代码如下:

def forward(self, input):
    # 取出结构化输出里的logits张量,而非直接使用MaskedLMOutput对象
    x = self.bert(input).logits             
    x = x.view(x.shape[0], -1)
    x = self.fc(self.dropout(self.bn(x)))
    return x

注:你代码中硬编码的bert_vocab_size=32000和所用cl-tohoku/bert-base-japanese模型的词表大小匹配,修改上述一行代码即可正常运行评估流程。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:16:31