把生产环境的"生数据"转化为大模型能听懂的"教材",这个过程在行业内被称为 数据清洗(Cleaning) 和 指令构造(Instruction Construction)。
在大模型微调中,数据质量遵循 "Garbage In, Garbage Out"(垃圾进,垃圾出)原则。即使你只有 500 条高质量数据,效果也比 5 万条乱七八糟的数据好。
以下是将生产数据转化为 instruction/input/output 格式的系统化方案:
第一步:理解数据结构的"三个口袋"
在 LLaMA-Factory 默认的格式中,每一条数据都有三个明确的职责:
- Instruction (指令):你对模型下的命令。比如:"请根据以下代码报错进行分析"、"请把这段中文翻译成 Go 语言"。
- Input (输入/上下文) :补充信息。比如:报错日志原文、一段长文档、之前的对话背景。如果指令本身很完整,这里可以留空
""。 - Output (输出/标准答案) :模型必须学会的回答。这是微调的核心。
第二步:常见生产数据转化场景
根据你原始数据的来源,转化的逻辑不同:
场景 A:客服记录 / 问答对 (QA)
如果你有现成的客服对话或 FAQ 库:
- 数据源:用户问:"怎么退款?",客服答:"请在后台点击..."。
- 转化逻辑 :
instruction: "用户询问退款流程,请给出标准答复。"input: ""output: "请在后台点击我的订单..."
场景 B:技术文档 / 知识库 (PDF/Wiki)
这是最难的,因为文档是平铺直叙的,没有问答。
- 数据源:一段关于 GVM 安装的文档。
- 转化逻辑(利用 LLM 辅助) :
- 把文档喂给 GPT-4 或 Claude。
- 要求它:"请根据这段文档,生成 5 个不同角度的提问和回答对,并按 JSON 格式输出。"
- 得到的结果就是你的微调数据。这种方法叫 Self-Instruct。
场景 C:结构化数据 (SQL/CSV)
- 数据源 :表格里有
error_code,reason,solution三列。 - 转化逻辑 :
instruction: f"当系统出现错误码 {error_code} 时,原因是什么以及如何解决?"input: ""output: f"原因是 {reason}。解决方法是:{solution}。"
第三步:动工工具------Python 脚本自动化
你不可能手动复制粘贴。你需要写一个简单的 Python 脚本。假设你的原始数据是一个 CSV 文件:
python
import pandas as pd
import json
# 1. 读取生产数据
df = pd.read_csv("production_data.csv")
dataset = []
for index, row in df.iterrows():
# 2. 根据业务逻辑拼接
item = {
"instruction": "分析以下 Go 语言报错并给出修复建议",
"input": row['error_log'], # 假设 CSV 里有一列叫 error_log
"output": row['fix_suggestion'] # 假设有一列叫 fix_suggestion
}
dataset.append(item)
# 3. 保存为 LLaMA-Factory 认可的 JSONL 或 JSON 格式
with open("data/prod_finetune_data.json", "w", encoding="utf-8") as f:
json.dump(dataset, f, ensure_ascii=False, indent=2)
print(f"成功转化 {len(dataset)} 条数据!")
第四步:数据质量的"三大杀手锏"
在合并成最终教材前,必须手动检查以下三点:
- 多样性 (Diversity) :不要让
instruction全是一模一样的字。- 坏例子:1000 条数据全是"请翻译这个词"。
- 好例子:混合使用"帮我翻译下"、"这个词用英语怎么说"、"把这段话转成英文"。
- 去重 (De-duplication):完全重复的数据会增加模型"死记硬背"的风险(过拟合)。
- 格式一致性:确保没有乱码、缺失的括号。
第五步:落地方案建议(初学者必看)
由于你是在 Mac M4 上测试,建议采取 "小步快跑" 的策略:
- 先抽样 100 条:先不要处理全量生产数据。选出最核心、最准确的 100 条转化。
- 跑通流程:用这 100 条跑一遍 LLaMA-Factory,看看 Loss 是否正常。
- 对比测试:测试这 100 条对应的知识点,模型是否真的掌握了。
- 规模化:验证成功后,再批量处理剩余的数据。