大模型训练全流程实战指南工具篇(八)——EasyDataset问答数据集生成流程

前言

上篇文章 大模型训练全流程实战指南工具篇(七)------EasyDataset文档处理流程 详细讲解了如何利用EasyDataset构建大模型预训练数据集,涵盖从环境配置、文本分块(多种策略)、数据清洗到领域标签生成,最终导出预训练数据的完整流程。

除了预训练,监督微调(Supervised Fine-Tuning) 也是大模型训练中不可或缺的关键环节,而该过程通常依赖于大家所熟知的问答对数据集。如何高效、高质量地生成这类数据集,始终是学术研究与工程实践中的重要课题。

为了让读者更直观地理解问答数据集的构建方法,本期内容将继续以EasyDataset工具为核心,结合实际操作,带领大家走一遍问答对数据生成的完整流程,帮助大家掌握从原始文本到高质量微调数据集的构建方法。

一、EasyDataset问答对数据集生成:问题生成

本期内容将延续上一篇文章《大模型训练全流程实战指南工具篇(七)------EasyDataset文档处理流程 》中的 test 项目,基于已经生成的文本块,继续完成问答对数据集的构建。问答对数据集生成的第一步,便是根据文本块生成问题。

EasyDataset 的问题生成过程,是从分割好的文本块中提取问题,并根据已建立的领域标签树对问题自动进行打标签。问题生成既要保持细粒度、更要全面地覆盖知识,需要涵盖目标训练知识的各个方面。

EasyDataset中每个文本块生成问题的数量,由「项目设置 → 任务设置」中的"生成问题的最大长度"参数决定。默认设置为每 240 个字符生成一个问题,用户可根据文档颗粒度自行调整。本例中笔者保持默认设置。

1.1 EasyDataset 问题生成的基本操作

1.1.1 单个文本块生成问题

首先打开EasyDataset项目的数据源列表,在需要生成问题的文本块右下角,点击问题生成按钮,即可针对该文本块生成相应的问题。

由于笔者保持默认的 240 字符设置,所选文本块约 3573 个字符,最终生成了 14 个问题。生成的问题既可以在文本块上方直接查看,也可以点击项目导航栏的「问题」模块进行更详细的浏览。问题模块会列出每个问题所属的文本块以及根据领域标签树自动生成的标签信息。

1.1.2 批量生成问题

除了针对单个文本块生成问题,EasyDataset 还支持批量生成功能。用户可批量选择需要生成问题的文本块,并实时查看任务进度。

1.1.3 问题管理

所有生成的问题均可通过项目导航栏的「问题」模块进行统一管理。该模块提供了两种视图:

  • 列表视图:可查看问题名称、关联的领域标签、所属文本块;支持按问题或标签名称筛选,以及编辑现有问题或新增自定义问题。
  • 领域树视图:可按领域标签树层级查看各标签下构造出的问题。

1.2 问题生成基本算法

在了解 EasyDataset 的问题生成功能后,笔者进一步探讨目前主流的、在实际工作中常用的问题生成算法。

1.2.1 基于提示工程的生成方法

基于提示工程的方法直接向大模型下达指令,例如"请根据以下段落生成一个可回答的问题",并通过少量示例指导模型根据文本块生成问题。完整的提示词通常包括角色扮演 (赋予模型特定身份以提升生成准确性)和约束条件(明确问题的类型、长度或难度等)。这种方法快速、成本低,适合探索性任务和小规模数据集构建。

实际上,EasyDataset 的问题生成正是基于提示工程实现的。用户可在「项目设置 → 提示词设置」中查看并自由编辑问题生成的提示词。需要注意的是,编辑时不要破坏原有提示词中的变量,否则可能导致生成流程失败。例如,在基础答案生成提示词中,{{text}} 代表参考文本,{{question}} 代表需要回答的问题,二者均为关键变量。

1.2.2 基于知识增强的生成方法

