ShareGPT中文微调需先清洗并格式转换:确认conversations结构合法、过滤非中文样本、清除HTML/URL;再按ChatGLM3、LLaMA-Factory或Axolotl要求转为instruction-input-output、sharegpt_custom.json或sharegpt.jsonl格式,否则训练报错或loss不降。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要把原始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,整条对话就得剔除——【ShareGPT中文微调中,单轮非中文即整条淘汰】。
用正则清除HTML标签与URL:sed -i 's/]*>//g; s/https\?:\/\/[^[:space:]]*//g' sharegpt_zh.json。这一步不能跳,否则tokenizer会把<div>当成有效token,污染attention权重。
转换为框架可识别的格式
方法一:适配ChatGLM3-6B官方脚本(需手动结构映射)
第一步:用Python脚本遍历每条样本,提取conversations[0]["value"]作为instruction,取最后一条from=="gpt"的value作为output,中间轮次拼成input字段(若有多轮)。
第二步:生成新JSONL文件,确保每行仅一个字典,且严格包含instruction、input、output三键。注意:input为空字符串时不能写null,必须写""。
第三步:检查首行是否能被json.loads()成功解析,失败则说明存在未转义的双引号或换行符——这类错误会导致训练启动后卡在DataLoader第一轮。
方法二:交给LLaMA-Factory自动处理(推荐新手)
git clone https://github.com/hiyouga/LLaMA-Factory.git → cd LLaMA-Factory → pip install -e .
将小说章节转换为电影分镜剧本。用户上传txt/md/docx文本,AI分析场景、角色、情绪、镜头语言,输出专业分镜脚本。适用于用户提及“分镜”“storyboard”“小说转分镜”“影视改编”“镜头脚本”或需要将小说改编为分镜的场景。
将原始sharegpt_zh.json直接复制到data/目录下,重命名为sharegpt_zh_custom.json(文件名必须带_custom后缀,否则template不生效)。
运行训练命令时必须带上--template sharegpt参数,否则框架会fallback到alpaca模板,把human全当instruction,gpt全当output,彻底打乱多轮逻辑。
配置Axolotl启动训练
将清洗后的数据保存为sharegpt_zh.jsonl,确保每行一个JSON对象,且每个对象含conversations数组——不能是单个JSON数组包着所有样本。
在axolotl的config.yml中定位datasets:节点,添加如下项:
- path: ./data/sharegpt_zh.jsonl
type: sharegpt
split: train
type值必须小写且严格为sharegpt,大小写错误或拼成share_gpt会导致解析器不触发。
添加dataset_preprocessor: sharegpt(部分0.5.x版本必需),否则系统可能因未识别type而跳过预处理,直接报KeyError: 'messages'。
启动训练:accelerate launch -m axolotl.cli.train ./config.yml。看到日志中出现"Using sharegpt template"即表示解析成功,开始tokenize conversations数组。

















