LLaMA-Factory数据集处理指南:从JSON到高效微调数据
LLaMA-Factory数据集处理指南:从JSON到高效微调数据
【免费下载链接】LlamaFactoryUnified Efficient Fine-Tuning of 100+ LLMs & VLMs (ACL 2024)项目地址: https://gitcode.com/GitHub_Trending/ll/LlamaFactory
在大语言模型(LLM)微调过程中,高质量的数据集是模型性能的关键决定因素。LLaMA-Factory作为一款功能全面的微调框架,提供了灵活的数据处理流程,支持从原始JSON文件到模型输入的全链路转换。本文将详细介绍如何使用LLaMA-Factory进行数据集准备,包括数据格式规范、配置文件设置、数据解析与格式化的完整流程,并提供实际案例和工具使用指南。
数据集格式概览
LLaMA-Factory支持两种主流数据格式:Alpaca格式和ShareGPT格式,分别适用于单轮指令微调与多轮对话场景。这两种格式通过src/llamafactory/data/parser.py中的DatasetAttr类进行统一管理,确保不同来源的数据能够被标准化处理。
Alpaca格式(单轮指令)
Alpaca格式采用instruction-input-output三元组结构,适合构建简单的问答数据。典型示例可见data/alpaca_zh_demo.json:
{ "instruction": "识别并解释给定列表中的两个科学理论:细胞理论和日心说。", "input": "", "output": "细胞理论是生物科学的一个理论,它认为所有生命体都是由微小的基本单元——细胞所构成..." }该格式通过prompt(指令)、query(输入)、response(输出)三个核心字段定义样本,对应src/llamafactory/data/parser.py中的配置参数。当input字段为空时,表示该样本为纯指令类型。
ShareGPT格式(多轮对话)
ShareGPT格式采用会话列表结构,支持多轮交互场景,如data/mllm_demo.json所示:
{ "messages": [ {"role": "user", "content": "描述这张图片的内容", "images": ["mllm_demo_data/1.jpg"]}, {"role": "assistant", "content": "图片中展示了一只正在玩耍的猫..."} ] }这种格式通过messages字段存储对话历史,每个消息对象包含role(角色)和content(内容),并支持images/videos/audios等多模态字段。data/dataset_info.json中定义了MLLM(多模态大模型)数据的解析规则,包括formatting: "sharegpt"和columns: {"messages": "messages", "images": "images"}等配置。
数据配置文件详解
data/dataset_info.json是数据集处理的核心配置文件,定义了不同数据集的元信息和解析规则。该文件采用JSON格式,每个键对应一个数据集名称,值包含加载方式、格式类型、字段映射等关键参数。
配置结构解析
以DPO(直接偏好优化)数据集配置为例:
"dpo_zh_demo": { "file_name": "dpo_zh_demo.json", "ranking": true, "formatting": "sharegpt", "columns": { "messages": "conversations", "chosen": "chosen", "rejected": "rejected" } }file_name: 指定数据文件路径,相对于data/目录ranking: 标记是否为排序类数据(如DPO/KTO任务)formatting: 指定数据格式(alpaca或sharegpt)columns: 字段映射关系,将原始数据字段映射到框架标准字段
完整的配置参数说明可参考src/llamafactory/data/parser.py中的DatasetAttr类定义,包括基础配置(加载方式、数据集名称)、格式配置(字段映射、标签定义)和高级配置(子集选择、样本数量限制)等。
自定义数据集配置
添加新数据集时,需在data/dataset_info.json中添加相应配置。例如,为自定义的医疗问答数据集添加配置:
"medical_qa_zh": { "file_name": "medical_qa_zh.json", "formatting": "alpaca", "columns": { "prompt": "question", "response": "answer" } }其中columns字段将原始数据的question字段映射为框架的prompt字段,answer字段映射为response字段。这种灵活的映射机制使LLaMA-Factory能够兼容各种结构的原始数据。
数据解析与处理流程
LLaMA-Factory的数据处理流程通过src/llamafactory/data/parser.py和src/llamafactory/data/formatter.py实现,包含数据加载、字段解析、格式转换三个核心步骤。
数据加载(Loader)
数据加载模块根据load_from参数(src/llamafactory/data/parser.py#L31)支持多种来源:
file: 本地JSON/JSONL文件(如data/alpaca_zh_demo.json)hf_hub/ms_hub/om_hub: 模型仓库数据集(如llamafactory/alpaca_zh)script: 自定义脚本生成数据(如data/belle_multiturn/belle_multiturn.py)
加载逻辑在src/llamafactory/data/parser.py#L93-L147的get_dataset_list函数中实现,根据配置自动选择合适的加载方式。
数据解析(Parser)
解析模块将原始数据转换为统一的内部表示。以Alpaca格式解析为例,核心逻辑如下:
- 读取JSON文件并遍历样本
- 根据data/dataset_info.json中的字段映射提取
prompt/query/response - 应用模板格式化(如添加指令前缀)
- 返回标准化样本列表
解析过程中会处理特殊情况,如空input字段的处理(直接忽略)、多轮对话的拼接等。src/llamafactory/data/parser.py中的DatasetAttr类提供了完整的字段映射机制,通过join方法整合配置中的columns和tags信息。
数据格式化(Formatter)
格式化模块将解析后的标准化数据转换为模型输入格式,关键实现位于src/llamafactory/data/formatter.py。框架提供多种格式化器:
StringFormatter: 处理带占位符的模板字符串FunctionFormatter: 格式化工具调用数据ToolFormatter: 处理工具定义数据
例如,Alpaca格式的默认模板为:
{prompt}\n{query}\n\n{response}当query为空时,自动简化为{prompt}\n\n{response}。这种动态调整确保了不同类型样本的正确格式化。
实操案例:处理自定义JSON数据
以下通过一个完整案例演示如何将自定义JSON数据集成到LLaMA-Factory的微调流程中。假设我们有一个电商产品问答数据集product_qa.json,结构如下:
[ { "question": "这款手机支持5G网络吗?", "answer": "是的,本机型支持全网通5G网络..." }, // 更多样本... ]步骤1:放置数据文件
将product_qa.json复制到data/目录下,确保文件编码为UTF-8。
步骤2:配置dataset_info.json
在data/dataset_info.json中添加配置:
"product_qa": { "file_name": "product_qa.json", "formatting": "alpaca", "columns": { "prompt": "question", "response": "answer", "query": "" // 显式指定query字段为空 } }步骤3:验证数据加载
使用以下命令验证数据加载是否正常:
python src/train.py \ --model_name_or_path your_model \ --dataset product_qa \ --do_train \ --output_dir ./output \ --overwrite_output_dir若配置正确,程序将输出数据加载日志,显示样本数量和格式统计信息。
常见问题排查
- 字段映射错误:检查data/dataset_info.json中的
columns配置是否与JSON文件中的字段名匹配 - 格式类型错误:单轮数据使用
formatting: "alpaca",多轮数据使用formatting: "sharegpt" - 文件路径问题:确保
file_name路径正确,相对于data/目录
高级功能:多模态与偏好数据处理
LLaMA-Factory支持复杂数据类型处理,包括多模态数据和偏好优化数据,满足高级微调需求。
多模态数据处理
多模态数据(如图文问答)通过ShareGPT格式扩展实现,需在样本中包含媒体文件路径。例如data/mllm_demo.json中的配置:
{ "messages": [ { "role": "user", "content": "描述这张图片的内容", "images": ["mllm_demo_data/1.jpg"] }, { "role": "assistant", "content": "图片中展示了一只正在玩耍的猫..." } ] }媒体文件需放置在data/mllm_demo_data/目录下,支持JPG/PNG等常见格式。data/dataset_info.json中的mllm_demo配置定义了媒体字段的解析规则。
偏好优化数据(DPO/KTO)
偏好数据(如DPO的chosen/rejected样本对)需在data/dataset_info.json中设置ranking: true。以data/dpo_zh_demo.json为例:
{ "conversations": [{"role": "user", "content": "推荐一部科幻电影"}], "chosen": {"role": "assistant", "content": "推荐《星际穿越》..."}, "rejected": {"role": "assistant", "content": "不知道"} }该配置通过src/llamafactory/data/parser.py中的chosen和rejected字段定义正负样本,用于训练模型的偏好排序能力。
数据集质量控制建议
高质量的数据是微调效果的基础,建议从以下方面进行数据质量控制:
- 去重处理:使用脚本去除重复样本,避免模型过拟合
- 长度过滤:过滤过短(<10 tokens)或过长(>2048 tokens)的样本
- 人工审核:随机抽查样本,确保回答准确性和指令相关性
- 格式统一:使用src/llamafactory/data/utils.py中的工具函数标准化标点和空格
LLaMA-Factory提供了基础的数据清洗工具,可通过num_samples参数(src/llamafactory/data/parser.py#L39)限制样本数量,快速验证数据处理流程。
总结与最佳实践
LLaMA-Factory通过灵活的配置系统和标准化的数据处理流程,降低了LLM微调的数据准备门槛。关键要点总结:
- 格式选择:单轮指令用Alpaca格式,多轮对话用ShareGPT格式
- 配置核心:通过data/dataset_info.json定义数据解析规则
- 工具支持:利用src/llamafactory/data/parser.py和src/llamafactory/data/formatter.py进行高级定制
- 质量第一:重视数据清洗和验证,避免引入噪声样本
建议在开始大规模微调前,先用少量样本测试数据处理流程,确认输出格式符合预期。通过合理利用LLaMA-Factory的数据处理能力,可以显著提升微调效率和模型性能。
完整的数据处理流水线实现可参考src/llamafactory/data/目录下的源代码,其中src/llamafactory/data/loader.py和src/llamafactory/data/processor/包含了数据加载和预处理的完整实现。
【免费下载链接】LlamaFactoryUnified Efficient Fine-Tuning of 100+ LLMs & VLMs (ACL 2024)项目地址: https://gitcode.com/GitHub_Trending/ll/LlamaFactory
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考