GPT2生成重复无意义响应问题求助——Python代码故障排查
GPT2生成重复内容的解决办法
你的代码出现重复无意义内容,核心原因是GPT2默认使用贪心解码(greedy search)——这种方式每次只选概率最高的下一个token,很容易陷入循环重复。
要解决这个问题,只需调整model.generate()的参数,启用采样模式并添加重复惩罚,修改后的代码如下:
from transformers import GPT2LMHeadModel, GPT2Tokenizer tokenizer = GPT2Tokenizer.from_pretrained("gpt2") model = GPT2LMHeadModel.from_pretrained("gpt2") def chat_with_gpt(input_text, max_length=100): ids = tokenizer.encode(input_text, return_tensors="pt") # 调整生成参数,解决重复问题 output = model.generate( ids, max_length=max_length, num_return_sequences=1, do_sample=True, # 启用采样模式,替代贪心解码 temperature=0.7, # 控制随机性,值越高越随机,0为贪心 top_p=0.9, # 核采样,只选概率总和达0.9的token repetition_penalty=1.2 # 惩罚重复token,大于1降低重复概率 ) response = tokenizer.decode(output[0], skip_special_tokens=True) return response print(chat_with_gpt("what is your favorite book?"))
关键参数说明:
do_sample=True:必须开启,否则还是用贪心解码temperature:0.7是常用值,过高会导致内容混乱,过低仍可能重复repetition_penalty:1.2-1.5之间都可以,根据生成效果调整top_p:0.8-0.95之间,平衡随机性和合理性
另外要注意:GPT2是通用文本生成模型,并非专门的对话模型,所以即使调整参数,它的对话逻辑也不会像专门的对话AI那样连贯,但足以解决当前的重复问题。
内容的提问来源于stack exchange,提问作者Hassanein ali
相关产品推荐
相关产品推荐

