基于ruDialoGPT-medium的作文生成模型微调后输出异常排查
问题:俄语作文生成模型输出乱码/格式混乱
基于tinkoff-ai/ruDialoGPT-medium模型,用含卡尔·克劳斯主题的俄语作文数据微调后,输入指令Напиши сочинение на тему война(写一篇关于战争的作文)时,模型输出乱码或格式混乱内容,例如_"Война и мир" п. /.",{"topic":"1845_1853","text'。
以下是模型加载代码及生成参数:
模型加载代码
modelpath = 'tinkoff-ai/ruDialoGPT-medium' tokenizer = AutoTokenizer.from_pretrained(modelpath) model = AutoModelWithLMHead.from_pretrained('toodles_essays')
生成响应函数及参数
async def generate_response(text): inputs = tokenizer(text, return_tensors='pt') generated_token_ids = model.generate( **inputs, top_k=8, top_p=0.65, num_beams=4, num_return_sequences=1, do_sample=True, no_repeat_ngram_size=2, temperature=1.5, repetition_penalty=1.5, length_penalty=1.0, eos_token_id=50256, pad_token_id=50256, max_new_tokens=40 ) response = [tokenizer.decode(sample_token_ids) for sample_token_ids in generated_token_ids][0] return response
排查与解决方法
1. 清理微调数据集
乱码输出大概率是微调数据混入了JSON标签、特殊符号等非纯作文内容,模型学到了无效格式:
- 过滤数据集:移除所有带结构化标签(如
{"topic":...})、异常符号的内容,只保留纯俄语作文文本,确保数据格式统一。 - 重新微调:用清理后的数据集重新训练,避免模型学习无关格式。
2. 调整生成参数
当前参数组合易导致生成不稳定:
- 降低
temperature:1.5的温度会让随机性过强,建议设为0.7-1.0,平衡多样性与合理性。 - 提升
top_k:8的候选词范围过小,模型易被迫生成奇怪词汇,建议调整为30-50。 - 增加
max_new_tokens:仅生成40个token可能未进入正常作文逻辑就截断,建议设为200-500。 - 统一生成逻辑:同时开启
do_sample=True和num_beams=4会冲突,二选一即可——追求多样性用采样,追求连贯性用beam search。
3. 确保分词器与模型匹配
微调与加载阶段必须使用同一分词器:
- 微调时务必用
tinkoff-ai/ruDialoGPT-medium对应的分词器,加载模型时保持一致,避免token映射不匹配导致解码乱码。
4. 优化解码逻辑
修改解码步骤,过滤输入指令和特殊符号:
async def generate_response(text): inputs = tokenizer(text, return_tensors='pt') generated_token_ids = model.generate( **inputs, top_k=30, top_p=0.8, num_beams=4, num_return_sequences=1, do_sample=False, no_repeat_ngram_size=2, temperature=0.8, repetition_penalty=1.2, length_penalty=1.0, eos_token_id=tokenizer.eos_token_id, pad_token_id=tokenizer.pad_token_id, max_new_tokens=300 ) # 只截取新生成内容,跳过输入和特殊符号 input_len = inputs['input_ids'].shape[1] response = tokenizer.decode(generated_token_ids[0][input_len:], skip_special_tokens=True) return response
内容的提问来源于stack exchange,提问作者Ubuty_programmist_7
相关产品推荐
相关产品推荐

