LLaMA-Factory 数据集成从入门到精通

一、框架概述

LLaMA-Factory 框架通过Alpaca/Sharegpt双格式体系实现多任务适配,其中Alpaca专注结构化指令微调(含SFT/DPO/预训练),Sharegpt支持多角色对话及多模态数据集成。核心配置依托 dataset_info.json 实现数据源映射、格式定义(formatting)、列名绑定(columns)及角色标签(tags)设置,需特别注意多模态路径与文本标记的严格匹配。优先级规则遵循:云端仓库 > 本地脚本 > 文件直读,配置时须规避角色标签冲突和路径验证疏漏等常见误区。


二、数据集配置规范

dataset_info.json 包含了所有可用的数据集。如果您希望使用自定义数据集,请务必dataset_info.json 文件中添加数据集描述,并通过修改 dataset: 数据集名称 配置来使用数据集。

目前我们支持 alpaca 格式和 sharegpt 格式的数据集。

"数据集名称": {"hf_hub_url": "Hugging Face 的数据集仓库地址(若指定,则忽略 script_url 和 file_name)","ms_hub_url": "ModelScope 的数据集仓库地址(若指定,则忽略 script_url 和 file_name)","script_url": "包含数据加载脚本的本地文件夹名称(若指定,则忽略 file_name)","file_name": "该目录下数据集文件夹或文件的名称(若上述参数未指定,则此项必需)","formatting": "数据集格式(可选,默认:alpaca,可以为 alpaca 或 sharegpt)","ranking": "是否为偏好数据集(可选,默认:False)","subset": "数据集子集的名称(可选,默认:None)","split": "所使用的数据集切分(可选,默认:train)","folder": "Hugging Face 仓库的文件夹名称(可选,默认:None)","num_samples": "该数据集所使用的样本数量。(可选,默认:None)","columns(可选)": {"prompt": "数据集代表提示词的表头名称(默认:instruction)","query": "数据集代表请求的表头名称(默认:input)","response": "数据集代表回答的表头名称(默认:output)","history": "数据集代表历史对话的表头名称(默认:None)","messages": "数据集代表消息列表的表头名称(默认:conversations)","system": "数据集代表系统提示的表头名称(默认:None)","tools": "数据集代表工具描述的表头名称(默认:None)","images": "数据集代表图像输入的表头名称(默认:None)","videos": "数据集代表视频输入的表头名称(默认:None)","audios": "数据集代表音频输入的表头名称(默认:None)","chosen": "数据集代表更优回答的表头名称(默认:None)","rejected": "数据集代表更差回答的表头名称(默认:None)","kto_tag": "数据集代表 KTO 标签的表头名称(默认:None)"},"tags(可选,用于 sharegpt 格式)": {"role_tag": "消息中代表发送者身份的键名(默认:from)","content_tag": "消息中代表文本内容的键名(默认:value)","user_tag": "消息中代表用户的 role_tag(默认:human)","assistant_tag": "消息中代表助手的 role_tag(默认:gpt)","observation_tag": "消息中代表工具返回结果的 role_tag(默认:observation)","function_tag": "消息中代表工具调用的 role_tag(默认:function_call)","system_tag": "消息中代表系统提示的 role_tag(默认:system,会覆盖 system column)"}
}

Alpaca 格式

指令监督微调数据集

  • 样例数据集

在指令监督微调时,instruction 列对应的内容会与 input 列对应的内容拼接后作为人类指令,即人类指令为 instruction\ninput。而 output 列对应的内容为模型回答。

如果指定,system 列对应的内容将被作为系统提示词。

history 列是由多个字符串二元组构成的列表,分别代表历史消息中每轮对话的指令和回答。注意在指令监督微调时,历史消息中的回答内容也会被用于模型学习

[{"instruction": "人类指令(必填)","input": "人类输入(选填)","output": "模型回答(必填)","system": "系统提示词(选填)","history": [["第一轮指令(选填)", "第一轮回答(选填)"],["第二轮指令(选填)", "第二轮回答(选填)"]]}
]

