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
相关产品推荐
相关产品推荐

