2026/2/21 1:56:08
网站建设
项目流程
怎么做好网站方式推广,wordpress ip改域名,阿里云做网站预装环境,淄博网络推广公司ms-swift自定义数据集教程#xff0c;三步完成格式转换
1. 引言#xff1a;为什么你需要自定义数据集#xff1f;
你有没有遇到过这种情况#xff1a;手头有一堆高质量的业务数据#xff0c;比如客服对话记录、产品描述文案、内部知识库内容#xff0c;但就是没法直接用…ms-swift自定义数据集教程三步完成格式转换1. 引言为什么你需要自定义数据集你有没有遇到过这种情况手头有一堆高质量的业务数据比如客服对话记录、产品描述文案、内部知识库内容但就是没法直接用来训练大模型不是格式不对就是字段混乱折腾半天还报错。别急今天这篇教程就是为了解决这个问题而生的。我们用ms-swift框架来教你如何把“野数据”变成“标准粮”只需要三步就能让你的数据顺利喂给 Qwen、Llama、InternLM 等主流大模型进行微调。整个过程不讲黑话不说术语就像朋友手把手带你操作一样简单。你能学到什么✅ 自定义数据长什么样怎么组织最省事✅ 三种常见原始数据JSON/CSV/TXT如何统一转成 ms-swift 能吃的格式✅ 实战演示从一份杂乱的对话数据到成功启动训练✅ 避坑指南那些文档里没写但你会踩的雷前置准备已安装ms-swift可通过 pip 安装有基础 Python 和命令行使用经验准备好你的原始数据文件支持 .json、.jsonl、.csv、.txt好了咱们直接开干。2. 第一步搞清楚 ms-swift 要什么格式在动手转换之前先得知道目标是什么。ms-swift 支持多种任务类型但最常见的还是指令微调SFT也就是让模型学会按你的要求回答问题。这类任务的标准输入是一个结构化的数据集每条样本包含至少两个字段{ messages: [ { role: user, content: 请介绍一下你自己 }, { role: assistant, content: 我是通义千问由阿里云研发的超大规模语言模型…… } ] }关键点解析messages是一个列表按对话顺序排列每条消息必须有role可以是user、assistant、systemcontent是具体的文本内容可以有多轮对话比如先提问 → 回答 → 再追问 → 再回答如果你的数据是单轮问答、文章生成、摘要任务也都适用这个结构只是messages里只有两轮用户问 模型答。提示ms-swift 还支持其他格式如promptresponse但我们推荐统一用messages格式兼容性最好未来扩展也方便。3. 第二步三类常见数据的转换方法现实中我们的数据往往五花八门。下面我挑三种最典型的场景手把手教你转成标准格式。3.1 场景一JSON/JSONL 文件最常见假设你有一个my_data.jsonl每行长这样{instruction: 写一首关于春天的诗, output: 春风拂面花自开柳绿桃红映山川……}这种结构清晰转换起来最容易。转换脚本Pythonimport json def convert_jsonl(input_path, output_path): with open(input_path, r, encodingutf-8) as f_in: with open(output_path, w, encodingutf-8) as f_out: for line in f_in: data json.loads(line.strip()) # 构造标准 messages 结构 messages [ {role: user, content: data[instruction]}, {role: assistant, content: data[output]} ] # 写入一行 JSON f_out.write(json.dumps({messages: messages}, ensure_asciiFalse) \n) # 使用示例 convert_jsonl(my_data.jsonl, train.jsonl)✅ 执行后生成train.jsonl就可以直接丢进 ms-swift 训练了。3.2 场景二CSV 表格数据很多运营、客服导出的数据都是 CSV比如questionanswer如何退货登录账号后进入订单页面…发货时间下单后48小时内发出…转换脚本Pythonimport csv import json def convert_csv(input_path, output_path): with open(input_path, r, encodingutf-8) as f_in: reader csv.DictReader(f_in) with open(output_path, w, encodingutf-8) as f_out: for row in reader: messages [ {role: user, content: row[question]}, {role: assistant, content: row[answer]} ] f_out.write(json.dumps({messages: messages}, ensure_asciiFalse) \n) # 使用示例 convert_csv(qa_data.csv, train.jsonl) 小技巧如果表头不是英文比如“问题”、“回复”只需把row[question]改成row[问题]即可。3.3 场景三纯文本TXT适合故事/文章生成有些数据是纯文本段落比如小说章节、产品介绍文案。例如story.txt【标题】春日游 【内容】春日暖阳洒在湖面上小舟轻轻荡漾。岸边桃花盛开香气扑鼻……我们需要把它包装成“用户提需求模型生成内容”的形式。转换脚本def convert_txt(input_path, output_path): with open(input_path, r, encodingutf-8) as f_in: content f_in.read().strip() # 按段落或标记分割这里以【】为界 parts [p.strip() for p in content.split(【) if p] with open(output_path, w, encodingutf-8) as f_out: for part in parts: if 标题 in part and 内容 in part: title part.split(】)[1].split(【)[0] text part.split(】)[2] messages [ {role: user, content: f写一篇题为《{title}》的文章}, {role: assistant, content: text} ] f_out.write(json.dumps({messages: messages}, ensure_asciiFalse) \n) convert_txt(story.txt, train.jsonl) 提示TXT 的处理方式很灵活关键是设计一个合理的“触发语句”即 user 的 input让训练时的输入和推理时保持一致。4. 第三步验证并开始训练数据转完了别急着跑训练先检查一下对不对。4.1 快速验证格式是否正确运行这条命令看能不能正常读取前几条数据head -n 2 train.jsonl | python -m json.tool如果输出是整齐的 JSON 结构说明格式没问题。也可以用 Python 读一下import json with open(train.jsonl, r) as f: for i in range(2): line f.readline() print(json.loads(line))预期输出{ messages: [ {role: user, content: 写一首关于春天的诗}, {role: assistant, content: 春风拂面花自开...} ] }✅ 如果能看到这个恭喜你数据已经 ready4.2 启动训练以 LoRA 微调为例现在你可以像官方示例一样用swift sft命令开始训练了CUDA_VISIBLE_DEVICES0 swift sft \ --model Qwen/Qwen2.5-7B-Instruct \ --dataset ./train.jsonl \ --train_type lora \ --output_dir output-qwen-lora \ --num_train_epochs 3 \ --per_device_train_batch_size 1 \ --gradient_accumulation_steps 8 \ --learning_rate 1e-4 \ --lora_rank 64 \ --lora_alpha 128 \ --max_length 2048 \ --save_steps 100 \ --logging_steps 10 注意事项--dataset后面直接跟你的本地文件路径支持相对路径如果数据量小建议减少num_train_epochs防止过拟合LoRA 参数可以根据显存调整7B 模型建议lora_rank64,lora_alpha1285. 常见问题与避坑指南5.1 数据加载失败检查这几点问题现象可能原因解决方案报错KeyError: messages字段名写错了确保是messages不是message或conversations报错Invalid formatJSON 格式不合法用json.tool检查每一行是否都能解析训练卡住不动文件编码问题保存为 UTF-8 编码不要用 GBK显存爆了max_length 太大设置--max_length 1024或2048避免默认 327685.2 多轮对话怎么写如果你要做客服机器人支持多轮交互messages可以更长{ messages: [ {role: user, content: 我想买手机}, {role: assistant, content: 您想要什么品牌}, {role: user, content: 华为}, {role: assistant, content: 推荐Mate 60系列性能强劲……} ] }✅ ms-swift 会自动处理这种上下文依赖不需要额外设置。5.3 能不能加 system prompt可以在messages最前面加上就行{ messages: [ {role: system, content: 你是一个专业的电子产品导购员}, {role: user, content: 我想买手机}, {role: assistant, content: 您想要什么品牌} ] }这样模型在训练时就会记住这个角色设定效果更好。6. 总结三步走通全流程我们来回顾一下整个流程其实就三步## 6.1 数据准备三步曲看清结构确认原始数据是 JSON、CSV 还是 TXT统一格式转成{messages: [...]}的 JSONL 格式验证可用用head json.tool检查前几行## 6.2 训练建议清单✅ 文件命名建议train.jsonl、dev.jsonl清晰明了✅ 编码务必 UTF-8避免中文乱码✅ 每行一个样本不要合并成大数组✅ 多轮对话自然写不用拆开✅ 可加入system角色提升效果## 6.3 下一步你可以尝试把公司内部 FAQ 转成训练集打造专属客服模型用历史工单数据训练一个自动摘要模型结合 Web UI 界面实现零代码训练部署只要数据格式对了剩下的交给 ms-swift 就行。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。