Skip to content

Easy Dataset 基础教程

AI 辅助构建高质量大模型微调数据集——从文献处理到数据集导出的全链路指南。


一、Easy Dataset 是什么

1. 定义与定位

一句话定义

Easy Dataset 是一个开源的大模型微调数据集创建工具——帮你把领域文档转化为高质量的 QA 训练数据,让大模型微调的"数据准备"环节从手工作坊走向工业化。

 大模型微调的核心链路
 ═══════════════════════════════════════

 原始文档 → 数据集构建 → 模型微调 → 效果评估

         Easy Dataset 解决的问题
         (最难、最耗时、最影响效果的环节)

GitHub 仓库:github.com/ConardLi/easy-dataset

项目制管理

Easy Dataset 以项目为核心单元,每个项目对应一个独立的数据集构建任务。一个项目贯穿「文献处理 → 问题生成 → 答案构建 → 标签管理 → 数据导出」全链路。

2. 为什么需要它

各行各业都在微调自己的大模型,但微调本身不难,难的是数据集准备。以下是构建数据集时的普遍痛点:

痛点现状Easy Dataset 的解决方案
效率低下纯人工编写 QA 对,一天写不了几条AI 辅助批量生成,人工只做审核
AI 直接生成效果差把大文档直接丢给 AI,生成的 QA 质量参差不齐先智能分块,再基于每个块精准生成
上下文截断AI 有 Token 限制,长文档被截断丢失信息章节感知分块算法,确保每块语义完整
重复问题分批生成时 AI 不记得前面生成了什么,大量重复领域标签 + 去重机制,系统性避免重复
缺乏管理平台数据集散落在各处,标注和校验全靠手工统一的管理界面,支持标注、审核、编辑
不会构建 COT想微调推理模型,不知道思维链数据怎么造内置 COT 生成能力(支持 DeepSeek-R1 等)
格式转换困难不同微调框架要求不同格式(Alpaca / ShareGPT)一键导出多种标准格式

核心矛盾

 数据集质量 ── 直接决定 ──▶ 微调效果

 垃圾数据集 → 模型学到错误知识 → 效果更差
 高质量数据集 → 模型精准学习 → 效果显著提升

 Easy Dataset 的目标:
 把"构建高质量数据集"这件事的门槛降到最低

3. 核心能力全景图

Easy Dataset 的能力覆盖数据集构建的完整生命周期:

 ┌────────────────────────────────────────────────────────────┐
 │                 Easy Dataset 全链路                         │
 ├────────────────────────────────────────────────────────────┤
 │                                                            │
 │  ① 文献处理        ② 领域标签       ③ 问题生成             │
 │  ─────────        ─────────       ─────────             │
 │  PDF/Word/MD       AI 自动生成      基于文本块             │
 │  → 智能分块        二级领域树       语义生成问题            │
 │  → 大纲提取        支持手动修正     字符密度动态控制         │
 │                                                            │
 │  ④ 答案构建        ⑤ 质量校验       ⑥ 格式导出             │
 │  ─────────        ─────────       ─────────             │
 │  关联原文生成       批量编辑/删除    Alpaca 格式             │
 │  支持 COT 思维链   AI 自动润色      ShareGPT 格式           │
 │  推理模型适配       人工审核标注     自定义字段映射           │
 │                                                            │
 └────────────────────────────────────────────────────────────┘

四大核心模块

模块说明
模型配置中心支持 OpenAI 格式 API(OpenAI、DeepSeek 等)及本地 Ollama,内置 Playground 测试
智能文献处理章节感知递归分块,基于 Markdown 结构语义分割,保证每块完整性
领域标签体系AI 自动生成二级领域树(如 体育 → 足球),为 QA 对绑定精准标签
智能数据生成问题批量生成 + 答案智能构建 + COT 思维链 + 多格式导出

数据引擎

能力说明
问题批量生成按字符密度动态生成,支持中断恢复
答案智能构建关联原始文本块,支持 DeepSeek-R1 生成 COT
质量校验机制批量删除/编辑 + AI 润色 + 人工审核

格式生态

能力说明
多格式导出Alpaca / ShareGPT 标准格式,支持自定义字段映射
数据集广场聚合 HuggingFace / Kaggle 等平台,关键字检索现有数据集

💡 一句话总结:Easy Dataset = 文献处理引擎 + AI 数据生成器 + 数据集管理平台 + 格式转换工具,四位一体解决大模型微调数据集从 0 到 1 的全部问题。


