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

GPT2训练IMDB情感分类遇AssertionError:已定义padding token仍报错

解决GPT2训练IMDB分类任务时的padding token断言错误

你遇到的问题根源是仅给tokenizer添加pad token还不够,GPT2模型的配置没有同步设置pad_token_id。GPT2预训练时默认没有定义padding token,模型内部会检查这个配置项,即使tokenizer有pad token,模型不认的话还是会触发断言错误。

下面是具体的解决步骤:

  • 同步模型与tokenizer的pad_token_id
    在加载模型后,手动将模型配置的pad_token_id设置为tokenizer的pad_token_id,或者在加载模型时直接指定:

    # 方法1:加载模型后设置
    from transformers import GPT2ForSequenceClassification, GPT2Tokenizer
    
    tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
    tokenizer.add_special_tokens({'pad_token': '<|endoftext|>'})
    
    model = GPT2ForSequenceClassification.from_pretrained("gpt2", num_labels=2)
    model.config.pad_token_id = tokenizer.pad_token_id  # 关键:同步配置
    
    # 方法2:加载模型时直接指定
    model = GPT2ForSequenceClassification.from_pretrained(
        "gpt2",
        num_labels=2,
        pad_token_id=tokenizer.pad_token_id
    )
    
  • 确保tokenize时启用padding
    处理数据集时,必须开启padding保证batch内样本长度一致,否则即使有pad token也不会被使用:

    def tokenize_function(examples):
        return tokenizer(
            examples["text"],
            padding=True,  # 启用padding
            truncation=True,
            max_length=512
        )
    
  • 验证配置是否生效
    可以打印以下内容确认pad token配置正确:

    print("Tokenizer pad token:", tokenizer.pad_token)
    print("Tokenizer pad token ID:", tokenizer.pad_token_id)
    print("Model pad token ID:", model.config.pad_token_id)
    

    三者必须一致,且pad_token_id不能为None。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:15:01