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

微调GODEL-base seq2seq模型时,Tokenizer对话历史保存问题求助

问题修复:GODEL-base微调时对话历史的正确处理

核心问题分析

  • 对话历史构建逻辑错误:每次循环重置history为空,且错误包含当前轮次内容(j的范围应为range(i)而非range(i+1))
  • Tokenizer调用不符合GODEL模型输入格式:模型要求用特定分隔符拼接输入,而非直接传入多个参数
  • 输出序列编码冗余:无需将历史与response一起传入,只需单独编码当前response

修复后的代码

context = list(df['Context'])
knowledge = list(df['Knowledge'])
response = list(df['Response'])

# 初始化Tokenizer,GODEL自带特殊分隔符需保留
tokenizer = AutoTokenizer.from_pretrained("microsoft/GODEL-v1_1-base-seq2seq", padding_side='left', truncation_side='left') 

# 累积式维护对话历史,避免重复遍历
dialog_history = ""

for i in range(len(context)):
    # 严格遵循GODEL输入格式:[CONTEXT] 当前上下文 [KNOWLEDGE] 知识 [HISTORY] 历史对话
    input_text = f"[CONTEXT] {context[i]} [KNOWLEDGE] {knowledge[i]} [HISTORY] {dialog_history}"
    
    # 对输入序列分词
    inputs = tokenizer(input_text, padding="longest", max_length=512, truncation=True, return_tensors="pt")
    
    # 单独编码响应序列
    outputs = tokenizer(response[i], padding="longest", max_length=512, truncation=True, return_tensors="pt")
    
    # 更新对话历史,可添加[TURN_SEP]标记区分轮次(可选)
    dialog_history += f"{context[i]} {knowledge[i]} {response[i]} "

关键注意事项

  • 高效历史维护:用外部变量dialog_history累积历史,避免每次循环重新构建,提升运行效率
  • 模型格式要求:必须使用GODEL定义的[CONTEXT]、[KNOWLEDGE]、[HISTORY]标记划分输入模块,否则模型无法正确解析输入结构
  • 输出编码逻辑:响应仅需编码当前轮次的回复,历史已包含在输入中,无需重复传入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 16:57:35