二、安装与启动

1. 客户端启动(推荐新手)

最简单的方式——下载安装包,双击运行,无需任何环境配置。

下载地址

平台支持
Windows.exe 安装包
macOS.dmg 安装包
Linux.AppImage
 下载地址:
 GitHub: https://github.com/ConardLi/easy-dataset/releases
 网盘:   https://pan.quark.cn/s/ef8d0ef3785a(GitHub 下载慢时备用)

启动步骤

 ① 下载对应系统的安装包
 ② 双击安装 / 运行
 ③ 打开浏览器访问界面
 ④ 开始使用 ✅

💡 客户端方式是零门槛方案,适合不熟悉命令行的用户。

2. NPM 启动(适合开发者)

项目基于 Next.js 构建,本地只需 Node.js 环境即可运行。

环境要求

  • Node.js(建议 18+)
  • npm 或 yarn

启动步骤

bash
# 1. 克隆仓库
git clone https://github.com/ConardLi/easy-dataset.git
cd easy-dataset

# 2. 安装依赖
npm install

# 3. 构建项目
npm run build

# 4. 启动服务
npm run start

更新到新版本

bash
# 拉取最新代码
git pull

# 重新安装依赖 + 构建 + 启动
npm install
npm run build
npm run start

⚠️ 每次系统发布新版本后,需要重新执行以上 4 步。

3. Docker 启动(适合私有部署)

方式一:使用官方 Docker 镜像

bash
# 1. 克隆仓库
git clone https://github.com/ConardLi/easy-dataset.git
cd easy-dataset

# 2. 修改 docker-compose.yml
#    将 {YOUR_LOCAL_DB_PATH} 替换为数据库存储路径
#    将 {LOCAL_PRISMA_PATH} 替换为 Prisma 路径
#    建议使用仓库目录下的 local-db 和 prisma 文件夹

# 3. 初始化数据库(首次需要)
npm run db:push

# 4. 使用 docker-compose 启动
docker-compose up -d

# 5. 访问
# 打开浏览器访问 http://localhost:1717

三种方式对比

方式适合人群难度优势
客户端新手用户零配置,开箱即用
NPM开发者⭐⭐可调试源码,灵活定制
Docker运维/团队⭐⭐⭐隔离环境,适合服务器部署

三、模型配置

1. 支持的模型类型

Easy Dataset 需要接入大语言模型来生成问题和答案。支持以下类型:

类型示例说明
OpenAI 格式 APIOpenAI、DeepSeek、通义千问、智谱最常用,兼容 OpenAI 接口格式的服务商都行
本地模型Ollama完全本地运行,无需 API Key,适合隐私敏感场景
自定义端点任何兼容 OpenAI 格式的服务填入 Base URL 和 API Key 即可

2. 配置步骤

 ① 进入项目 → 模型配置页面
 ② 选择模型提供商(或自定义)
 ③ 填入 API Key 和 Base URL
 ④ 选择具体模型(如 gpt-4、deepseek-chat)
 ⑤ 调整参数(温度、最大 Token 等)
 ⑥ 点击测试 → 验证连接 ✅

💡 推荐配置:DeepSeek 性价比最高,生成中文数据集效果好且成本低。需要 COT 思维链时用 DeepSeek-R1。

3. 模型测试 Playground

配置完成后,可以在内置的 Playground 中直接测试模型效果:

  • 发送测试消息,验证模型是否正常响应
  • 多模型对比,选出最适合你数据集领域的模型
  • 调整参数(温度越低答案越确定,越高越有创造性)

四、创建项目

1. 项目制管理

Easy Dataset 以项目为核心组织单元:

 项目 A:金融领域数据集
 ├── 上传的文献(10 篇金融论文)
 ├── 生成的文本块(200 个)
 ├── 领域标签(金融 → 风控、投资、保险…)
 ├── 生成的问题(500 条)
 ├── 构建的答案(500 条)
 └── 导出的数据集(Alpaca 格式)

 项目 B:医疗领域数据集
 ├── 上传的文献(5 篇医学指南)
 ├── ...
 └── 导出的数据集(ShareGPT 格式)

每个项目的数据完全独立,互不干扰。

2. 创建步骤

 ① 点击「创建项目」
 ② 输入项目名称和描述
 ③ 选择要使用的模型
 ④ 配置分块参数(最小/最大块长度)
 ⑤ 创建完成 → 进入项目工作台

