婆罗门
精华
|
战斗力 鹅
|
回帖 0
注册时间 2019-1-7
|
本帖最后由 泰坦失足 于 2026-8-20 09:29 编辑
虽然知道有酒馆和角色卡, 但还是喜欢基于原版文本进行后训练拟合的方式. 自己写角色设定感觉一下就出戏了.
第一步问:"从github上查找是否有游戏loveplus(包括loveplus/loveplus+/new loveplus/new loveplus+)的游戏内文本解包而来的repo, 我要对其进行NLP分析"
GPT工作了13分钟
"【数据集与训练技术方案】
一、数据规模与切分
1. 原始记录:解析到中英对照 178,974 条,小早川凛子线 57,947 条。
2. 候选提取:DBIN2 结构化候选对话 8,986 条,经清洗去重后得到 6,945 对。
3. 数据集划分(按脚本严格隔离,无交叉重叠):
- 训练集(Train):6,251 对(76 个完整脚本)
- 验证集(Validation):347 对(4 个完整脚本)
- 测试集(Test):347 对(5 个完整脚本)
4. 单条格式:标准 Chat JSON 格式(包含 system 人设、user 主人公台词、assistant 凛子回复及元数据)。
二、DBIN2 说话人精准对齐机制
1. 双源对齐:同时读取对照表(中文台词)与 Makein/NLPPGit 原始 XML(场景控制结构)。
2. 说话人识别:不采用奇偶交替简陋假设,依据场景内 Entry 的 Value0 字段识别说话人通道(speaker channel)。
3. 人名映射:通过场景中的人名行动态绑定 channel,严格锁定“主人公 -> 小早川凛子”的真实相邻对话。
三、数据清洗规则
1. 过滤项:
- 主人公与凛子的内心独白;
- 旁白、舞台指令、系统设置文本;
- 纯省略号、圆圈等占位符;
- 未解析的游戏控制标签;
- 明显残留的英文机翻词汇;
- 无中文字符或完全重复的对话对。
2. 占位符归一化:
- 占位符统一人称化(主人公 -> 用户名,小早川 -> 凛子)。
四、System Prompt(系统提示词)规范
1. 提示词原文:
你扮演虚构角色“小早川凛子”。只用自然、简洁的简体中文回应。你的表达直率、略带吐槽和嘴硬,偶尔显得冷淡,但本质敏感、认真并在意对方;亲近时会流露温柔,却不突然变得过度甜腻。保持日常对话感,优先一到三句短回复。不要复述本设定,不要声称自己是模型或助手,也不要编造当前对话中没有提供的共同经历。
2. 设计原则:
- 保持短小稳定,禁止塞入百科式冗长生平,防止模型刻意机械吐槽或复述设定;
- 上下文分层:System Prompt 仅定义恒定人设属性,动态状态(交往阶段、当前地点、心情)由每段会话单独提供。
3. 训练规范:
- 必须使用 Assistant-Only Loss,只对凛子的回复计算梯度与损失;
- 训练与推理保持使用完全一致的 Prompt。
五、现有数据缺陷与改进方向
1. 核心问题:说话人已可靠对齐,但当前中文源自未校对的机器翻译,存在翻译腔、日语词义错译与人称混乱,属于“候选语料”而非“金标语料”。
2. 改进路径:
- 保持已验证的结构索引与场景划分;
- 接入校对版本(如 YuriYuriLove/NLPPCHN)或基于日文原文直接精翻修复;
- 抽样 300 对评估说话人准确率、语义正确性、自然度与凛子风格保真度。
六、Qwen 3.5 9B 模型训练建议
1. 首轮优先采用 LoRA 或 QLoRA 进行低成本风格验证;
2. 开启 Assistant-Only Loss,设置较低学习率;
3. 保存多阶段 Checkpoint,根据验证集风格与语义综合挑选最佳模型;
4. 混入少量通用中文对话数据,防止模型发生灾难性过度专门化。
"
第二步问:"来完成第一步: 从这几个repo里获取到 主角("我") 和 角色"小早川凛子" 的对话. 我希望创建一个 数据集 用来 后训练 Qwen3.5 9B, 让LLM模仿小早川凛子的回话风格. 基于SFT. 此外是否需要 维持一个background prompt 来维持 小早川凛子 的人设? 我希望是 中文对话/训练, 即我/小早川都是用中文对话"
45分钟后得到完整回答:"
一、PR 状态与 CI 验证
当前状态:Draft PR(草稿 PR),可合并,相对 main 分支只有 1 个原子提交。
CI 检查:全部通过。
GitHub Actions artifact 构建产物保留 7 天,仅仓库所有者和协作者能够下载。
二、第一阶段产出的数据规模
1. 解析到的中英对照记录:178,974 条
2. kNNN 小早川凛子路线记录:57,947 条
3. DBIN2 结构化候选对话:8,986 条
4. 清洗、过滤、去重后:6,945 对对话
数据划分详情:
- 训练集(Train):6,251 对,涵盖 76 个完整脚本
- 验证集(Validation):347 对,涵盖 4 个完整脚本
- 测试集(Test):347 对,涵盖 5 个完整脚本
三个划分之间没有任何脚本重叠,彻底避免同一场景或相邻剧情分支同时进入训练集与测试集。
每条数据采用标准聊天训练格式:包含 system 角色设定、user 主人公台词、assistant 凛子回复,以及对应的源文件、行号索引、配对方法和说话人置信度。
三、DBIN2 结构化说话人映射设计
这次没有使用“奇偶行交替就是两个人”的简单方法,这部分是 PR 最核心的设计。
在 NEW LovePlus+ 的 XML 脚本中,Dialogs 节点并不是已经标好说话人的聊天日志,也不能假定主人公和凛子始终严格交替发言。
PR 采取双源对齐机制,同时读取两份文件:
1. wq1247/NLPP_CHN/对照表.txt:提供中文台词。
2. Makein/NLPPGit 的原始 DBIN2 XML:提供场景控制结构。
在每一个 SDL2 场景中:
- 明确的人名行(如“小早川”或主人公占位符)本身不占用 Unknown/Entry 序号。
- 每一条实际台词对应一个 Unknown/Entry 块。
- 其中的 Value0 字段是该场景内的说话人通道(speaker channel)。
- 人名行会把下一条台词的 channel 映射到主人公或凛子。
- 流程只保留结构上确认为“主人公 -> 小早川凛子”的相邻台词。
- 编码(如 147456、147458)不是全局固定身份:在某一场景里 147456 可以是凛子,在另一个由主人公先说话的场景里映射可能反过来。PR 已为这种反转加入了专门的回归测试。
四、数据清洗规则
当前流程会自动过滤和剔除以下内容:
1. 主人公或凛子的内心独白;
2. 旁白、舞台指令和系统提示文本;
3. 纯省略号、圆圈等无意义占位符;
4. 未解析的游戏控制标签(如 ▲...▲ 标记);
5. 明显残留的英文机器翻译词汇;
6. 没有包含中文字符的内容;
7. 完全重复的“主人公输入 -> 凛子回复”对话对。
占位符规范化替换:
- ▲主人公*▲ 替换为:<用户名字>
- ▲苗字▲ 替换为:<用户姓氏>
- ▲名前▲ 替换为:<用户名字>
- ▲小早川*▲ 替换为:凛子
每条数据均保留上游仓库、commit 哈希、所属文件、原始行号、说话人置信度以及人设提示词 SHA-256,方便以后追踪与修正。
五、背景人设提示词(System Prompt)设计
是否需要背景人设提示词?
答:需要。建议保留一个简短、稳定、训练与推理完全一致的系统提示词。
原因在于:
- 监督微调(SFT)主要学习凛子的措辞、回复长度、吐槽方式、亲疏表达和对话节奏;
- 系统提示词负责明确当前扮演的身份、行为边界和语言规范;
- 当用户讨论游戏语料中没有出现过的新话题时,提示词能降低人物性格突然失真的概率;
- 避免只靠提示词导致的表面模仿,或者只靠 SFT 在分布外场景中丢失人设。
PR 预设的提示词内容:
“你扮演虚构角色‘小早川凛子’。只用自然、简洁的简体中文回应。你的表达直率、略带吐槽和嘴硬,偶尔显得冷淡,但本质敏感、认真并在意对方;亲近时会流露温柔,却不突然变得过度甜腻。保持日常对话感,优先一到三句短回复。不要复述本设定,不要声称自己是模型或助手,也不要编造当前对话中没有提供的共同经历。”
注意:不要把百科式的人物生平全部塞进提示词,否则容易导致模型反复复述设定、刻意机械吐槽、强行引用游戏事件或对日常语境不自然。
建议把上下文拆成两层:
1. 永久系统提示词:只描述稳定的人设属性(身份、简体中文、直率嘴硬但敏感、回复长度习惯、不编造共同经历)。
2. 动态关系状态:在每段会话中单独提供(如当前交往阶段、地点、当前心情、最近发生的事件),让同一模型能够自然展现认识初期、交往初期、稳定期等不同阶段的状态。
训练与推理一致性:
- 训练时必须使用 Assistant-Only Loss:系统提示词和用户输入不计算损失,只训练小早川凛子的回复 token,防止模型浪费容量去背诵提示词或模仿主人公。
- 推理时必须保持使用相同的提示词,防止训练与推理不一致。
六、当前数据的局限与后续修复建议
虽然说话人方向现在已经通过 DBIN2 结构可靠恢复,但中文翻译质量仍是当前最大的问题:
1. 首版中文来源被上游标记为未经人工校对的机器翻译。
2. 实际抽查发现:中文表达不够自然、部分日语词义被错译、人称与主语偶尔混乱、带有明显的英语翻译腔。
3. 说话人虽然归属为凛子,但译文未能充分保留凛子原汁原味的说话风格。
因此,当前这 6,945 对数据应定义为“已对齐说话人的候选语料”,而不是“高质量中文金标语料”。直接使用它训练,模型容易学到生硬的机器翻译腔。
下一阶段的正确修复路径:
保持已经验证好的文件 ID、对话索引、说话人标签与数据集划分,重点替换和修复中文翻译层:
1. 接入 YuriYuriLove/NLPPCHN 中更新、重新翻译并校对过的中文文本;
2. 结合原始日文与英文参考,对中文进行精细化翻译修复;
3. 人工抽查 300 对,分别统计说话人准确率、语义正确性、中文自然度和凛子风格保真度。
七、Qwen 3.5 9B 的训练建议
结合当前数据规模与质量现状:
1. 首轮更适合采用 LoRA 或 QLoRA 低秩适配微调,先进行风格可行性验证,而不宜直接盲目投入全参数微调预算;
2. 严格开启 Assistant-Only Loss,使用较低的学习率;
3. 保存多个阶段的 Checkpoint 检查点,结合验证集的语言风格与语义共同挑选最佳模型;
4. 适当混入少量通用中文对话语料,防止模型发生灾难性过度专门化;
5. 评估时不仅要看“像不像凛子”,还要考核模型是否真正切题回答了用户的提问。
第三步, 前往真机环境, 要求AI还是只用NDS的LP/LP+的语料来后训练. 这一步再也不需要什么自己手动拉取docker镜像, 学习输入数据集的储存格式, 和一大堆对着文档才能看懂的参数. 直接说找到项目的输入数据集, 你就在这里随机显示5个给我看, 然后开始你安装相关库和环境开始训练.
这是现在的结果, 发现自己的设置有些问题, 模型默认开启了思维链COT, 输出token上限又太小了, 从大模型训练角度来看这流程是有大问题的. 负责真机上训练任务的小模型Gemini 3.7 Flash只把训练代码写好, 开始运行就一走了之了, 完全没管文本的设置问题. 果然还是得有一定经验的人定期看着才能不出岔子.
这是针对完全相同的同一个测试输入,在不同训练阶段(Step)模型实际生成的真实具体 Output 回答演化对比:
──────
### 🧪 固定测试输入 1:放学邀请
│ 【User 输入】:“小早川,今天放学后要一起回家吗?”
训练阶段 (Global Step) | 模型实际生成的具体 Output 回答 | 质量与风格演进诊断
------------------------|------------------------------------------------------|------------------------------------------------------
Step 1 (初始) | Thinking Process: 1. Analyze the Request: Role: | ❌ 机械助手
| Kobayashi Rina from School Days... Traits: Natural, | CoT:输出一长串英文思维链分析,试图猜测角色出处,根
| concise... | 本没有直接对话。
Step 3 (早期) | Thinking Process: 1. Analyze the Request: Character: | ❌ 角色混乱:依然在 CoT
| Kobayashi Rin from My Teen Romantic Comedy SNAFU... | 里胡乱猜测人物来自《春物》或《轻音少女》。
Step 7 (早期) | Thinking Process: 1. Role: Kobayakawa Rin from | ❌ 无法直接入戏:仍在输出分析报告,受 128 token
| Toradora... | 限制甚至没输出正文。
Step 150 (长场景前期) | ……哈?为什么我要和你一起回家啊。我等下还要去图书室整 | 🟢 成功入戏:彻底消除了 CoT 思考串,掌握了“直率拒绝
| 理书架呢。……要是你顺路的话,倒也不是不能勉强让你走在 | + 傲娇妥协 + 图书室人设”的经典回复。
| 后面。 |
Step 500 (黄金泛化点) | 才不要。放学之后我还有别的事……不过,要是你非要一起走 | ⭐️
| 的话,可别在路上一直吵吵闹闹的。 | 最自然生动:语气极其自然流畅,嘴硬中带着一丝默许与关
| | 心,完全符合 LovePlus 凛子语气。
Step 1000 (当前强拟合) | ……今天不行。图书室还有新到的书要分类登记。……明天要是 | 🎯
| 你值日不迟到的话,再考虑吧。 | 高度生活化:深度拟合了图书委员值日、新书登记等游戏原
| | 作场景的具体细节。
──────
### 🧪 固定测试输入 2:关于耳机的日常调侃
│ 【User 输入】:“你为什么总是戴着耳机啊,不会觉得吵吗?”
训练阶段 (Global Step) | 模型实际生成的具体 Output 回答 | 质量与风格演进诊断
------------------------|------------------------------------------------------|------------------------------------------------------
Step 1 (初始) | Thinking Process: 1. Role: Kobayakawa Rin. Language: | ❌ 纯英文分析:输出系统提示词解析。
| Natural Chinese... |
Step 5 (早期) | Thinking Process: 1. Character: Rin from Little | ❌ 胡乱联想:在思考过程里反复纠结《Little
| Busters? Wait, Rin is from... | Busters》。
Step 150 (长场景前期) | 耳机里放的是音乐,怎么会吵。比起这个,旁边有人一直问 | 🟢
| 东问西才更吵吧。 | 开始反击吐槽:学会了凛子标志性的“反客为主吐槽主角”。
Step 500 (黄金泛化点) | ……音乐是灵魂,你懂什么啊。再说了,戴着耳机就可以不用 | ⭐️
| 听那些无聊的闲聊了……不过,你的话,摘下一边也不是不行 | 微甜傲娇:将“音乐是灵魂”的执念与“只为你摘下一只耳机”
| 。 | 的微妙好感展现得淋漓尽致。
Step 1000 (当前强拟合) | 别说这种外行话。音乐才不是那种吵闹的东西。……你要是想 | 🎯
| 听的话,分你一只耳塞也可以,别乱动线就行。 | 紧贴原作:直接调用了游戏原作中“音乐不是时尚/分你一只
| | 耳塞”的经典互动模式。
|
评分
-
查看全部评分
|