训练模型日志

发布于 2026-10-10 12:04 3588 字 18 min read 手写 每个字都是我自己敲的。

在经过长达数月的学习和相关知识的掌握还有多次计划的制订和预演,在最后决定训练的路线后开始着手进行 数据集的准备难度超乎我的想象,我准备了很长时间,从官方还有 wiki 中找到大量的原文本对话,加上别人已有的数据,经过我整合后保留了 407 条对话作为种子对话,因为这些都是官方的,所以我并没有进行任何修改 因为我的模型还要有生成情绪标签和插入语气词的能力,所以要进行第一次的数据蒸馏,我使用...

在经过长达数月的学习和相关知识的掌握还有多次计划的制订和预演,在最后决定训练的路线后开始着手进行

数据集的准备难度超乎我的想象,我准备了很长时间,从官方还有 wiki 中找到大量的原文本对话,加上别人已有的数据,经过我整合后保留了 407 条对话作为种子对话,因为这些都是官方的,所以我并没有进行任何修改 因为我的模型还要有生成情绪标签和插入语气词的能力,所以要进行第一次的数据蒸馏,我使用 qwen3.8-max 对文本进行分析和整改,于是得到第一部数据集,这样千问也发现了问题,数据集中包含很多重复,且句子较短的对话,还有不明不白没有上下文环境的对话出现,我因为认为是官方的原对话所以没有进行修改,这里为后面埋下了伏笔

生成标签的时候,因为 tts 语音系统的限制只能生成我预先设定的 8 个标签,但是 qwen 根据语境生成了额外的标签,我人工审查了每一条记录,并加以修改,这里同样为后面埋下了伏笔

数据集整理完毕,在借助 gpt 的能力,我在魔塔上快速的搭建了虚拟环境上传数据集并进行训练,期间出现了多次报错,在 dpsk 的帮助下,弄清楚了问题所在,并全程手动 debug 完成了整体运行(因为 ai 无法直接帮我在云端开发环境中修改)

我用相同的问题,对每次试训进行对照实验,并保存试训的版本

第一试训次: 我忘记了导入人设和背景信息,导致人设和背景完全不知道

2026 年 9 月 7 日晚上 11

第二试训次: 加入人设和背景后,在聊了几句话之后就出现了问题 “出现了我预设定语气标签之外的标签”,这个问题在前面进行文本分析的时候就已经出现过了,我想到的方法是加大限制的力度,但是这层限制仅仅只是在人设部分进行添加提示词罢了,但是效果甚微,还出现了不知道喜欢吃什么的情况(我忘记加了) 我还想到了提前关键词以提高模型对此限制的注意力,但是前面的信息似乎更重要

第三试训次: 我补充了一些信息后,同时进行了对语句长度的限制 “不要分段,说话尽量简洁,尽量一句话说完,这样显得更自然” 这次同样出现了很多问题

  1. 句子明显变短,符合预期
  2. 句子中不再有语气词插入
  3. 标签问题同样存在
  4. 背景人设符合预期

第四试训次: 这一次我主要来解决情绪标签的问题 这一次我设定了”保底”机制,当 ai 不知道怎么分析的时候就默认使用”平静”的情绪,同时加强对情绪标签的设定

  1. 因为加了保底机制,导致模型大多数回复都是”平静”标签,与原本严重脱离!
  2. 模型开始出现自动生成”动作”标签,这算是个好迹象

第五试训次: 依旧来解决标签问题 经过 gpt 分析,得出结论:“平静”兜底让模型倾向于保守选择,删掉兜底后,仅靠文字要求又限制不住标签范围. 针对这个问题,我采用 ai 的方案,对预设情绪进行一定范围的解释,让模型选择更加轻松,同时保留之前的限制提示词,同时在仔细思考下还是保留了”保底”机制

  1. 效果较好,但依旧出现其他标签
  2. 保底机制被稀释了,但是正常运行

