pad_token
pad_token 是 “padding token”(填充标记) 的缩写,在使用 Transformers(如 BERT、GPT)等模型时,用于把不等长的文本序列填充成相同长度,以便批量处理。
# 📌 为什么需要 pad_token?
当你把多个句子组成一个 batch 输入模型时,它们长度可能不同。比如:
句子A: [Hello, world] → 长度 2
句子B: [Hi] → 长度 1
1
2
2
我们需要统一长度,比如都补齐成长度 3:
句子A: [Hello, world, [PAD]]
句子B: [Hi, [PAD], [PAD]]
1
2
2
这样模型才能一次性批量计算。
# 🛠 错误的含义:
你使用的 tokenizer 没有设置 pad_token,所以当你使用 padding=True 时,程序报错:
Asking to pad but the tokenizer does not have a padding token.
1
# ✅ 解决方法
方法一:直接设置已有的特殊 token(比如 eos_token)为 pad_token:
tokenizer.pad_token = tokenizer.eos_token
1
方法二:添加一个新的 pad token:
tokenizer.add_special_tokens({'pad_token': '[PAD]'})
1
然后模型也要 resize(如果要继续训练模型):
model.resize_token_embeddings(len(tokenizer))
1
# 🔍 检查当前 tokenizer 是否有 pad_token:
print(tokenizer.pad_token) # 看看当前是否为 None
print(tokenizer.special_tokens_map)
1
2
2
如果你告诉我你用的是哪个模型(比如 GPT2, BERT, LLaMA 等),我可以告诉你哪种方式更推荐。因为有些模型默认就没有 pad_token(比如 GPT-2)。
上次更新: 2025/10/09, 23:53:03