次元图库
36.81M · 2026-03-09
上篇文章 大模型训练全流程实战指南工具篇(七)——EasyDataset文档处理流程 详细讲解了如何利用EasyDataset构建大模型预训练数据集,涵盖从环境配置、文本分块(多种策略)、数据清洗到领域标签生成,最终导出预训练数据的完整流程。
除了预训练,监督微调(Supervised Fine-Tuning) 也是大模型训练中不可或缺的关键环节,而该过程通常依赖于大家所熟知的问答对数据集。如何高效、高质量地生成这类数据集,始终是学术研究与工程实践中的重要课题。
为了让读者更直观地理解问答数据集的构建方法,本期内容将继续以EasyDataset工具为核心,结合实际操作,带领大家走一遍问答对数据生成的完整流程,帮助大家掌握从原始文本到高质量微调数据集的构建方法。
本期内容将延续上一篇文章《大模型训练全流程实战指南工具篇(七)——EasyDataset文档处理流程 》中的 test 项目,基于已经生成的文本块,继续完成问答对数据集的构建。问答对数据集生成的第一步,便是根据文本块生成问题。
EasyDataset 的问题生成过程,是从分割好的文本块中提取问题,并根据已建立的领域标签树对问题自动进行打标签。问题生成既要保持细粒度、更要全面地覆盖知识,需要涵盖目标训练知识的各个方面。
EasyDataset中每个文本块生成问题的数量,由「项目设置 → 任务设置」中的“生成问题的最大长度”参数决定。默认设置为每 240 个字符生成一个问题,用户可根据文档颗粒度自行调整。本例中笔者保持默认设置。
首先打开EasyDataset项目的数据源列表,在需要生成问题的文本块右下角,点击问题生成按钮,即可针对该文本块生成相应的问题。
由于笔者保持默认的 240 字符设置,所选文本块约 3573 个字符,最终生成了 14 个问题。生成的问题既可以在文本块上方直接查看,也可以点击项目导航栏的「问题」模块进行更详细的浏览。问题模块会列出每个问题所属的文本块以及根据领域标签树自动生成的标签信息。
除了针对单个文本块生成问题,EasyDataset 还支持批量生成功能。用户可批量选择需要生成问题的文本块,并实时查看任务进度。
所有生成的问题均可通过项目导航栏的「问题」模块进行统一管理。该模块提供了两种视图:
在了解 EasyDataset 的问题生成功能后,笔者进一步探讨目前主流的、在实际工作中常用的问题生成算法。
基于提示工程的方法直接向大模型下达指令,例如“请根据以下段落生成一个可回答的问题”,并通过少量示例指导模型根据文本块生成问题。完整的提示词通常包括角色扮演(赋予模型特定身份以提升生成准确性)和约束条件(明确问题的类型、长度或难度等)。这种方法快速、成本低,适合探索性任务和小规模数据集构建。
实际上,EasyDataset 的问题生成正是基于提示工程实现的。用户可在「项目设置 → 提示词设置」中查看并自由编辑问题生成的提示词。需要注意的是,编辑时不要破坏原有提示词中的变量,否则可能导致生成流程失败。例如,在基础答案生成提示词中,{{text}} 代表参考文本,{{question}} 代表需要回答的问题,二者均为关键变量。
基于提示工程的方法虽然便捷,但存在一定局限性。例如,同一篇文章中不同章节之间存在语义关联,若仅从单个文本块中生成问题,则难以捕捉这些跨块的语义关系。为此,衍生出基于知识增强的生成方法。
该方法将分块后的文本全部存入知识库,根据主题(如已生成的标签)从大规模语料库或知识库中检索相关文档片段,再将多个相关片段作为上下文输入大模型生成问题。这种方式特别适合构建具有全局意识的高质量数据集。
更先进的知识增强方法是将文本与知识图谱中的结构化知识(三元组)相结合,作为生成问题的上下文。利用知识图谱中的多跳关系可以生成复杂问题,例如基于“刘慈欣 → 出生地 → 山西 → 省会 → 太原”生成“刘慈欣家乡的省会是哪里?”。这种方法能够生成需要背景知识或逻辑推理的问题,显著提升问题的深度。
在生成问题前,通常已拥有一些人工标注的优质问题样本。基于数据增强的方法一般包含以下步骤:
这种方法利用变换已有数据来创造新的训练样本,能有效扩充问题的规模和多样性,提升数据集的整体质量。
在成功生成问题后,下一步便是为这些问题生成对应的答案。EasyDataset 提供了灵活的答案生成能力,支持单条生成、批量生成,甚至多轮对话数据集的构建。笔者将详细介绍答案生成的基本操作,并探讨当前主流的答案生成算法。
在项目的问题列表视图中,点击单个问题右侧的魔法棒图标,即可为该问题生成答案。生成成功后,右侧会显示已生成答案的数量(单个问题支持生成多个答案)。
当前示例中使用的是 deepseek-chat 对话模型。若选用 deepseek-reasoner 等推理模型,生成答案的同时还会附带思维链(Chain of Thought, CoT)数据,这些数据可用于训练具备推理能力的模型。
EasyDataset 支持多选或全选问题,批量触发答案生成任务。用户可实时查看批量任务的执行进度。
重要提示:在生成多轮对话数据前,需先在「项目设置 → 任务设置 → 多轮对话数据集」中进行配置,包括系统提示词、对话场景、对话轮数、用户与助手的角色设定等。以本文档(GPT-OSS 相关)为例,笔者进行如下配置:
在实际交互中,如果大模型未能一次性给出满意回答,用户往往会持续追问。这要求模型不仅具备记忆能力以记录对话历史,还需对多轮对话内容做出恰当响应。为此,EasyDataset 提供了多轮对话数据集生成功能。在问题列表视图下,可选择对单个问题生成多轮对话,也支持后台批量合成。
所有生成的单轮或多轮对话数据集均可通过项目导航栏的「数据集列表」进行统一管理。以单轮对话数据集为例,列表展示了每条数据的原始问题、创建时间、所用模型、领域标签、是否包含思维链(COT)、答案摘要等信息。
点击单条数据可进入详情页,查看完整信息,包括问题、答案、思维链、使用模型、领域标签、创建时间及关联的文本块。点击文本块名称可查看原始文本块详情,便于对比生成内容与原始内容的差异。如对生成的答案或思维链不满意,可直接点击编辑按钮进行手动修正。
接下来笔者分享几种当前主流且实用的答案生成算法。
该方法直接利用大模型,通过精心设计的提示词引导模型回答问题。例如:“根据以下文档,请简要回答:{问题}”。提示词可以引导模型先思考再回答。EasyDataset 同样基于此原理,用户可在项目设置中查看并自定义答案生成的提示词。
为缓解大模型的幻觉问题并提高答案的事实依据,可采用检索增强生成。该方法针对输入问题,先从知识库(如向量数据库、搜索引擎)中检索相关文档片段,再将问题和检索到的片段一同输入大模型生成答案。这种方式能有效利用外部知识,捕获文本块间的关联,并支持实时知识更新。
当问题涉及实体关系或多跳推理时,可引入知识图谱技术。知识图谱提供结构化知识支持:将问题编码为向量,同时在知识图谱上利用图神经网络进行信息传播与聚合,定位最可能的答案实体,并据此生成回答。这种方法生成的答案准确且关联性强,但生成速度相对较慢。
现代大模型常结合 Function Calling 技术调用外部工具,以完成需要计算或实时信息的任务。
这些方法拓展了模型的能力边界,使答案更加准确和实用。
通过前两节的操作,大家已经能够快速生成大量的问答对数据。然而,这些由大模型生成的数据并非直接可用——其中难免包含噪声、幻觉或不完整的内容。为了获得高质量的监督微调数据集,数据质量评估是必不可少的环节。
最直观的评估方式莫过于人工审核。EasyDataset 提供了数据确认、编辑和删除功能,支持对单条数据进行人工校验。但实际微调训练往往需要成千上万条数据,完全依赖人工筛选既不现实也不经济。另一种思路是利用另一个大模型对问答对进行合理性评估,但这种方式的质量通常难以达到人工审核的水平。因此,在实际工程中,笔者在工作中通常采用 “自动化初筛 + 人工抽检 + 迭代优化” 的混合评估策略,在保证质量的同时兼顾效率。
具体流程如下:
以上四个步骤的循环迭代会逐步逼近高质量数据的目标,为后续的模型微调打下坚实基础。
问答对数据集构建完成后,最后一步便是将其导出为可供模型训练框架直接使用的格式。在构建大模型训练数据集时,采用统一的标准格式导出数据至关重要,主要体现在以下几个方面:
因此,选择业界公认的格式导出数据,是连接数据构建与模型训练的关键桥梁。EasyDataset 支持导出多种常见格式,本期重点介绍两种最常用的格式:Alpaca格式和ShareGPT格式。
Alpaca格式源自斯坦福大学发布的Alpaca模型,主要用于指令微调(Instruction Tuning) 任务。其数据结构简洁明了,通常包含三个核心字段:
instruction:指令文本,描述任务要求。input:输入文本(可选),为指令提供上下文或补充信息。output:期望的输出文本。这种设计强调模型对单条指令的理解和执行能力,适用于翻译、代码生成、知识问答等一次性任务。Alpaca格式的问答对往往独立存在,不依赖上下文,便于模型学习“指令-响应”的映射关系。下图为EasyDataset导出的Alpaca格式示例:
ShareGPT格式源于社区项目ShareGPT,旨在捕捉真实的多轮对话场景。它以对话列表的形式组织数据,通过conversations或messages字段记录多轮交互,每轮对话明确标注角色(如human、gpt或user、assistant)及内容。
这种格式保留了对话的上下文连贯性,使模型能够学习如何根据历史信息进行自然回应,特别适合训练聊天机器人、客服系统等需要多轮交互能力的模型。相较于Alpaca的单轮结构,ShareGPT更能体现对话的流动性和逻辑性,对多轮对话的表达更加充分。下图为EasyDataset导出的ShareGPT格式示例:
本篇内容以EasyDataset工具为例,系统介绍了问答对数据集的完整生成流程:从问题生成(支持单条/批量、三种算法)、答案生成(含思维链、多轮对话),到采用“自动化初筛+人工抽检+迭代优化”策略进行质量评估,最后导出Alpaca或ShareGPT标准格式,为模型微调提供高质量数据。到此数据集构建的基本工具指南笔者就介绍完全,下一篇文章开始将正式介绍大模型训练相关工具,大家敬请期待~
除大模型训练外,笔者也在同步更新《深入浅出LangChain&LangGraph AI Agent 智能体开发》免费专栏,要说明该专栏适合所有对 LangChain 感兴趣的学习者,无论之前是否接触过 LangChain。该专栏基于笔者在实际项目中的深度使用经验,系统讲解了使用LangChain/LangGraph如何开发智能体,目前已更新 40 讲,并持续补充实战与拓展内容。欢迎感兴趣的同学关注笔者的掘金账号与专栏,也可关注笔者的同名微信公众号大模型真好玩,每期分享涉及的代码均可在公众号私信: LangChain智能体开发免费获取。