基于提示工程的方法虽然便捷,但存在一定局限性。例如,同一篇文章中不同章节之间存在语义关联,若仅从单个文本块中生成问题,则难以捕捉这些跨块的语义关系。为此,衍生出基于知识增强的生成方法

该方法将分块后的文本全部存入知识库,根据主题(如已生成的标签)从大规模语料库或知识库中检索相关文档片段,再将多个相关片段作为上下文输入大模型生成问题。这种方式特别适合构建具有全局意识的高质量数据集。

更先进的知识增强方法是将文本与知识图谱中的结构化知识(三元组)相结合,作为生成问题的上下文。利用知识图谱中的多跳关系可以生成复杂问题,例如基于"刘慈欣 → 出生地 → 山西 → 省会 → 太原"生成"刘慈欣家乡的省会是哪里?"。这种方法能够生成需要背景知识或逻辑推理的问题,显著提升问题的深度。

1.2.3 基于数据增强的生成方法

在生成问题前,通常已拥有一些人工标注的优质问题样本。基于数据增强的方法一般包含以下步骤:

  1. 将人工标注的优质问题作为种子问题。
  2. 通过提示词以种子问题为示例生成新的问题。
  3. 对新生成的问题进行"翻译再回译"、"同义改写"或增加语境等操作,进一步丰富问题的语言表达形式。

这种方法利用变换已有数据来创造新的训练样本,能有效扩充问题的规模和多样性,提升数据集的整体质量。

二、EasyDataset问答对数据集生成:答案生成

在成功生成问题后,下一步便是为这些问题生成对应的答案。EasyDataset 提供了灵活的答案生成能力,支持单条生成、批量生成,甚至多轮对话数据集的构建。笔者将详细介绍答案生成的基本操作,并探讨当前主流的答案生成算法。

2.1 EasyDataset 答案生成基本操作

2.1.1 单个问题生成答案(含思维链支持)

在项目的问题列表视图中,点击单个问题右侧的魔法棒图标,即可为该问题生成答案。生成成功后,右侧会显示已生成答案的数量(单个问题支持生成多个答案)。

当前示例中使用的是 deepseek-chat 对话模型。若选用 deepseek-reasoner 等推理模型,生成答案的同时还会附带思维链(Chain of Thought, CoT)数据,这些数据可用于训练具备推理能力的模型。

2.1.2 批量生成答案

EasyDataset 支持多选或全选问题,批量触发答案生成任务。用户可实时查看批量任务的执行进度。

2.1.3 多轮对话数据集构建

重要提示:在生成多轮对话数据前,需先在「项目设置 → 任务设置 → 多轮对话数据集」中进行配置,包括系统提示词、对话场景、对话轮数、用户与助手的角色设定等。以本文档(GPT-OSS 相关)为例,笔者进行如下配置:

在实际交互中,如果大模型未能一次性给出满意回答,用户往往会持续追问。这要求模型不仅具备记忆能力以记录对话历史,还需对多轮对话内容做出恰当响应。为此,EasyDataset 提供了多轮对话数据集生成功能。在问题列表视图下,可选择对单个问题生成多轮对话,也支持后台批量合成。

2.1.4 数据集管理

所有生成的单轮或多轮对话数据集均可通过项目导航栏的「数据集列表」进行统一管理。以单轮对话数据集为例,列表展示了每条数据的原始问题、创建时间、所用模型、领域标签、是否包含思维链(COT)、答案摘要等信息。

点击单条数据可进入详情页,查看完整信息,包括问题、答案、思维链、使用模型、领域标签、创建时间及关联的文本块。点击文本块名称可查看原始文本块详情,便于对比生成内容与原始内容的差异。如对生成的答案或思维链不满意,可直接点击编辑按钮进行手动修正。

2.2 答案生成基本算法

接下来笔者分享几种当前主流且实用的答案生成算法。

2.2.1 基于大模型的提示生成

该方法直接利用大模型,通过精心设计的提示词引导模型回答问题。例如:"根据以下文档,请简要回答:{问题}"。提示词可以引导模型先思考再回答。EasyDataset 同样基于此原理,用户可在项目设置中查看并自定义答案生成的提示词。

