LLaMA-Factory数据生成:从零构建高质量微调数据集

在大语言模型(LLM)微调过程中,高质量数据集是决定模型性能的关键因素。LLaMA-Factory作为一款功能全面的微调框架,不仅支持多种训练方式,还提供了灵活的数据生成与处理工具。本文将详细介绍如何利用LLaMA-Factory构建自定义微调数据集,帮助普通用户快速掌握数据合成的核心方法。

数据生成的核心痛点与解决方案

你是否遇到过这些问题?

  • 公开数据集与业务场景不匹配
  • 标注数据成本高、周期长
  • 多模态数据(文本+图像/音频)处理困难

LLaMA-Factory通过模块化设计解决了这些痛点,其数据模块支持从模板定义、格式转换到多模态融合的全流程处理。核心代码位于src/llamafactory/data/,包含模板引擎、数据格式化工具和多模态插件。

基础数据模板设计

模板文件结构

LLaMA-Factory使用JSON格式定义数据集模板,指定数据字段、格式和处理规则。典型配置如data/dataset_info.json所示,包含以下关键部分:

{
  "alpaca_zh_demo": {
    "file_name": "alpaca_zh_demo.json",
    "formatting": "sharegpt",
    "columns": {
      "messages": "conversations"
    }
  },
  "mllm_demo": {
    "file_name": "mllm_demo.json",
    "formatting": "sharegpt",
    "columns": {
      "messages": "messages",
      "images": "images"
    }
  }
}

常用模板类型

  1. 基础问答模板:适用于简单指令微调,如alpaca_zh_demo.json包含instruction(指令)、input(输入)、output(输出)三要素:

    {
      "instruction": "识别并解释给定列表中的两个科学理论",
      "input": "细胞理论和日心说",
      "output": "细胞理论是生物科学的基础理论..."
    }
    
  2. 多轮对话模板:采用ShareGPT格式,支持上下文连贯的对话数据,如:

    {
      "conversations": [
        {"role": "user", "content": "推荐一部科幻电影"},
        {"role": "assistant", "content": "《星际穿越》..."},
        {"role": "user", "content": "为什么推荐这部?"},
        {"role": "assistant", "content": "因为它结合了科学准确性和人文思考..."}
      ]
    }
    
  3. 多模态模板:支持图像、音频等附加信息,如mllm_demo.json包含images字段关联视觉数据。

数据合成实战:三步构建自定义数据集

步骤1:准备原始数据

根据模板要求整理原始数据,支持以下来源:

步骤2:格式转换与清洗

使用LLaMA-Factory的数据格式化工具将原始数据转换为模型可接受的格式:

# 数据格式化核心逻辑(简化版)
from src.llamafactory.data.formatter import StringFormatter

# 定义用户消息模板
formatter = StringFormatter(slots=["{{content}}"])
# 应用模板
formatted_data = formatter.apply(content="用户输入内容")

关键处理包括:

  • 字段映射:通过columns配置将原始字段映射到标准字段(如promptinstruction
  • 文本清洗:去除特殊字符、统一格式
  • 多模态处理:通过mm_plugin.py解析图像/音频路径

步骤3:质量控制与验证

  1. 数据抽样检查:随机抽取样本验证格式正确性,如:

    # 查看数据集前10条记录
    head -n 10 data/alpaca_zh_demo.json
    
  2. 重复数据检测:使用工具去除重复样本

  3. 长度过滤:通过src/llamafactory/data/data_utils.py限制文本长度,避免超长输入

高级数据增强技术

思维链(CoT)数据生成

通过模板自动为问题添加推理过程,提升模型推理能力。核心代码在src/llamafactory/data/template.pyReasoningTemplate类:

# 添加思维链标记
def add_thought(self, content: str = "") -> str:
    return f"{self.thought_words[0]}{self.thought_words[1]}" + content

效果示例:

用户问题:3+4=?
增强后:
<思考>我需要计算3加4的结果,3加4等于7</思考>
7

多模态数据融合

LLaMA-Factory支持文本+图像/音频的多模态数据训练,配置示例:

{
  "messages": [{"role": "user", "content": "描述这张图片"}],
  "images": ["data/mllm_demo_data/1.jpg"]
}

图像解析由mm_plugin.py处理,自动将图像路径转换为模型可识别的格式。

数据集使用流程

1. 配置数据集路径

在训练配置文件(如examples/train_lora/llama3_lora_sft.yaml)中指定数据集:

data_args:
  dataset: alpaca_zh_demo
  dataset_dir: data

2. 启动数据预处理

通过命令行启动数据预处理流程:

python src/train.py \
  --stage sft \
  --model_name_or_path meta-llama/Llama-2-7b-hf \
  --dataset alpaca_zh_demo \
  --output_dir ./output/llama3_lora_sft

3. 监控数据处理进度

预处理日志会显示数据加载、格式化和过滤情况,关键指标包括:

  • 总样本数
  • 有效样本比例
  • 平均序列长度

数据生成工具链

LLaMA-Factory提供完整的辅助工具链,位于scripts/目录:

项目架构图

最佳实践与常见问题

数据集构建 checklist

  •  使用清晰的指令-响应对结构
  •  确保输出内容准确、无事实错误
  •  控制单条样本长度在512-2048 tokens
  •  平衡不同类型任务的样本比例

常见问题解决

  1. 数据格式错误:检查JSON格式是否合法,推荐使用JSONLint验证
  2. 多模态数据加载失败:确认图像路径正确,支持相对路径(如data/mllm_demo_data/1.jpg
  3. 训练时数据溢出:在配置文件中设置max_seq_length限制输入长度

总结与后续展望

通过LLaMA-Factory的数据生成工具,用户可以快速构建从简单问答到复杂多模态的各类微调数据集。关键步骤包括模板定义、数据转换和质量控制,结合框架提供的工具链可显著降低数据准备门槛。

下一步行动建议

  1. 尝试修改alpaca_zh_demo.json创建自定义指令集
  2. 使用examples/train_lora/llama3_lora_sft.yaml进行小批量训练验证
  3. 探索多模态数据生成,参考mllm_demo.json添加图像描述数据

掌握数据生成技巧后,你可以针对特定场景(如客服对话、代码生成)定制高质量数据集,充分发挥LLM的微调潜力。更多高级功能请参考官方文档README_zh.md

Logo

更多推荐