五、文献处理

1. 上传文献

文献处理是数据集构建的第一步——把你的领域文档交给 Easy Dataset。

支持的格式

格式说明
Markdown✅ 最佳格式,分块效果最好(保留结构信息)
PDF✅ 自动提取文本,适合论文、报告
Word (.docx)✅ 自动解析
TXT✅ 纯文本
 上传流程
 ═══════════════════════════════════════

 ① 进入项目工作台 → 文献管理页面
 ② 点击「上传文献」
 ③ 选择文件(支持多文件批量上传)
 ④ 系统自动解析文献 → 转换为内部格式
 ⑤ 上传完成 ✅

💡 最佳实践:如果你的原始文档是 PDF,建议先用其他工具(如 Marker、MinerU)转换为 Markdown 再上传,分块质量会更高。

2. 智能分块

上传文献后,Easy Dataset 会自动将文档拆分为多个文本块(Chunk)。这是整个流程中最关键的一步——分块质量直接决定后续生成的问题和答案质量。

章节感知递归分块算法

Easy Dataset 不是简单地按字数切分,而是采用章节感知递归分块算法:

 传统分块:按固定字数硬切
 ═══════════════════════════════════════

 "第一章 引言...........|..........第二章 方法论......"

                    这里被切断了!一个块包含两章内容

 ─────────────────────────────────────

 Easy Dataset 分块:按语义结构切分
 ═══════════════════════════════════════

 [块 1] 第一章 引言(完整)
 [块 2] 第二章 方法论(完整)
 [块 3] 第三章 实验(完整)

 → 每个块都是语义完整的独立单元