2.2.2 基于知识检索增强生成

为缓解大模型的幻觉问题并提高答案的事实依据,可采用检索增强生成。该方法针对输入问题,先从知识库(如向量数据库、搜索引擎)中检索相关文档片段,再将问题和检索到的片段一同输入大模型生成答案。这种方式能有效利用外部知识,捕获文本块间的关联,并支持实时知识更新。

当问题涉及实体关系或多跳推理时,可引入知识图谱技术。知识图谱提供结构化知识支持:将问题编码为向量,同时在知识图谱上利用图神经网络进行信息传播与聚合,定位最可能的答案实体,并据此生成回答。这种方法生成的答案准确且关联性强,但生成速度相对较慢。

2.2.3 基于工具调用的答案生成

现代大模型常结合 Function Calling 技术调用外部工具,以完成需要计算或实时信息的任务。

  1. 代码解释器与计算:当问题涉及数学计算或数据分析时,模型可生成 Python 代码并执行,将计算结果作为答案返回。
  2. API 调用:模型识别用户需要实时信息(如天气、股票价格)时,自动调用相应 API 获取数据,再将数据整理成自然语言答案返回。

这些方法拓展了模型的能力边界,使答案更加准确和实用。

三、EasyDataset问答对数据集生成:数据集质量评估

通过前两节的操作,大家已经能够快速生成大量的问答对数据。然而,这些由大模型生成的数据并非直接可用------其中难免包含噪声、幻觉或不完整的内容。为了获得高质量的监督微调数据集,数据质量评估是必不可少的环节

最直观的评估方式莫过于人工审核。EasyDataset 提供了数据确认、编辑和删除功能,支持对单条数据进行人工校验。但实际微调训练往往需要成千上万条数据,完全依赖人工筛选既不现实也不经济。另一种思路是利用另一个大模型对问答对进行合理性评估,但这种方式的质量通常难以达到人工审核的水平。因此,在实际工程中,笔者在工作中通常采用 "自动化初筛 + 人工抽检 + 迭代优化" 的混合评估策略,在保证质量的同时兼顾效率。

具体流程如下:

  1. 自动化预评估:对生成的大规模数据运行统计指标分析、质量分类器(如基于BERT的小规模深度学习模型)打分、文本去重等操作,快速剔除明显不合格的样本,为后续人工评估缩小范围。
  2. 分层抽样人工评估:根据自动化评估结果(如置信度低、长尾分布等)对数据集进行分层抽样,将可能存在问题的样本类别范围筛选出来,由人工进行详细审核,记录错误类型(如事实错误、逻辑不一致、不完整等)。
  3. 反馈闭环:将人工评估发现的错误类型归类分析,并反馈到数据生成流程。例如,调整问题生成或答案生成的提示词、优化文本分块策略、补充领域标签等,持续改进数据集质量。
  4. 持续监控:数据集质量评估并非一劳永逸。在模型训练过程中,还需通过训练损失、验证集表现等指标间接监控数据集质量,必要时回溯分析数据问题并及时优化数据流程。

以上四个步骤的循环迭代会逐步逼近高质量数据的目标,为后续的模型微调打下坚实基础。

四、EasyDataset问答对数据集导出:不同格式的选择与实践

问答对数据集构建完成后,最后一步便是将其导出为可供模型训练框架直接使用的格式。在构建大模型训练数据集时,采用统一的标准格式导出数据至关重要,主要体现在以下几个方面:

  • 兼容性:标准格式能够确保数据被主流训练框架(如LLamaFactory、MS-SWIFT等)直接读取,无需额外转换,大幅提升开发效率。
  • 可复现性:统一的结构有利于数据集的共享与复现,研究人员可以轻松比对不同数据集的质量与特点,推动领域的良性发展。
  • 规范性:标准格式规范了字段含义,避免了因自定义格式导致的歧义或信息丢失,为模型的稳定训练奠定基础。