对于上述格式的数据,dataset_info.json 中的数据集描述应为:

"数据集名称": {"file_name": "data.json","columns": {"prompt": "instruction","query": "input","response": "output","system": "system","history": "history"}
}

预训练数据集

  • 样例数据集

在预训练时,只有 text 列中的内容会用于模型学习。

[{"text": "document"},{"text": "document"}
]

对于上述格式的数据,dataset_info.json 中的数据集描述应为:

"数据集名称": {"file_name": "data.json","columns": {"prompt": "text"}
}

偏好数据集

偏好数据集用于奖励模型训练、DPO 训练、ORPO 训练和 SimPO 训练。

它需要在 chosen 列中提供更优的回答,并在 rejected 列中提供更差的回答。

[{"instruction": "人类指令(必填)","input": "人类输入(选填)","chosen": "优质回答(必填)","rejected": "劣质回答(必填)"}
]

对于上述格式的数据,dataset_info.json 中的数据集描述应为:

"数据集名称": {"file_name": "data.json","ranking": true,"columns": {"prompt": "instruction","query": "input","chosen": "chosen","rejected": "rejected"}
}

KTO 数据集

KTO 数据集需要提供额外的 kto_tag 列。详情请参阅 sharegpt。

多模态图像数据集

多模态图像数据集需要提供额外的 images 列。详情请参阅 sharegpt。

多模态视频数据集

多模态视频数据集需要提供额外的 videos 列。详情请参阅 sharegpt。

多模态音频数据集

多模态音频数据集需要提供额外的 audios 列。详情请参阅 sharegpt。

Sharegpt 格式

指令监督微调数据集

  • 样例数据集

相比 alpaca 格式的数据集,sharegpt 格式支持更多的角色种类,例如 human、gpt、observation、function 等等。它们构成一个对象列表呈现在 conversations 列中。

注意其中 human 和 observation 必须出现在奇数位置,gpt 和 function 必须出现在偶数位置。

[{"conversations": [{"from": "human","value": "人类指令"},{"from": "function_call","value": "工具参数"},{"from": "observation","value": "工具结果"},{"from": "gpt","value": "模型回答"}],"system": "系统提示词(选填)","tools": "工具描述(选填)"}
]

对于上述格式的数据,dataset_info.json 中的数据集描述应为:

"数据集名称": {"file_name": "data.json","formatting": "sharegpt","columns": {"messages": "conversations","system": "system","tools": "tools"}
}

预训练数据集

尚不支持,请使用 alpaca 格式。

偏好数据集

  • 样例数据集

Sharegpt 格式的偏好数据集同样需要在 chosen 列中提供更优的消息,并在 rejected 列中提供更差的消息。

[{"conversations": [{"from": "human","value": "人类指令"},{"from": "gpt","value": "模型回答"},{"from": "human","value": "人类指令"}],"chosen": {"from": "gpt","value": "优质回答"},"rejected": {"from": "gpt","value": "劣质回答"}}
]

对于上述格式的数据,dataset_info.json 中的数据集描述应为:

"数据集名称": {"file_name": "data.json","formatting": "sharegpt","ranking": true,"columns": {"messages": "conversations","chosen": "chosen","rejected": "rejected"}
}

KTO 数据集

  • 样例数据集

KTO 数据集需要额外添加一个 kto_tag 列,包含 bool 类型的人类反馈。

[{"conversations": [{"from": "human","value": "人类指令"},{"from": "gpt","value": "模型回答"}],"kto_tag": "人类反馈 [true/false](必填)"}
]

对于上述格式的数据,dataset_info.json 中的数据集描述应为:

"数据集名称": {"file_name": "data.json","formatting": "sharegpt","columns": {"messages": "conversations","kto_tag": "kto_tag"}
}

多模态图像数据集

  • 样例数据集

多模态图像数据集需要额外添加一个 images 列,包含输入图像的路径。

注意图片的数量必须与文本中所有 <image> 标记的数量严格一致。

[{"conversations": [{"from": "human","value": "<image>人类指令"},{"from": "gpt","value": "模型回答"}],"images": ["图像路径(必填)"]}
]