工作原理

 原始文档

 识别 Markdown 标题层级(#, ##, ###)

 按章节边界递归拆分

 检查每块长度是否在 [最小长度, 最大长度] 范围内

 太长 → 继续拆分子章节
 太短 → 与相邻块合并

 输出语义完整的文本块

分块参数配置

参数说明建议值
最小块长度低于此长度的块会被合并200-500 字符
最大块长度超过此长度的块会被继续拆分2000-5000 字符

⚠️ 块太大:生成的问题可能不够具体,答案可能偏离重点 块太小:上下文不足,生成的答案缺乏深度

3. 大纲提取与摘要

分块完成后,Easy Dataset 还会自动:

大纲提取

从文献中提取层级结构,生成文档目录树:

 📄 《深度学习在医疗影像中的应用》
 ├── 第一章 引言
 │   ├── 1.1 背景
 │   └── 1.2 研究现状
 ├── 第二章 方法
 │   ├── 2.1 数据预处理
 │   ├── 2.2 模型架构
 │   └── 2.3 训练策略
 ├── 第三章 实验
 └── 第四章 结论

摘要生成

AI 为每个文本块生成一段简短的摘要,方便你快速浏览和定位内容,不需要逐块阅读原文。

 文本块 #3:第二章 方法 - 2.1 数据预处理
 ─────────────────────────────────
 摘要:本节介绍了医疗影像的标准预处理流程,
       包括图像归一化、数据增强和标注清洗三个步骤。

 → 一目了然,快速判断这个块是否适合生成 QA 对

💡 大纲和摘要不仅方便人工审核,也帮助 AI 在后续生成问题时更好地理解文档整体结构。


六、领域标签体系

1. 自动生成标签

领域标签是 Easy Dataset 控制数据集覆盖面去重的关键机制。

什么是领域标签?

 ❌ 没有标签的数据集
 ═══════════════════════════════════════

 Q1: 什么是足球越位?
 Q2: 越位规则是怎样的?     ← 和 Q1 重复了!
 Q3: 足球比赛中何时判越位?  ← 又重复了!
 Q4: 什么是篮球三分球?
 (财务、法律领域的问题?→ 一条都没有)

 ─────────────────────────────────────

 ✅ 有标签的数据集
 ═══════════════════════════════════════

 [体育-足球] Q1: 什么是足球越位?
 [体育-足球] Q2: 足球中的角球规则?     ← 同领域不同问题 ✅
 [体育-篮球] Q3: 什么是篮球三分球?
 [财务-税务] Q4: 增值税怎么计算?
 [法律-合同] Q5: 合同违约如何赔偿?

 → 每个领域都有覆盖,同领域内不重复

AI 自动生成二级领域树

上传文献并分块后,AI 会自动分析文本内容,生成二级领域标签树:

 领域标签树(自动生成)
 ═══════════════════════════════════════

 📂 体育
 ├── ⚽ 足球
 ├── 🏀 篮球
 └── 🏊 游泳

 📂 医疗
 ├── 💊 药理学
 ├── 🔬 影像诊断
 └── 🏥 临床治疗

 📂 金融
 ├── 📈 投资理财
 ├── 🏦 银行业务
 └── 🛡️ 风险控制

一级标签 = 大领域,二级标签 = 细分方向。

2. 手动管理

AI 自动生成的标签不一定完全准确,你可以手动调整:

操作说明
新增标签添加 AI 遗漏的领域分类
修改标签重命名不准确的标签名称
删除标签移除不需要的标签
合并标签将含义相近的标签合二为一
移动标签调整标签的父子层级关系
 示例:手动修正

 AI 生成:
   📂 科技
   ├── 人工智能
   ├── AI            ← 和"人工智能"重复
   └── 机器学习       ← 应该是"人工智能"的子类

 手动修正后:
   📂 科技
   └── 人工智能
       ├── 机器学习
       ├── 深度学习
       └── 自然语言处理

3. 标签绑定

标签创建完成后,每个生成的 QA 对都会被绑定到对应的领域标签上。

绑定的作用

 标签绑定带来的三大好处
 ═══════════════════════════════════════

 ① 去重控制
    → 同一个标签下已有类似问题时,AI 不再重复生成
    → 大幅降低数据集的重复率

 ② 覆盖度检查
    → 一目了然看到哪些领域问题多、哪些领域问题少
    → 针对薄弱领域补充数据

 ③ 导出筛选
    → 只导出特定领域的数据集
    → 按领域分批微调模型

标签分布示例

领域问题数覆盖状态
体育-足球45✅ 充足
体育-篮球32✅ 充足
体育-游泳8⚠️ 偏少,建议补充
医疗-药理学51✅ 充足
医疗-影像诊断3❌ 严重不足

💡 最佳实践:先生成标签 → 再生成问题。这样 AI 在生成问题时就知道每个领域已经有哪些问题了,从而有效避免重复。


七、问题生成

1. 批量生成问题

文本块和领域标签准备好后,就可以让 AI 批量生成问题了。

生成原理

 文本块 #5                           生成的问题
 ─────────────                      ─────────────

 "足球越位规则规定,在进攻方       →  Q1: 足球越位规则的核心判定条件是什么?
  传球的瞬间,如果接球球员比       →  Q2: 越位判定中"传球瞬间"具体指什么时刻?
  倒数第二名防守球员更靠近球       →  Q3: 在越位规则中,为什么是倒数第二名防守
  门线,则判定为越位……"                  球员而不是最后一名?

AI 从每个文本块的语义内容出发生成问题,而不是简单的关键词提取。

字符密度动态控制

问题数量不是固定的,而是按文本块的字符密度动态决定:

文本块长度生成问题数逻辑
200-500 字符1-2 个内容少,问题别太多
500-2000 字符3-5 个中等长度,适中
2000-5000 字符5-10 个内容丰富,多角度提问

具体数量可在项目配置中自定义。

批量创建与中断恢复

 批量生成流程
 ═══════════════════════════════════════

 文本块 #1  →  生成 3 个问题 ✅
 文本块 #2  →  生成 5 个问题 ✅
 文本块 #3  →  生成 4 个问题 ✅
 文本块 #4  →  ❌ 网络中断!
 ─────────────────────────────
 重新启动后:
 文本块 #4  →  从断点恢复,继续生成 ✅
 文本块 #5  →  生成 2 个问题 ✅
 ...

 → 支持中断恢复,不怕意外断网或 API 超时

2. 问题质量管理

生成的问题不一定都是好的,Easy Dataset 提供多种手段进行质量把控:

去重机制

 AI 生成问题时会检查:

 ① 同一文本块下是否已有相似问题  → 跳过
 ② 同一领域标签下是否已有相似问题 → 跳过
 ③ 全局是否已有高度重复的问题    → 跳过

人工管理

操作说明
编辑直接修改问题文本,调整措辞或补充细节
删除移除质量差、重复或不相关的问题
批量删除勾选多个问题一次性删除

AI 辅助优化

对已有问题进行智能润色——输入一条优化指令,AI 自动改写:

 原始问题:什么是越位?
 优化指令:"让问题更具体,包含场景描述"
 优化后:  在足球比赛中,当进攻球员接到队友传球时,
          裁判如何判定该球员是否处于越位位置?

 → 从模糊的泛问变成了有深度的好问题

💡 质量把控三板斧:AI 自动去重 + 人工审核删除 + AI 辅助润色。三管齐下保证问题质量。


八、答案构建

1. 智能生成答案

问题生成完成后,下一步是为每个问题构建高质量的答案

关联原始文本块

Easy Dataset 不是让 AI 凭空编答案,而是关联原始文本块来生成——确保答案有据可依:

 答案生成流程
 ═══════════════════════════════════════

 问题:足球越位规则的核心判定条件是什么?

 定位到原始文本块 #5(包含越位规则的完整描述)

 AI 基于文本块内容 + 问题语义 → 生成准确答案

 答案:越位规则的核心判定条件有两个:
       1. 时间条件——在队友传球的瞬间;
       2. 位置条件——接球球员比倒数第二名防守球员
          更靠近对方球门线。
       两个条件同时满足才判定为越位。

💡 答案始终锚定在原始文献内容上,而不是 AI 的通用知识——这是保证数据集准确性的关键。

2. COT(思维链)生成

如果你要微调的是推理模型(如 DeepSeek-R1、o1),就需要带有思维链的答案。

什么是 COT?

 普通答案                           COT 答案
 ═══════════                       ═══════════

 Q: 5 + 3 × 2 = ?                 Q: 5 + 3 × 2 = ?

 A: 11                             A: <think>
                                      让我分析这道数学题。
                                      根据运算优先级,先乘后加:
                                      第一步:3 × 2 = 6
                                      第二步:5 + 6 = 11
                                      </think>
                                      答案是 11。

 → 直接给结果                       → 展示完整的推理过程

如何生成 COT 答案

Easy Dataset 支持使用推理模型(如 DeepSeek-R1)来生成带思维链的答案:

 配置推理模型(如 DeepSeek-R1)

 选择需要生成 COT 的问题

 AI 自动生成带 <think>...</think> 标签的答案

 思维链 + 最终答案 一起存储

 导出时自动包含 COT 字段

适用场景

场景是否需要 COT
微调通用对话模型❌ 不需要,普通答案即可
微调推理模型✅ 必须,思维链是关键
微调数学/逻辑模型✅ 必须,步骤推理很重要
微调知识问答模型⚠️ 可选,复杂问题建议加

3. 答案质量校验

生成的答案需要经过质量检查,确保可用于模型训练。

校验手段

手段说明
人工审核逐条查看答案,检查准确性和完整性
手动编辑直接修改不满意的答案内容
批量删除移除质量差的 QA 对
AI 优化输入润色指令,AI 自动改写答案

AI 优化示例

 原始答案:越位就是球员站的位置不对。

 优化指令:"让答案更专业、更详细,引用规则条文"

 优化后:  根据 FIFA 足球竞赛规则第 11 条,越位是指在
          进攻方球员传球的瞬间,接球球员满足以下条件:
          (1) 处于对方半场;
          (2) 比倒数第二名防守方球员更靠近对方球门线;
          (3) 比球更靠近对方球门线。
          裁判将通过 VAR 辅助判定争议越位。

质量检查清单

 答案质量自查表
 ═══════════════════════════════════════

 ☐ 答案是否基于原始文献内容(而非 AI 编造)
 ☐ 答案是否完整回答了问题(没有答非所问)
 ☐ 答案长度是否合适(不过长也不过短)
 ☐ 答案中是否有事实错误
 ☐ COT 的推理过程是否合理(如果有的话)
 ☐ 答案的语言风格是否与目标模型一致

💡 黄金法则:你给模型看什么样的答案,模型就学会输出什么样的答案。在答案质量上花的时间,一定会在微调效果上得到回报。


九、数据集导出

1. 导出格式

数据集构建完成后,最后一步是导出为微调框架能识别的格式。Easy Dataset 支持两种主流格式:

Alpaca 格式

最常用的 SFT 微调格式,结构简单直接:

json
[
  {
    "instruction": "足球越位规则的核心判定条件是什么?",
    "input": "",
    "output": "越位规则的核心判定条件有两个:1. 时间条件——在队友传球的瞬间;2. 位置条件——接球球员比倒数第二名防守球员更靠近对方球门线。"
  },
  {
    "instruction": "什么是篮球三分球?",
    "input": "",
    "output": "三分球是指球员在三分线外投中的进球,计3分……"
  }
]
字段说明
instruction问题 / 指令
input补充输入(通常为空)
output期望的回答

ShareGPT 格式

多轮对话格式,适合训练对话模型:

json
[
  {
    "conversations": [
      { "from": "human", "value": "足球越位规则的核心判定条件是什么?" },
      { "from": "gpt", "value": "越位规则的核心判定条件有两个……" }
    ]
  },
  {
    "conversations": [
      { "from": "human", "value": "什么是篮球三分球?" },
      { "from": "gpt", "value": "三分球是指球员在三分线外投中的进球……" }
    ]
  }
]

两种格式怎么选?

格式适用场景兼容的微调框架
Alpaca单轮问答、指令微调LLaMA-Factory、Firefly、Swift 等
ShareGPT多轮对话、对话模型LLaMA-Factory、Axolotl 等

💡 不确定选哪个?选 Alpaca。它是最通用的格式,几乎所有微调框架都支持。

2. 导出内容

自定义字段映射

Easy Dataset 支持对导出字段进行自定义映射,适配不同框架的字段命名要求:

 Easy Dataset 内部字段        导出字段(可自定义)
 ═══════════════════          ═══════════════════

 问题                    →   instruction / query / prompt
 答案                    →   output / response / answer
 领域标签                →   category / domain / tag
 COT 思维链              →   cot / reasoning / think

导出时可选内容

选项说明
包含领域标签在导出的 JSON 中附带 category 字段
包含 COT在答案中保留 <think>...</think> 思维链
包含 System Prompt为每条数据添加系统提示词
筛选导出只导出特定标签/特定状态的数据

导出流程

 ① 进入项目 → 数据集管理页面
 ② 选择导出格式(Alpaca / ShareGPT)
 ③ 配置字段映射(可选)
 ④ 选择是否包含标签、COT 等附加信息
 ⑤ 点击导出 → 下载 JSON 文件 ✅
 ⑥ 将文件放入微调框架的数据目录即可

💡 导出的 JSON 文件可以直接用于 LLaMA-Factory 等主流微调框架,无需额外转换。


十、数据集广场

1. 多平台数据源

数据集广场是 Easy Dataset 内置的数据集检索平台,帮你解决「数据从哪来」的问题。

聚合的数据源

平台说明
HuggingFace Datasets全球最大的开源数据集平台,涵盖 NLP、CV、音频等领域
Kaggle数据科学竞赛平台,大量真实场景数据集

使用方式

 ① 进入「数据集广场」页面
 ② 输入关键字(如 "中文医疗问答"、"金融 NLP")
 ③ 一键检索 → 展示匹配的数据集列表
 ④ 查看数据集详情:大小、语言、许可证、下载量
 ⑤ 找到合适的 → 前往平台下载
 搜索示例
 ═══════════════════════════════════════

 🔍 "chinese medical"
 → HuggingFace: Chinese-Medical-QA (2.3k ⬇️)
 → HuggingFace: CMB-Exam (15k ⬇️)
 → Kaggle: chinese-medical-dialogue

 🔍 "finance sentiment"
 → HuggingFace: financial_phrasebank (8.7k ⬇️)
 → Kaggle: financial-news-sentiment

2. 使用场景

场景怎么用
从零开始不知道数据集长什么样?搜一个参考数据集看看格式和内容
补充数据自己生成的数据不够多?找现成的公开数据集合并进去
对比质量想知道自己生成的数据集质量如何?下载同领域公开数据集对比
寻找灵感不知道应该问什么类型的问题?看看别人的数据集是怎么设计的
 典型工作流
 ═══════════════════════════════════════

 ① 数据集广场搜索同领域的公开数据集
 ② 下载参考 → 了解数据格式和问题风格
 ③ 上传自己的领域文献 → 用 Easy Dataset 生成数据集
 ④ 将自己生成的数据集与公开数据集合并
 ⑤ 得到更大、更多样的训练数据集 ✅

💡 技巧:公开数据集通常覆盖通用知识,你的领域文献生成的数据集覆盖专业知识。两者合并往往能得到最好的微调效果——模型既不丢失通用能力,又具备领域专精。


十一、知识科普

1. 微调数据集的分类

不同的微调目标需要不同类型的数据集:

类型全称目的数据格式
SFTSupervised Fine-Tuning让模型学会按指令回答问题指令 + 回答
RLHFReinforcement Learning from Human Feedback让模型输出更符合人类偏好同一问题的多个回答 + 人类排序
DPODirect Preference OptimizationRLHF 的简化版问题 + 好回答 + 差回答
COTChain of Thought让模型学会推理过程问题 + 思维链 + 最终答案
 Easy Dataset 主要生成的数据集类型
 ═══════════════════════════════════════

 ✅ SFT 数据集 → 最常用,Alpaca/ShareGPT 格式
 ✅ COT 数据集 → 支持推理模型生成思维链
 ❌ RLHF/DPO   → 需要人工对比排序,暂不支持

SFT 数据集示例

 问:什么是机器学习中的过拟合?
 答:过拟合是指模型在训练集上表现很好,但在新数据上
     表现差的现象。原因是模型记住了训练数据的噪声,
     而不是学到了真正的规律。常见解决方法包括增加训
     练数据、使用正则化、Dropout 等。

COT 数据集示例

 问:一个水池有两个进水管和一个出水管,进水管A每小时
    注入3吨水,进水管B每小时注入2吨水,出水管每小时
    排出1吨水。水池初始有10吨水,问5小时后水池有多少水?

 答:<think>
    让我来分析这个问题。
    进水速率:A管 3吨/时 + B管 2吨/时 = 5吨/时
    出水速率:1吨/时
    净进水速率:5 - 1 = 4吨/时
    5小时净进水量:4 × 5 = 20吨
    初始水量:10吨
    最终水量:10 + 20 = 30吨
    </think>
    5小时后水池有30吨水。

2. 常用数据格式

Alpaca 格式

最广泛使用的 SFT 格式,源自斯坦福 Alpaca 项目:

json
{
  "instruction": "用户的问题或指令",
  "input": "可选的补充输入(大多数情况为空)",
  "output": "期望的模型回答"
}
字段必填说明
instruction核心指令/问题
input⚠️ 可选当指令需要处理具体内容时使用,如"翻译以下文本"
output标准答案

ShareGPT 格式

模拟 ChatGPT 对话风格,支持多轮:

json
{
  "conversations": [
    { "from": "system", "value": "你是一个医疗助手" },
    { "from": "human", "value": "头疼怎么办?" },
    { "from": "gpt", "value": "头疼的原因很多……" },
    { "from": "human", "value": "需要去医院吗?" },
    { "from": "gpt", "value": "如果持续超过3天……" }
  ]
}

格式对比

对比AlpacaShareGPT
对话轮数单轮多轮
System Prompt不支持支持
结构复杂度简单较复杂
适用场景知识问答、指令遵循多轮对话、角色扮演
框架兼容性几乎所有框架大部分框架

3. 数据集质量标准

数据集的质量比数量更重要。以下是衡量数据集质量的核心维度:

维度说明检查方法
准确性答案内容是否正确、无事实错误人工抽样审核
多样性问题类型是否丰富、不单一检查领域标签覆盖度
一致性回答风格是否统一检查语气、长度、格式
完整性答案是否完整回答了问题对照问题逐条检查
无害性是否包含不当内容关键词过滤 + 人工审核
 数据集质量公式
 ═══════════════════════════════════════

 微调效果 = 数据质量 × 数据多样性 × 数据量

          ↑ 最重要      ↑ 其次      ↑ 锦上添花

 100 条高质量数据 > 10000 条低质量数据

💡 核心原则:宁可少而精,不可多而烂。先保证每条数据的质量,再追求数量。


十二、实战流程

1. 完整工作流

以「构建一套金融领域 SFT 数据集」为例,展示从零到导出的完整流程:

 ┌─────────────────────────────────────────────────────┐
 │              Easy Dataset 完整工作流                  │
 ├─────────────────────────────────────────────────────┤
 │                                                     │
 │  Step 1  创建项目                                    │
 │  ──────  项目名:"金融知识数据集"                     │
 │          选择模型:DeepSeek-V3                       │
 │                                                     │
 │  Step 2  配置模型                                    │
 │  ──────  填入 API Key + Base URL                    │
 │          Playground 测试通过 ✅                      │
 │                                                     │
 │  Step 3  上传文献                                    │
 │  ──────  上传 10 份金融领域 PDF/Markdown              │
 │          系统自动解析                                 │
 │                                                     │
 │  Step 4  智能分块                                    │
 │  ──────  最小块 300 字符 / 最大块 3000 字符           │
 │          生成 180 个文本块                            │
 │          查看大纲 + 摘要                              │
 │                                                     │
 │  Step 5  生成领域标签                                 │
 │  ──────  AI 自动生成标签树                            │
 │          手动修正:合并重复标签                        │
 │                                                     │
 │  Step 6  批量生成问题                                 │
 │  ──────  基于 180 个文本块生成 ~600 个问题             │
 │          删除低质量问题 → 剩余 520 个                 │
 │                                                     │
 │  Step 7  构建答案                                    │
 │  ──────  为 520 个问题生成答案                        │
 │          AI 润色优化 → 人工抽样审核                    │
 │                                                     │
 │  Step 8  导出数据集                                  │
 │  ──────  选择 Alpaca 格式                            │
 │          包含领域标签                                 │
 │          导出 JSON 文件 ✅                            │
 │                                                     │
 │  Step 9  用于微调                                    │
 │  ──────  将 JSON 放入 LLaMA-Factory 数据目录          │
 │          开始训练 🚀                                  │
 └─────────────────────────────────────────────────────┘

2. 最佳实践

文献预处理建议

建议说明
PDF 先转 Markdown用 Marker / MinerU 转换,保留标题层级,分块质量高
删除无关内容去掉目录页、参考文献、页眉页脚等噪声
统一格式确保标题用 # 标记,正文结构清晰
拆分超大文件单文件建议不超过 5 万字,太长可拆分为多篇

分块参数调优

 文献类型              推荐参数
 ═══════════════       ═══════════════

 学术论文              最小 500 / 最大 3000
 技术文档              最小 300 / 最大 2000
 法律法规              最小 200 / 最大 1500(条文较短)
 新闻/博客             最小 500 / 最大 5000

问题与答案质量平衡

 ❌ 常见错误
 ─────────────
 · 只追求数量,不审核质量
 · 生成完就直接导出,不做任何校验
 · 把所有问题都保留,包括重复和低质的

 ✅ 正确做法
 ─────────────
 · 生成后先人工抽样审核 10%~20%
 · 删除明显重复、过于简单、答非所问的数据
 · 对关键领域的答案做 AI 润色
 · 检查领域标签覆盖度,补充薄弱领域

数据集质量检查清单

 发布前自查表
 ═══════════════════════════════════════

 ☐ 数据条数是否达到目标(SFT 建议 500+)
 ☐ 领域标签覆盖是否均匀(无严重偏科)
 ☐ 随机抽 20 条检查:问题是否有重复
 ☐ 随机抽 20 条检查:答案是否准确
 ☐ 随机抽 20 条检查:答案风格是否统一
 ☐ 导出格式是否正确(可用 JSON 校验工具检查)
 ☐ 如有 COT,推理过程是否合理

十三、常见问题

1. 安装部署问题

问题解决方案
客户端无法启动检查系统版本是否符合要求;macOS 可能需要在"系统偏好设置 → 安全性"中允许打开
NPM 安装依赖失败检查 Node.js 版本(建议 18+);尝试 npm install --legacy-peer-deps
Docker 容器启动失败检查 docker-compose.yml 中的路径是否正确;确保已执行 npm run db:push 初始化数据库
端口 1717 被占用修改 docker-compose.yml 中的端口映射,或停止占用端口的进程
页面打开空白确认 npm run build 已成功执行;检查浏览器控制台是否有报错

2. 模型配置问题

问题解决方案
API Key 验证失败检查 Key 是否正确复制(注意首尾空格);确认 Key 未过期且有余额
模型响应超时降低并发数;检查网络是否稳定;切换 API 端点
Ollama 连接失败确认 Ollama 已启动;检查端口(默认 11434);确认模型已下载
返回内容乱码检查模型是否支持中文;尝试在 System Prompt 中加"请用中文回答"

3. 数据生成问题

问题解决方案
问题重复率高先生成领域标签再生成问题;减小单次生成的问题数量
答案质量不理想更换更强的模型(如 GPT-4 / DeepSeek-V3);优化分块参数让文本块更精准
分块效果差将 PDF 先转为 Markdown 再上传;调整最小/最大块长度参数
生成中断后无法恢复重新点击生成,系统会自动跳过已完成的文本块
COT 思维链格式异常确认使用的是推理模型(如 DeepSeek-R1);检查模型是否正确输出 <think> 标签

🎉 恭喜你读完了 Easy Dataset 基础教程!

现在你已经掌握了从文献上传到数据集导出的全流程。

下一步:下载 Easy Dataset,上传你的第一份领域文献,构建属于你的高质量微调数据集吧!

坚持是一种品格