LLaMA-Factory微调数据的清洗与指令构造方法

把生产环境的"生数据"转化为大模型能听懂的"教材",这个过程在行业内被称为 数据清洗(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 辅助)
    1. 把文档喂给 GPT-4 或 Claude。
    2. 要求它:"请根据这段文档,生成 5 个不同角度的提问和回答对,并按 JSON 格式输出。"
    3. 得到的结果就是你的微调数据。这种方法叫 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)} 条数据!")

第四步:数据质量的"三大杀手锏"

在合并成最终教材前,必须手动检查以下三点:

  1. 多样性 (Diversity) :不要让 instruction 全是一模一样的字。
    • 坏例子:1000 条数据全是"请翻译这个词"。
    • 好例子:混合使用"帮我翻译下"、"这个词用英语怎么说"、"把这段话转成英文"。
  2. 去重 (De-duplication):完全重复的数据会增加模型"死记硬背"的风险(过拟合)。
  3. 格式一致性:确保没有乱码、缺失的括号。

第五步:落地方案建议(初学者必看)

由于你是在 Mac M4 上测试,建议采取 "小步快跑" 的策略:

  1. 先抽样 100 条:先不要处理全量生产数据。选出最核心、最准确的 100 条转化。
  2. 跑通流程:用这 100 条跑一遍 LLaMA-Factory,看看 Loss 是否正常。
  3. 对比测试:测试这 100 条对应的知识点,模型是否真的掌握了。
  4. 规模化:验证成功后,再批量处理剩余的数据。
相关推荐
怀旧,2 分钟前
【Linux系统编程】23. 线程同步与互斥(下)
linux·运维·服务器
西贝爱学习4 分钟前
pdf转TXT文本,适用于文字型PDF;扫描版PDF需要使用OCR(光学字符识别)技术来识别图中的文字
java·服务器·前端
偶尔上线经常挺尸5 分钟前
《每日一命令18:iptables——Linux防火墙入门》
linux·运维·服务器·iptables·防火墙
原来是猿12 分钟前
网络计算器:理解序列化与反序列化(上)
linux·运维·服务器·网络·tcp/ip
青柠代码录17 分钟前
【JVM】面试题-Java中有哪些引用类型
java·jvm
Cx330❀18 分钟前
从零实现一个 C++ 轻量级日志系统:原理与实践
大数据·linux·运维·服务器·开发语言·c++·搜索引擎
程序leo源20 分钟前
Linux深度理解
linux·运维·服务器·c语言·c++·青少年编程·c#
计算机安禾22 分钟前
【c++面向对象编程】第7篇:static成员:属于类而不是对象的变量和函数
java·c++·算法
怀旧,25 分钟前
【Linux系统编程】22. 线程同步与互斥(上)
linux·运维·服务器
光电笑映29 分钟前
进程控制:从创建到替换的完整指南
linux·运维·服务器