对于上述格式的数据,dataset_info.json 中的数据集描述应为:

"数据集名称": {"file_name": "data.json","formatting": "sharegpt","columns": {"messages": "conversations","images": "images"}
}

多模态视频数据集

  • 样例数据集

多模态视频数据集需要额外添加一个 videos 列,包含输入视频的路径。

注意视频的数量必须与文本中所有 <video> 标记的数量严格一致。

[{"conversations": [{"from": "human","value": "<video>人类指令"},{"from": "gpt","value": "模型回答"}],"videos": ["视频路径(必填)"]}
]

对于上述格式的数据,dataset_info.json 中的数据集描述应为:

"数据集名称": {"file_name": "data.json","formatting": "sharegpt","columns": {"messages": "conversations","videos": "videos"}
}

多模态音频数据集

  • 样例数据集

多模态音频数据集需要额外添加一个 audios 列,包含输入音频的路径。

注意音频的数量必须与文本中所有 <audio> 标记的数量严格一致。

[{"conversations": [{"from": "human","value": "<audio>人类指令"},{"from": "gpt","value": "模型回答"}],"audios": ["音频路径(必填)"]}
]

对于上述格式的数据,dataset_info.json 中的数据集描述应为:

"数据集名称": {"file_name": "data.json","formatting": "sharegpt","columns": {"messages": "conversations","audios": "audios"}
}

OpenAI 格式

OpenAI 格式仅仅是 sharegpt 格式的一种特殊情况,其中第一条消息可能是系统提示词。

[{"messages": [{"role": "system","content": "系统提示词(选填)"},{"role": "user","content": "人类指令"},{"role": "assistant","content": "模型回答"}]}
]

对于上述格式的数据,dataset_info.json 中的数据集描述应为:

"数据集名称": {"file_name": "data.json","formatting": "sharegpt","columns": {"messages": "messages"},"tags": {"role_tag": "role","content_tag": "content","user_tag": "user","assistant_tag": "assistant","system_tag": "system"}
}

三、常见问题排查


问题dataset_info.jsonhf_hub_urlms_hub_urlscript_urlfile_name 的优先级关系是什么?

答案

优先级为 hf_hub_url/ms_hub_url > script_url > file_name。若指定了 hf_hub_urlms_hub_url,系统会直接从 Hugging Face 或 ModelScope 加载数据集,忽略 script_urlfile_name;若未指定,则依次检查 script_urlfile_name

误区举例:用户可能同时填写多个字段(如同时指定 hf_hub_urlfile_name),导致实际加载数据集时忽略本地文件,引发数据路径错误。


问题:偏好数据集(DPO/ORPO)的配置中,Alpaca 格式和 Sharegpt 格式的 columns 字段有何差异?

答案

  • Alpaca 格式需指定 chosenrejected 列,对应优质和劣质回答,并设置 "ranking": true
  • Sharegpt 格式需将 chosenrejected 配置为消息对象(如 {"from": "gpt", "value": "回答"}),并同样设置 "ranking": true

误区举例:用户可能误将 Sharegpt 格式的 chosen/rejected 配置为纯文本(而非消息对象),导致解析失败;或在 Alpaca 格式中遗漏 "ranking": true,导致数据集未被识别为偏好类型。


问题:多模态数据集(如图像)的配置中,images 列与文本中的 <image> 标记为何需严格数量一致?

答案

images 列中的文件路径数量必须与文本中 <image> 标记的数量完全一致,以确保模型能正确关联图像输入与文本指令。例如,若文本中有 2 个 <image> 标记,则 images 列必须包含 2 个路径。

误区举例:用户可能在数据预处理时未检查标记数量与文件路径的匹配性,导致训练时因数据格式错误而中断。


问题:Sharegpt 格式的 tags 字段(如 role_taguser_tag)有何作用?如何适配 OpenAI 格式数据?

