ShareGPT数据集微调大模型:从数据准备到训练完整指南
把原始ShareGPT对话数据喂进大模型微调流程,很多人第一步就直接栽了:报错、训练中断、loss不降。问题并不在模型,而是数据压根没过“安检”。ShareGPT的conversations结构天生不兼容ChatGLM、LLaMA-Factory、Axolotl等主流框架的默认格式,必须手动适配,才能让tokenizer正确切分、labels掩码准确对齐。下面咱们从数据清洗到格式转换一步步拆解。
确认原始数据结构并完成基础清洗
先打开你的sharegpt_zh.json文件,用VS Code或less命令快速扫一眼前10行。重点看每个对象是否都包含conversations字段,且该字段是数组;数组内每个元素是否都有from和value两个键。如果出现from: "user"而非from: "human",或者value缺失,这条样本后续必然被静默丢弃——白忙一场。
接下来用langdetect批量检测语言:pip install langdetect,然后跑一句python -c "from langdetect import detect; print(detect('你好,今天怎么样?'))",确认返回zh。但凡某条human消息返回en,整条对话就得剔除——关键原则:单轮非中文即整条淘汰,没有商量余地。
别忘了用正则清除HTML标签与URL: 清洗干净后,需要把数据转化成框架吃得下的格式。两种主流方案:手动映射或交给自动化工具。 方法一:适配ChatGLM3-6B官方脚本(需要手动结构映射) 第一步:写个Python脚本遍历每条样本,提取 第二步:生成新的JSONL文件,确保每行仅一个字典,且严格包含 第三步:检查首行是否能被 方法二:交给LLaMA-Factory自动处理(推荐新手) 把原始 这里直接跑 如果选择Axolotl,需要把清洗后的数据保存为 在axolotl的 启动训练: 本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。sed -i 's/<[^>]*>//g; s/https?:\/\/[^[:space:]]*//g' sharegpt_zh.json。这一步不能省,否则tokenizer会把转换为框架可识别的格式
conversations[0]["value"]作为instruction,取最后一条from == "gpt"的value作为output,中间轮次拼成input字段(如果有多轮对话)。instruction、input、output三键。注意:input为空时不能写null,必须写空字符串"",否则框架解析会出bug。json.loads()成功解析。失败往往意味着存在未转义的双引号或换行符——这类错误会导致训练启动后卡在DataLoader第一轮,非常隐蔽。sharegpt_zh.json直接复制到data/目录下,重命名为sharegpt_zh_custom.json(文件名必须带_custom后缀,否则template不生效)。然后运行训练命令时必须带上--template sharegpt参数,不然框架会fallback到alpaca模板,把human全当instruction、gpt全当output,多轮逻辑彻底打乱。git clone https://github.com/hiyouga/LLaMA-Factory.git → cd LLaMA-Factory → pip install -e .就能快速上手。配置Axolotl启动训练
sharegpt_zh.jsonl,每行一个JSON对象,且每个对象包含conversations数组——注意不能是单个JSON数组包着所有样本,那种格式Axolotl不认。config.yml中定位datasets:节点,添加如下配置: - path: ./data/sharegpt_zh.jsonl
type: sharegpt
split: train
type值必须小写且严格为sharegpt,大小写错误或拼成share_gpt会导致解析器不触发。另外,部分0.5.x版本还需要加dataset_preprocessor: sharegpt,否则系统可能因未识别type而跳过预处理,直接报KeyError: 'messages'。accelerate launch -m axolotl.cli.train ./config.yml。看到日志中间出现"Using sharegpt template"即表示解析成功,开始对conversations数组进行tokenize,可以安心等loss下降了。相关阅读
更多