因此,选择业界公认的格式导出数据,是连接数据构建与模型训练的关键桥梁。EasyDataset 支持导出多种常见格式,本期重点介绍两种最常用的格式:Alpaca格式ShareGPT格式

4.1 Alpaca格式:适用于单轮指令微调

Alpaca格式源自斯坦福大学发布的Alpaca模型,主要用于指令微调(Instruction Tuning) 任务。其数据结构简洁明了,通常包含三个核心字段:

  • instruction:指令文本,描述任务要求。
  • input:输入文本(可选),为指令提供上下文或补充信息。
  • output:期望的输出文本。

这种设计强调模型对单条指令的理解和执行能力,适用于翻译、代码生成、知识问答等一次性任务。Alpaca格式的问答对往往独立存在,不依赖上下文,便于模型学习"指令-响应"的映射关系。下图为EasyDataset导出的Alpaca格式示例:

4.2 ShareGPT格式:适用于多轮对话场景

ShareGPT格式源于社区项目ShareGPT,旨在捕捉真实的多轮对话场景 。它以对话列表的形式组织数据,通过conversationsmessages字段记录多轮交互,每轮对话明确标注角色(如humangptuserassistant)及内容。

这种格式保留了对话的上下文连贯性,使模型能够学习如何根据历史信息进行自然回应,特别适合训练聊天机器人、客服系统等需要多轮交互能力的模型。相较于Alpaca的单轮结构,ShareGPT更能体现对话的流动性和逻辑性,对多轮对话的表达更加充分。下图为EasyDataset导出的ShareGPT格式示例:

五、总结

本篇内容以EasyDataset工具为例,系统介绍了问答对数据集的完整生成流程:从问题生成(支持单条/批量、三种算法)、答案生成(含思维链、多轮对话),到采用"自动化初筛+人工抽检+迭代优化"策略进行质量评估,最后导出Alpaca或ShareGPT标准格式,为模型微调提供高质量数据。到此数据集构建的基本工具指南笔者就介绍完全,下一篇文章开始将正式介绍大模型训练相关工具,大家敬请期待~

除大模型训练外,笔者也在同步更新《深入浅出LangChain&LangGraph AI Agent 智能体开发》免费专栏,要说明该专栏适合所有对 LangChain 感兴趣的学习者,无论之前是否接触过 LangChain。该专栏基于笔者在实际项目中的深度使用经验,系统讲解了使用LangChain/LangGraph如何开发智能体,目前已更新 40 讲,并持续补充实战与拓展内容。欢迎感兴趣的同学关注笔者的掘金账号与专栏,也可关注笔者的同名微信公众号大模型真好玩 ,每期分享涉及的代码均可在公众号私信: LangChain智能体开发免费获取。

相关推荐
Johny_Zhao3 小时前
OpenClaw中级到高级教程
linux·人工智能·信息安全·kubernetes·云计算·yum源·系统运维·openclaw
比尔盖茨的大脑5 小时前
AI Agent 架构设计:从 ReAct 到 Multi-Agent 系统
前端·人工智能·全栈
后端小肥肠5 小时前
OpenClaw 实战|多 Agent 打通小红书:数据收集 + 笔记编写 + 自动发布一步到位
人工智能·aigc·agent
银河系搭车客指南5 小时前
OpenClaw 多 Agent 实战指南:Multi-Agent Routing 与 Sub-Agents 的正确打开方式
人工智能
手机不死我是天子5 小时前
拆解大模型二:Transformer 最核心的设计,其实你高中就学过
人工智能·llm
gustt5 小时前
MCP协议进阶:构建多工具Agent实现智能查询与浏览器交互
人工智能·agent·mcp
Halo咯咯5 小时前
Claude Code 的工程哲学:缓存与工具设计的真实教训 | 经验分享
人工智能
风象南7 小时前
最适合新手先装的 20 个 OpenClaw Skills 来了!
人工智能
小兵张健17 小时前
35岁程序员的春天来了
人工智能