答案

  • tags 字段用于自定义消息中角色和内容的键名。例如,OpenAI 格式的 rolecontent 需通过 tags 映射为 role_tag: "role"content_tag: "content"
  • 适配 OpenAI 格式需额外设置 user_tag: "user"assistant_tag: "assistant"system_tag: "system"

误区举例:用户可能未正确配置 tags,导致无法解析第三方格式(如 OpenAI)的消息结构,或因角色标签冲突(如 system 覆盖系统列)引发错误。


问题:KTO 数据集的 kto_tag 列在配置时需要注意什么?

答案

kto_tag 列需包含布尔类型(True/False)的标签,表示人类对回答的反馈。在 dataset_info.json 中需显式声明 "kto_tag": "列名",且数据集格式必须为 Sharegpt。

误区举例:用户可能误将 kto_tag 配置为字符串(如 "true" 而非布尔值 true),或忘记设置 "formatting": "sharegpt",导致数据加载失败。


问题:在 Alpaca 格式中,history 列的作用是什么?如何正确配置它?

答案

  • 作用: history 列存储历史对话的指令和回答(二元组列表),用于多轮对话场景。模型会学习历史对话内容,而不仅是当前指令和回答。
  • 配置: 需在 dataset_info.json 中明确指定 "history": "列名",且数据格式应为 [["指令1", "回答1"], ["指令2", "回答2"]]

误区举例: 用户可能忽略 history 列的存在,导致多轮对话数据未被利用;或错误配置为单字符串(如 "instruction,answer"),引发解析错误。


问题:预训练数据集的 Alpaca 格式为何只需 text 列?如何与指令微调数据集区分?

答案

  • 原因: 预训练目标是学习通用文本表示,因此仅需原始文本(text 列),无需指令或回答结构。
  • 区分: 指令微调需 instruction/output 等列,而预训练只需 "columns": {"prompt": "text"}。若误用指令数据配置预训练,会导致模型忽略关键字段。

误区举例: 用户可能混淆预训练和微调的数据格式,错误地将指令数据用于预训练,浪费计算资源。


问题:Sharegpt 格式中,tools 列的作用是什么?是否必须与 function_call 角色配合使用?

答案

  • 作用: tools 列定义工具的描述(如 API 文档),供模型生成工具调用参数(function_call 角色)。
  • 配合要求: 是。若数据包含 function_call 消息,则需提供 tools 列;若无工具调用,可省略。

误区举例: 用户可能遗漏 tools 列但保留 function_call 消息,导致模型无法理解工具定义;或反向误配,引发训练错误。


问题:如何正确处理多模态数据(如图像、视频)中的路径问题?

答案

  • 要求: 文件路径需为绝对路径相对于数据集根目录的相对路径,且确保文件实际存在。
  • 验证: 在加载数据集前,应检查 images/videos/audios 列中的路径是否有效,避免因路径错误导致训练中断。

误区举例: 用户可能使用错误路径格式(如未处理系统路径分隔符差异),或未验证文件是否存在,导致多模态数据加载失败。


问题subsetsplit 字段在 dataset_info.json 中有何区别?

答案

  • subset: 指定 Hugging Face/ModelScope 数据集的子集名称(如 "zh" 表示中文子集)。
  • split: 定义数据切分(如 traintest),默认为 train。两者可同时使用(如 "subset": "zh", "split": "test")。

误区举例: 用户可能误将 subset 当作数据切分,或混淆两者优先级,导致加载错误的数据子集。


问题:如何为自定义数据集选择正确的 formatting 值(alpacasharegpt)?

答案

  • 关键判断点:
    1. 角色多样性: 若需多角色(如 human/gpt/function),选 sharegpt
    2. 工具/多模态支持: 涉及工具调用或媒体输入时,必须用 sharegpt
    3. 结构简化性: 若仅需 instruction-output 结构,用 alpaca

误区举例: 用户可能因未全面评估数据复杂度而选错格式,导致后续配置无法适配。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/76019.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何根据设计稿进行移动端适配:全面详解

