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

使用Huggingface预训练Pegasus处理Inshorts数据集出现NoneType报错如何解决

报错原因
  • 变量名覆盖:最常见的原因是你之前的代码里误将tokenizer或者model变量赋值为None,比如写过tokenizer = None这类代码,导致你调用tokenizer()、model.generate()的时候,实际操作的是None对象而非预加载的分词器、模型实例。
  • 代码缩进错误:你给出的for循环代码没有正确缩进,循环体仅执行空逻辑,循环外的updated_text可能取到空值,或者你在循环外执行分词/生成逻辑时,updated_text未被正确赋值为字符串类型。
  • 模型/分词器加载失败:如果加载预训练权重时网络中断、文件损坏,会导致model或tokenizer实际为None,调用对应方法时就会抛出该错误。
解决方案
  • 先排查变量类型:分别执行print(type(tokenizer))和print(type(model)),如果输出为NoneType,重新执行分词器、模型的加载代码,后续不要复用tokenizer、model作为其他变量的名称。
  • 修正代码缩进与逻辑:将文本处理、分词、生成、解码逻辑全部放到for循环内部,同时加空值判断避免处理无数据的样本,参考修正后的代码:
import pandas as pd
from transformers import PegasusForConditionalGeneration, PegasusTokenizer

# 加载模型与分词器
tokenizer = PegasusTokenizer.from_pretrained("google/pegasus-xsum")
model = PegasusForConditionalGeneration.from_pretrained("google/pegasus-xsum")

# 加载数据集
import io
df = pd.read_excel(io.BytesIO(uploaded['inshorts.xlsx']))

# 循环生成摘要
for a in range(0,3):
    text = df.iloc[a,1]
    # 跳过空样本
    if pd.isna(text):
        print(f"第{a}条样本为空,跳过")
        continue
    updated_text = f' """ {text} """ '
    # 分词
    tokens = tokenizer(updated_text, truncation=True, padding="longest", return_tensors="pt")
    # 生成摘要
    summary = model.generate(**tokens)
    # 解码输出,skip_special_tokens会自动去掉特殊标记
    res = tokenizer.decode(summary[0], skip_special_tokens=True)
    print(f"原始文本:{updated_text}")
    print(f"生成摘要:{res}\n")
  • 排查加载问题:如果重新加载模型/分词器仍报错,检查网络连接是否能正常访问Huggingface Hub,也可以提前将预训练权重下载到本地,用本地路径替代google/pegasus-xsum加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:00:03