news 2026/7/31 21:50:23

LLaMA-Factory数据集处理指南:从JSON到高效微调数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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: 指定数据格式(alpacasharegpt
  • 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格式解析为例,核心逻辑如下:

  1. 读取JSON文件并遍历样本
  2. 根据data/dataset_info.json中的字段映射提取prompt/query/response
  3. 应用模板格式化(如添加指令前缀)
  4. 返回标准化样本列表

解析过程中会处理特殊情况,如空input字段的处理(直接忽略)、多轮对话的拼接等。src/llamafactory/data/parser.py中的DatasetAttr类提供了完整的字段映射机制,通过join方法整合配置中的columnstags信息。

数据格式化(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中的chosenrejected字段定义正负样本,用于训练模型的偏好排序能力。

数据集质量控制建议

高质量的数据是微调效果的基础,建议从以下方面进行数据质量控制:

  1. 去重处理:使用脚本去除重复样本,避免模型过拟合
  2. 长度过滤:过滤过短(<10 tokens)或过长(>2048 tokens)的样本
  3. 人工审核:随机抽查样本,确保回答准确性和指令相关性
  4. 格式统一:使用src/llamafactory/data/utils.py中的工具函数标准化标点和空格

LLaMA-Factory提供了基础的数据清洗工具,可通过num_samples参数(src/llamafactory/data/parser.py#L39)限制样本数量,快速验证数据处理流程。

总结与最佳实践

LLaMA-Factory通过灵活的配置系统和标准化的数据处理流程,降低了LLM微调的数据准备门槛。关键要点总结:

  1. 格式选择:单轮指令用Alpaca格式,多轮对话用ShareGPT格式
  2. 配置核心:通过data/dataset_info.json定义数据解析规则
  3. 工具支持:利用src/llamafactory/data/parser.py和src/llamafactory/data/formatter.py进行高级定制
  4. 质量第一:重视数据清洗和验证,避免引入噪声样本

建议在开始大规模微调前,先用少量样本测试数据处理流程,确认输出格式符合预期。通过合理利用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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 21:37:27

开发者的文档翻译工作流:PDF翻译+格式校验+质量对比的一站式方案

前言在技术团队里&#xff0c;文档翻译是一个经常被低估但极耗精力的环节。不管是给海外客户交付英文文档、翻译开源项目的技术白皮书、还是处理跨国合作中的合同和规格说明书——"翻译 PDF 但保持格式"几乎成了程序员的潜规则需求。 这篇文章分享一套我在团队中搭建…

作者头像 李华
网站建设 2026/7/31 21:37:06

4GB显存玩转大模型!LLaMA-Factory AutoGPTQ量化微调全攻略

4GB显存玩转大模型&#xff01;LLaMA-Factory AutoGPTQ量化微调全攻略 【免费下载链接】LlamaFactory Unified Efficient Fine-Tuning of 100 LLMs & VLMs (ACL 2024) 项目地址: https://gitcode.com/GitHub_Trending/ll/LlamaFactory 你是否还在为微调70亿参数模型…

作者头像 李华