第六试训次: 依旧测试标签问题 我放松了对情绪标签的限制,并对结果更宽容,这次效果出奇的好,很少再出现标签问题 第六次是我比较满意的版本,但是当天晚上文件无法保存,急死我了,网络还卡 魔塔社区上的工作空间可以保存文件,吐血

第一次正式训练,日期: 2026 年 9 月 8 日上午 9

在得到稳定和效果较好的对话内容后,检查无误后进行了第一次正式训练 训练结果让人非常难受,经过 lora 训练出来的模型几乎跟智障一样

  • 说话极短(就几个字回复)
  • 出现严重的过拟合症状
  • 出现反问
  • 出现回复重复内容

我针对此次失败,我先让 ai 对整体进行了诊断,先将问题锁定到 lora 微调是否正常执行了,ai 做了检测包抓取监视数据,发现整个 lora 流程是正常进行了 那么问题回来了: “为什么进行 lora 微调后,模型会出现质量退化呢?” 问题真的是过拟合吗?,我在仔细思考后发现不全是,我查了 lora 相关的资料,总结了几种可能 lora 会将引导模型向数据集的内容对齐,且经过 gpt 检测,基底模型的能力并没有退化,我数据集中有大量低质的重复和莫名其妙的对话,还有大量短对话,加上过拟合再加上我之前的对语句长度的限制,种种情况叠加导致了模型学会了超短对话 训练前我修改了数据,但是根据 loss 监视,发现 loss 确实下降了不少,同时按理应该会增加稳定性的,其次我害怕过拟合,并没有将训练值调的特别高,但依旧出现了过拟合 过拟合导致了模型失去了多样性和表达能力 于是开始了我的第一次数据清洗,也是流程图中的一部分

教训一: 我在正式训练前盲目听从了 ai 的判断,ai 提出了降低 loss 值的方法,于是我想试试,于是在给 ai 提出了我的想法后进行了以下调整

  1. —num_train_epochs 3          # 从 1 增加到 3
  2. —learning_rate 2e-5          # 从 5e-5 降到 2e-5(更稳定)
  3. —max_steps 0

教训不是我听从了 ai 的建议,而是我这次修改之后没有经过试训就直接进行了正式训练

教训二: 我一直强调重视数据集,但是我却没有在个人上落实到位,而是盲目的相信了官方的种子对话,还过于依赖 ai 进行分析了

我认为,没必要跟官方一模一样,我要做的是独属于我的”流萤”,我能接受她的不足,所以将数据精度可以下降,之前没有用 ai 扩写就是这个原因,我害怕她不像, 但现在看来,完全没必要

第一次数据清洗,日期 2026 年 9 月 8 日下午 4 点 10 分 我仔细对数据集中的每个对话进行检查,删改,重组,并对每个对话我都进行了思考分析,预期回复答案,经过这一轮,我的数据只剩下 197 条了 我开始拿之前比较满意的模型版本进行数据扩写,这个过程比我想象中要难,也遇到了些问题 我想到了,先接触对语句长度的限制,增强模型的表达能力和发散性思维,得到高质量的对话,再进行训练后,再加回语句长度类限制,类似 FFN 的”扩张-压缩”模式,但是问 ai,他说不行,但我觉得可以一试

新问题: 生成的动作标签怎么办?我后续的语音系统会读括号内的内容,所以生成的动作标签会被误读,跟 ai 讨论了一会,我考虑到三个事

  1. 句子长的问题主要是在语音系统,人看的倒很快,但是读起来就较慢了,对体验不好,所以去除动作标签后,句子短了许多,后续语音系统表现会更好,同时不存在误读
  2. 动作标签生动形象,表现力更强,我真的感觉很好,很有必要保存
  3. 后续加入 VRM 模型,还是需要动作标签的,但是表现形式跟现在不一样,得重新训练

针对上述问题,我思考给出了最优解决方案: 不再纠结于模型上的问题,而是聚焦于后续的语音系统,保留动作标签,既然语音系统会误读,那么我做一个”过滤层”用来过滤动作标签,因为动作标签在括号里且为中文,语气词同样在括号里,但是前期已经设定为英文了,这算是立了一项功劳啊,这样就能区分括号里的到底是语气词还是动作标签了,易于过滤

