INNER 07 / MODEL / 02 · ENGINE v1
后训练数据集构建与对话模板映射(Scientist 3: Post-Training Datasets)
本关练习:将原始业务问答修正为标准 ShareGPT/ChatML 微调样本。
30 SECONDS / 30 秒看懂
这一关只解决一件事:正如 mlabonne/llm-course 第 3‒4 章所言:“在微调中,数据质量永远比堆砌超参数重要十倍 (Always prioritize data quality over parameter optimization)。”新手做微调最常踩的两个致命大坑: 对话模板(Chat Template)错配与结束符(EOS Token)丢失:基座模型与指令模型遵循严格的特殊控制符格式(如 ChatML 的 <|im_start|>user...<|im_end|> 或 Llama 3 的 <|start_header_id|>... <|eot_id|>)。
- 将该样本重构为包含 system、user、assistant 三角色的 ShareGPT/OpenAI 标准 JSON 数组格式(
- 5 分);
- 写出映射为 ChatML 模板后的完整纯文本字符串(必须显式包含 <|im_start|> 与 <|im_end|> 特殊标记) (
3 MINUTES / 3 分钟拆解
先看来源里的例子:PDF 本关任务(来源)
你想把中医问诊记录转化为微调数据集,参照 LLM Fine-Tuning Hands-on Lab 的数据准备规范进行格式化与去重清洗。 待改造劣质样本:"问:最近总是失眠多梦、手脚心发热怎么办?答:这属于典型的阴虚火旺证,建议滋阴降火。"(直接按纯文本塞入训练器,无角色边界、无系统提示、无结束符。)
发生了什么
来源要求:将该样本重构为包含 system、user、assistant 三角色的 ShareGPT/OpenAI 标准 JSON 数组格式( / 5 分); / 写出映射为 ChatML 模板后的完整纯文本字符串(必须显式包含 <|im_start|> 与 <|im_end|> 特殊标记) (
输出
参考答案:参考答案:ShareGPT/ChatML 标准微调格式转换与清洗清单 // 1. 标准 ShareGPT / OpenAI Messages JSON 格式 { "messages": [ {"role": "system", "content": "你是一位严谨的中医辅助问诊助手,请根据患者描述的症状进行辨证分析并给出调理建议。"}, {"role": "user", "content": "最近总是失眠多梦、手脚心发热,舌红少苔,
术语拆开
- ChatML
- 用特殊控制符标记对话角色的模板格式。
- EOS
- 结束符;缺失会让模型不知道何时停止。
- Completion-only Loss
- 只对 assistant 回复计算损失。
为什么有效
来源核心原理:正如 mlabonne/llm-course 第 3‒4 章所言:“在微调中,数据质量永远比堆砌超参数重要十倍 (Always prioritize data quality over parameter optimization)。”新手做微调最常踩的两个致命大坑: 对话模板(Chat Template)错配与结束符(EOS Token)丢失:基座模型与指令模型遵循严格的特殊控制符格式(如 ChatML 的 <|im_start|>user...<|im_end|> 或 Llama 3 的 <|start_header_id|>... <|eot_id|>)。如果在拼接训练样本时漏掉了助手回答末尾的 eos_token,微调后的模型在推理时永远不知道何时停下来,会一直自言自语直到填满最大长度! 未只对 Assistant 回复计算 Loss(Completion-only Loss Masking):如果把用戶提问(Instruction) 也算进交叉熵损失,模型会浪费算力去背诵用戶的问题,甚至学会模仿用戶的语气反问用戶。
结构长什么样
将该样本重构为包含 system、user、assistant 三角色的 ShareGPT/OpenAI 标准 JSON 数组格式( 5 分); 写出映射为 ChatML 模板后的完整纯文本字符串(必须显式包含 <|im_start|> 与 <|im_end|> 特殊标记) ( 5 分); 列出将数据集送入 SFTTrainer 前必做的 3 项数据清洗检查(如近重复去重 MinHash、长度截断检查、 低质回复过滤)( 5 分)。 第二阶段:微调核心篇(第 3‒4 关)——LoRA/QLoRA 高效微调与训练曲线排障
如果漏掉 assistant 末尾的 EOS,推理时会发生什么?
SOURCE READING / 来源精读
正如 mlabonne/llm-course 第 3‒4 章所言:“在微调中,数据质量永远比堆砌超参数重要十倍 (Always prioritize data quality over parameter optimization)。”新手做微调最常踩的两个致命大坑: 对话模板(Chat Template)错配与结束符(EOS Token)丢失:基座模型与指令模型遵循严格的特殊控制符格式(如 ChatML 的 <|im_start|>user...<|im_end|> 或 Llama 3 的 <|start_header_id|>... <|eot_id|>)。
逐点读懂
- 将该样本重构为包含 system、user、assistant 三角色的 ShareGPT/OpenAI 标准 JSON 数组格式(
- 5 分);
- 写出映射为 ChatML 模板后的完整纯文本字符串(必须显式包含 <|im_start|> 与 <|im_end|> 特殊标记) (
怎么对应本关练习
先读 30 秒与 3 分钟拆解,再读本关原文与实验,最后做客观题和实操题;答案在下方。
例子在哪
本关任务与参考答案见页面下方;来源为本册 PDF 对应关卡。
本关先记住:将该样本重构为包含 system、user、assistant 三角色的 ShareGPT/OpenAI 标准 JSON 数组格式(
核心原理
正如 mlabonne/llm-course 第 3‒4 章所言:“在微调中,数据质量永远比堆砌超参数重要十倍 (Always prioritize data quality over parameter optimization)。
”新手做微调最常踩的两个致命大坑: 对话模板(Chat Template)错配与结束符(EOS Token)丢失:基座模型与指令模型遵循严格的特殊控制符格式(如 ChatML 的 <|im_start|>user...<|im_end|> 或 Llama 3 的 <|start_header_id|>... <|eot_id|>)。
如果在拼接训练样本时漏掉了助手回答末尾的 eos_token,微调后的模型在推理时永远不知道何时停下来,会一直自言自语直到填满最大长度!
未只对 Assistant 回复计算 Loss(Completion-only Loss Masking):如果把用戶提问(Instruction) 也算进交叉熵损失,模型会浪费算力去背诵用戶的问题,甚至学会模仿用戶的语气反问用戶。
第 2 关实操练习题:将原始业务问答修正为标准 ShareGPT/ChatML 微调样本
任务背景
你想把中医问诊记录转化为微调数据集,参照 LLM Fine-Tuning Hands-on Lab 的数据准备规范进行格式化与去重清洗。待改造劣质样本:"问:最近总是失眠多梦、手脚心发热怎么办?
答:这属于典型的阴虚火旺证,建议滋阴降火。"(直接按纯文本塞入训练器,无角色边界、无系统提示、无结束符。)
通关硬性要求(满分 12.5 分)
1. 将该样本重构为包含 system、user、assistant 三角色的 ShareGPT/OpenAI 标准 JSON 数组格式(
4.5 分);
2. 写出映射为 ChatML 模板后的完整纯文本字符串(必须显式包含 <|im_start|> 与 <|im_end|> 特殊标记) (
4.5 分);
3. 列出将数据集送入 SFTTrainer 前必做的 3 项数据清洗检查(如近重复去重 MinHash、长度截断检查、 低质回复过滤)(
3.5 分)。 第二阶段:微调核心篇(第 3‒4 关)——LoRA/QLoRA 高效微调与训练曲线排障
PRACTICE / 本关练习 · 本地规则 + 覆盖检查
将原始业务问答修正为标准 ShareGPT/ChatML 微调样本
本地检查在你的浏览器里完成,不上传。覆盖检查需要先登录(免费注册),并把这段答案发送到服务器计算一次,算完即弃、不存档,需你点同意;只核对本关评分项覆盖的方向,不在评分项里的题目不会被检查。
评分项
结构分 — / 12.5 分
查看参考答案与得分点 先自己写,再打开+
参考答案与得分要点
参考答案:ShareGPT/ChatML 标准微调格式转换与清洗清单 // 1. 标准 ShareGPT / OpenAI Messages JSON 格式 { "messages": [ {"role": "system", "content": "你是一位严谨的中医辅助问诊助手,请根据患者描述的症状进行辨证分析并给出调理建议。"}, {"role": "user", "content": "最近总是失眠多梦、手脚心发热,舌红少苔,请问是怎么回事?"}, {"role": "assistant", "content": "根据您描述的失眠多梦、五心烦热及舌红少苔症状,中医辨证属于典型的【阴虚火旺证】。调理原则应以滋阴降火、养心安神为主。"} ] } // 2. 映射为 ChatML 模板后的底层训练文本(注意末尾必须包含 <|im_end|> 结束符!) <|im_start|>system 你是一位严谨的中医辅助问诊助手,请根据患者描述的症状进行辨证分析并给出调理建议。<|im_end|> <|im_start|>user 最近总是失眠多梦、手脚心发热,舌红少苔,请问是怎么回事?<|im_end|> <|im_start|>assistant 根据您描述的失眠多梦、五心烦热及舌红少苔症状,中医辨证属于典型的【阴虚火旺证】。调理原则应以滋阴降火、养心安神为主。<|im_end|> 数据清洗三步检查清单:1 使用 MinHash 或语义嵌入剔除相似度 > 0.95 的近重复样本;2 过滤超出 max_seq_length 的截断残缺样本与包含 “ 抱歉我无法回答 ” 的拒答废样本 ; 3 开启 DataCollatorForCompletionOnlyLM,将 User 与 System 部分的标签设为 -100,仅对 Assistant 输出计算 Loss。 得分要点拆解:规范构建三角色 JSON 结构(4.5 分);准确写出含 `<|im_start|>` 与 `<|im_end|>` 的 ChatML 展开文本(4.5 分);涵盖去重、截断过滤与 Completion-only Loss Masking(3.5 分)。 第 3 关
网页永久免费。完整 PDF 会按顺序发给留邮箱的读者,不转售、不群发广告。
留邮箱,获取完整 PDF ↗