如何根据设计稿进行移动端适配&#xff1a;全面详解 文章目录 如何根据设计稿进行移动端适配&#xff1a;全面详解1. **理解设计稿**1.1 设计稿的尺寸1.2 设计稿的单位 2. **移动端适配的核心技术**2.1 使用 viewport 元标签2.1.1 代码示例2.1.2 参数说明 2.2 使用相对单位2.2.…

07-Spring Boot 自动配置原理全解析

Spring Boot 自动配置原理全解析&#xff08;EnableAutoConfiguration 源码追踪&#xff09; Spring Boot 之所以能大幅简化配置&#xff0c;核心就在于它的 自动配置机制&#xff0c;而这一机制背后主要依赖于 EnableAutoConfiguration 注解。本文将从使用、源码、常见问题及…

前端如何检测项目中新版本的发布?

前言 你是否也曾遇到过这种情况&#xff0c;每次发完版之后都还会有用户反馈问题没有被修复&#xff0c;一顿排查之后发现他用的还是旧的版本。 用户&#xff1a;在 XX 页面 XX 字段还是不展示 我&#xff1a;刷新下页面 用户&#xff1a;刷新了啊 我&#xff1a;强刷一下&…

Vue 项目使用 pdf.js 及 Elasticpdf 教程

摘要&#xff1a;本文章介绍如何在 Vue 中使用 pdf.js 及基于 pdf.js 的批注开发包 Elasticpdf。简单 5 步可完成集成部署&#xff0c;包括数据的云端同步&#xff0c;示例代码完善且简单&#xff0c;文末有集成代码分享。 1. 工具库介绍与 Demo 1.1 代码包结构 ElasticPDF基…

聊聊Spring AI的ChromaVectorStore

序 本文主要研究一下Spring AI的ChromaVectorStore 示例 pom.xml <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-vector-store-chroma</artifactId></dependency>配置 spring:ai:vectorstore:…

整数编码 - 华为OD统一考试(A卷、Java)

题目描述 实现一种整数编码方法,使得待编码的数字越小,编码后所占用的字节数越小。 编码规则如下: 编码时7位一组,每个字节的低7位用于存储待编码数字的补码。字节的最高位表示后续是否还有字节,置1表示后面还有更多的字节,置0表示当前字节为最后一个字节。采用小端序编…

Linux 递归查找并删除目录下的文件

在 Linux 中&#xff0c;可以使用 find 命令递归查找并删除目录下的文件 1、示例命令 find /path/to/directory -type f -name "filename_pattern" -exec rm -f {} 2、参数说明 /path/to/directory&#xff1a;要查找的目标目录type f&#xff1a;表示查找文件&am…

【笔记】VS中C#类库项目引用另一个类库项目的方法

VS中C#类库项目引用另一个类库项目的方法 在 C# 开发中&#xff0c;有时我们需要在一个类库项目中引用另一个类库项目&#xff0c;但另一个项目可能尚未编译成 DLL。在这种情况下&#xff0c;我们仍然可以通过 Visual Studio 提供的项目引用功能进行依赖管理。 &#x1f3af; …

第五讲(下)| string类的模拟实现

string类的模拟实现 一、Member constants&#xff08;成员常数&#xff09;npos 二、Member functions&#xff08;成员函数&#xff09;constructor&#xff08;构造&#xff09;、destructor&#xff08;析构&#xff09;、c_str遍历1 &#xff1a;Iterators遍历2&#xff1…