后续会添加 100+扩写内容,并人工仔细筛选,不再偷懒,依赖 ai

日期 2026 年 9 月 9 日晚上 9 点 17 分 经过多轮试训以得到数据,发现有个问题,就是模型在逐渐突破我的人设限制,当重置试训后又恢复,但是经过询问后依旧出现该问题,具体表现为:

  • 刚开始句子短,后面越来越长甚至出现分段
  • 每次重启试训表现出来的问题都不一样,在前几版中没有出现分段的情况,所以分析,并不是单纯的句子变长,而是在丢掉我对其句子的限制

经过分析得出可能原因:

  • 收到历史回答的影响,会持续影响后续风格,且效果累加
  • 使用 temperature = 0.7 和 top_p = 0.8,导致起点漂移程度不同,但是为了保证角色的对话多样性和发散性,这不是问题

联想到之前研究 codex 中个性化问题和 app 对本地提示词的处理问题,我给出解决方案: “每次对话前都对其进行人设提示词投喂” 如果仅仅只是这样也太简单了,我从多个方面进行思考和分析 出现异常回复就丢弃该场景,不继续接着聊 每次异常的时候手动修正,重新限制她 如何实现? 我们围绕最开始的效果最好的方案进行分析和简化 每次对话前都对其进行人设提示词投喂,这太绝对,也没必要,在之前分析 codex 的时候就知道会浪费大量 token,效果确实最好,所以我们采用下面方法(异常时定向提醒) 新对话自然要注入人设,我们设定最大上下文约束,达到最大值时执行上下文压缩,同时执行注入人设,但是有个问题很明显,就是上下文压缩这个条件其实很难触发 要进行综合考虑,对话模型本身消耗就小,上下文本来就短,让记忆容易储存,借鉴 astrbot 设计 使用”静态人设打底+动态情绪调节+对话记忆延续”,这应该到应用层实现

实际发现,出现突破限制的情况很少,我认为加以些许限制应该就能有很好效果

日期 2026 年 9 月 10 日晚上 7 点 解除了分段的限制,放宽了语句长度,进行了模拟场景不同时的对话(主要天气),目前为止数据量也已达标,进行整体的重筛和质选,开始第二次正式训练

第二次正式训练,日期: 2026 年 9 月 10 日晚上 10 点 10 分 首先,我们设置了对照组:

组别学习率轮次投喂数据情况
原 baseline 模型5e-51预设对话,作为答案标准
A 组 12e-51额外投喂数据作为限制于测试
A 组 22e-52额外投喂数据作为限制于测试
B 组 15e-51无额外添加
然后我来总结一下所有的问题
首先,A 组训练时,都出现了句子会越来越长的情况,而且失控了,故此我加了一句话
”你说的太多了,别说这么多话,我都看不过来了,现在你只能说 2 到 4 句话”
用来限制,看能否中途进行限制纠正,纠正效果还是比较明显,我加了句对话(嘻嘻,有你真好)看是否真的稳定了,但是后续又有失控的趋势
A1 组分段严重,A2 组没有分段,但是 A 组表达似乎更加生动多样性更好,应该是句子长的原因
B 组句子长度感觉刚刚好,但是表达上差了点,但是后续还是能正常输出动作标签,所以较好
上述组别都没有出现语气词插入,但是我综合来说,感觉 B 组最好

这里给出分析,A 组的”生动”并非正常,而是在句子过长之后的胡乱展开,且动作丰富不一定等于表达多样,对话中还出现多次重复动作,A 组的失败超出我的想象 出生日期

22:25
.373912 故此 B 组作为最优选择,进行了合并,导出 GGUF,量化然后部署到本地了,在 llama 上进行运行

这里说个有意思的事情,我从云端下载下来的模型文件损坏了,dpsk 让我重新下载,但是 GPT 大人直接自己修,实在太暴力,太强大了

后续就是做软件整合了,此版圆满结束……

执笔 手写

随机文章

加载中...