洛谷题单3-P4956 [COCI 2017 2018 #6] Davor-python-流程图重构

题目描述 在征服南极之后&#xff0c;Davor 开始了一项新的挑战。下一步是在西伯利亚、格林兰、挪威的北极圈远征。 他将在 2018 年 12 月 31 日开始出发&#xff0c;在这之前需要一共筹集 n 元钱。 他打算在每个星期一筹集 x 元&#xff0c;星期二筹集 xk 元&#xff0c;……

【正点原子】如何设置 ATK-DLMP135 开发板 eth0 的开机默认 IP 地址

开机就想让 eth0 乖乖用静态 IP&#xff1f;别再被 DHCP 抢走地址了&#xff01; 三步教你彻底掌控 ATK-DLMP135 的网络启动配置&#xff0c;简单粗暴&#xff0c;实测有效&#xff01; 正点原子STM32MP135开发板Linux核心板嵌入式ARM双千兆以太网CAN 1. 删除 dhcpcd 自动获取…

以UE5第三方插件库为基础,编写自己的第三方库插件,并且能够在运行时复制.dll

首先&#xff0c;创建一个空白的C 项目&#xff0c;创建第三方插件库。如下图所示 编译自己的.Dll 和.lib 库&#xff0c;打开.sln 如下图 ExampleLibrary.h 的代码如下 #if defined _WIN32 || defined _WIN64 #define EXAMPLELIBRARY_IMPORT __declspec(dllimport) #elif d…

正则表达式示例集合

目录&#xff1a; 1、精准匹配2、字符匹配3、参考示例3.1、一个合理的用户名正则表达式3.2、匹配 HTML 标签及内容3.3、其他示例3.4、微信号正则表达式3.5、QQ号正则表达式3.6、车牌号号正则表达式3.7、邮箱正则表达式 1、精准匹配 单字符模式&#xff0c;如 a&#xff0c;不论…

2025 年前端与后端开发方向的抉择与展望-优雅草卓伊凡

2025 年前端与后端开发方向的抉择与展望-优雅草卓伊凡 在 2025 年这个科技浪潮奔涌的时代&#xff0c;软件开发领域持续变革&#xff0c;前端与后端开发方向的抉择&#xff0c;成为众多从业者和爱好者亟待破解的关键命题。卓伊凡就频繁收到这样的疑问&#xff1a;“2025 年了&…

巧用数论与动态规划破解包子凑数问题

本文针对“包子凑数”问题&#xff0c;深入解析如何通过最大公约数&#xff08;GCD&#xff09;判断无法组成的数目是否无限&#xff0c;并结合动态规划高效求解有限情况下的具体数目。通过清晰的算法思路、代码实现及示例详解&#xff0c;揭秘数论与动态规划在组合问题中的巧妙…

什么是数据

一、数据的本质定义​​ ​​哲学视角​​ 亚里士多德《形而上学》中"未加工的观察记录"现代认知科学&#xff1a;人类感知系统接收的原始刺激信号&#xff08;如视网膜光信号、听觉神经电信号&#xff09;信息论奠基人香农&#xff1a;消除不确定性的度量载体 ​​…

FreeRTOS中互斥量实现数据共享优化

在 FreeRTOS 中&#xff0c;当读操作远多于写操作时&#xff0c;使用**互斥量&#xff08;Mutex&#xff09;会导致读任务频繁阻塞&#xff0c;降低系统性能。此时&#xff0c;可以通过实现读者-写者锁&#xff08;Reader-Writer Lock&#xff09;**优化&#xff0c;允许多个读…

国内虚拟电厂(VPP)管控平台供应商

以下是几家专注于虚拟电厂业务的供应商及其官网地址&#xff1a; 1. 华茂能联科技有限公司 官网地址&#xff1a;https://huamod.com/简介&#xff1a;华茂能联是分布式资源管理与虚拟电厂产品与服务提供商&#xff0c;团队汇聚了来自美国、欧洲和国内多个行业知名研究机构或…

协方差相关问题

为什么无偏估计用 ( n − 1 ) (n-1) (n−1) 而不是 n n n&#xff0c;区别是什么&#xff1f; 在统计学中&#xff0c;无偏估计是指估计量的期望值等于总体参数的真实值。当我们用样本数据估计总体方差或协方差时&#xff0c;分母使用 ( n − 1 ) (n-1) (n−1) 而不是 n n…

算法设计学习6

实验目的及要求&#xff1a; 目标是使学生学会分析数据对象的特点&#xff0c;掌握数据组织的方法和在计算机中的存储方式&#xff0c;能够对具体问题中所涉及的数据选择合适的逻辑结构、存储结构&#xff0c;进而在此基础上&#xff0c;对各种具体操作设计高效的算法&#xff…