Easy Dataset:一种从非结构化文档合成大语言模型微调数据的统一且可扩展框架
摘要(Abstract)
大型语言模型(Large Language Models, LLM)在通用任务上表现非常出色,但要把它们用到某个具体领域(比如金融、医疗、法律),却常常遇到一个大难题:高质量的领域专属训练数据太少了 。
举个例子:你想让一个LLM帮你自动解读上市公司财报,它得先“学过”大量真实财报文本 + 对应的专业问题和答案。可这类数据通常分散在PDF、扫描件、网页等非结构化文档里,格式杂乱、表格嵌套多、文字识别难——现有工具要么抽不准内容,要么生成的问题千篇一律、答非所问,很难直接拿来微调模型。
为了解决这个问题,我们提出了 Easy Dataset :一个统一、可扩展、普通人也能上手的数据合成框架。它的核心目标很明确——把一堆杂乱无章的原始文档(比如PDF财报、网页新闻、Word合同),变成高质量、可直接用于LLM微调的问答对(question-answer pairs) 。
它怎么做到的?整个流程分三步,全部通过一个直观的图形界面(GUI)操作:
- 智能文本抽取与分块(Text Extraction & Chunking)
用户不需要写代码,只需在界面上点选:用哪个文本提取模型(比如PyPDF2、pdfplumber、或OCR引擎)、按什么规则切分段落(比如按标题、按固定字数、按语义边界)。Easy Dataset会自动把PDF/HTML/DOCX等格式的原始文档,清洗并切成逻辑连贯、长度适中的文本块(chunks)。
> 举例:一篇30页的年报PDF,可能被切出86个chunk,每个chunk聚焦一个主题(如“2023年营收构成”“应收账款周转率分析”),而不是简单按每500字硬切。 - 角色驱动的问答生成(Persona-Driven Prompting)
对每个文本块,Easy Dataset不直接用“请根据以下内容提问”这种泛泛提示词,而是指定一个专业角色来生成问题,比如:
- “你是一位资深证券分析师,请针对这段财报内容,提出3个投资者最关心的深度问题”;
- “你是一名合规审计师,请检查这段合同条款,生成2个潜在风险点及对应问答”。
这样生成的问题更专业、更多样、更贴近真实使用场景,避免了“机器人味儿”过重的模板化问答。 - 人在回路的质量把关(Human-in-the-Loop Review)
所有中间结果(抽出来的文本块、生成的问题、模型给出的答案)都实时显示在可视化界面上。用户可以随时点击修改、删除、重新生成某一条,甚至拖拽调整chunk边界——就像编辑文档一样自然。这一步不是“走形式”,而是确保最终数据集既准确又实用的关键防线。
实验效果也很实在:我们在一个金融问答任务上测试,用Easy Dataset生成的数据微调LLM后,模型在金融专业问题上的准确率大幅提升,同时没有损害它原本在常识、数学、推理等通用能力上的表现——也就是说,它学会了“专精”,但没变“偏科” 。
最后,这个工具完全开源:代码和一键安装包都放在 GitHub(https://github.com/ConardLi/easy-dataset),目前已获得超过9000颗星标,说明很多开发者和研究者已经在实际使用它了。
1 引言(Introduction)
大型语言模型(Large Language Models, LLMs)在通用任务上展现了惊人的能力(Achiam 等,2023;Yang 等,2025),因此已被广泛应用于学术界和工业界。但现实中的具体应用——比如医疗诊断、金融分析、法律咨询——往往需要特定领域的专业知识 。这时,如何让一个通用的 LLM 快速、准确地“学会”某个专业领域的知识,就成了一个关键难题。
举个例子:你有一个已经训练好的通用 LLM(比如类似 ChatGPT 的模型),现在想让它成为“保险理赔专家”。它得理解保单条款、理赔流程、常见拒赔理由等。直接拿一堆保险文档喂给它,它是学不会的——就像你不能把整本《保险法》扔给一个大学生,就指望他明天就能独立处理理赔案件。它需要的是结构化的教学材料 ,比如:“问题:客户因感冒住院,能报销吗?答案:不能,因为普通门诊/住院不在基本医保报销范围内,除非是重大疾病或特殊约定……”
这就是监督微调(Supervised Fine-Tuning) 起作用的地方。简单说,就是用一批人工写好的「问题-答案」对(QA pairs)来“再训练”模型,帮它把领域知识“刻进”模型里。Ouyang 等(2022)、Taori 等(2023)的工作证明,这是目前最实用、效果最好的领域适配方法之一。
但问题来了:这些高质量的 QA 对从哪来?
理想情况是请保险专家一条条写——但成本高、速度慢、难规模化。尤其在医学、法律、工程等强专业领域,没有专家参与,数据质量根本没法保证。
于是,大家开始尝试自动合成训练数据(automated data synthesis) :用程序+大模型,从原始文档(如PDF保单、网页条款、内部手册)中自动“生成”出成千上万条靠谱的 QA 对。Wang 等(2024b)、Tan 等(2024)就做了这类探索。听起来很美,但实际落地有两个“拦路虎”:
第一个拦路虎:文档太乱,机器看不懂
真实世界的文档五花八门:PDF扫描件、带表格的 Word、网页截图、PPT、甚至手写笔记的图片。它们混合了纯文本、表格、图表、页眉页脚、水印、错位排版……
标准的文本提取工具(比如 pdfplumber 或 PyPDF2)一碰到表格就容易崩,遇到扫描 PDF 就直接返回空;更别说识别图中文字或理解表格语义了。Zhang 等(2024)指出,这类“杂乱无章”的输入,常常导致信息提取不全、错位、甚至张冠李戴——比如把“免责条款”下的内容,误提到了“投保流程”里。
第二个拦路虎:生成的 QA 对又臭又长,还重复
就算成功把文档转成纯文本,下一步是让它“出题”。但很多方法只是机械地做“句子改写”或“关键词填空”,结果生成一堆无效 QA:
- 问题模糊:“这个东西怎么样?” → 答案没法写
- 答案错误:“Q:车险包含玻璃单独破碎险吗?A:包含。”(实际多数基础车险不包含,需额外加保)
- 大量重复:“Q:什么是交强险?A:……”、“Q:交强险是什么?A:……”、“Q:请解释交强险。A:……” → 模型学三遍等于学一遍,还容易过拟合
所以,真正有用的合成,不是“越多越好”,而是要: 问题有区分度、 答案精准忠实原文、 多样性高(覆盖定义、流程、例外、对比、案例等不同类型)、 每条都和领域强相关。
已有工作也在尝试解决,比如按预设主题(Chesterfield Labs, 2025)或题目模板(Canto 等,2024;Marten 等,2025)生成数据。但它们大多跳过了最难的第一步:从原始混乱文档中可靠地提取结构化信息 。Chen 等(2024a,b)虽然做了文档解析,但产出的 QA 对仍不够“即插即用”——还需要大量人工清洗才能用于微调。
这就引出了本文的核心目标:
打造一个“端到端”的全自动流水线:从上传一份 PDF 保单开始,到一键生成可直接用于微调的高质量 QA 数据集,中间不写代码、不调参数、不手动切文本——连非技术人员(比如业务专家)也能轻松操作。
我们提出了 Easy Dataset :一个统一、可扩展、带图形界面(GUI)的框架,专为从非结构化文档合成微调数据而设计。它由两大核心模块组成:
- 自适应文档处理(Adaptive Document Processing)
- 不靠单一解析器硬扛所有格式,而是“组合拳”:针对 PDF、Word、网页、图片等不同来源,自动选用最适合的文本提取模型(比如对扫描 PDF 用 OCR,对原生 PDF 用 layout-aware 解析器)。
- 提取出的文本,再用混合分块策略(hybrid chunking) 切成语义连贯的片段。不是简单按字数切(比如每512字一刀),而是结合标题层级、段落逻辑、列表结构,确保每个“块”讲一件完整的事(例如:“【理赔材料清单】包括身份证复印件、发票原件、诊断证明……” 自成一块,不被截断)。
- 角色驱动的数据合成(Persona-Driven Data Synthesis)
- 不让模型“随便问”,而是给它设定一个专业角色 (persona):比如“资深保险理赔顾问(10年经验,擅长解释条款歧义)”。
- 再给它明确指令:“请基于以下文本,以该角色身份,提出 5 个不同角度的问题,并给出精准、简洁、符合监管要求的答案。”
- 这样生成的 QA 对天然具备多样性(有的考定义、有的考例外、有的考流程判断)和专业可信度,且避免了机械重复。
最关键的是:整个过程通过可视化界面(GUI)完成 。用户可以:
上传文档 → 预览自动解析效果 → 手动调整分块边界(比如合并两段、拆开一个长段)→ 查看并编辑生成的每一条 QA → 一键导出 JSON/CSV 格式数据集。
全程零代码 ,彻底降低技术门槛。
我们的主要贡献总结如下:
- 提出了 Easy Dataset :首个将自适应文档解析与角色驱动 QA 合成深度集成的端到端框架,显著减少人工干预,实现从原始文档到高质量微调数据的全自动转化。
- 在金融问答(Financial QA)任务上的实验证明:仅用 Easy Dataset 合成的数据微调 LLM,即可大幅提升其在专业子任务(如条款推理、风险判断)上的准确率,同时不损害模型原有的通用能力(比如写诗、逻辑推理等)。
Table 1: 现有合成数据生成工具对比(Comparison of existing synthetic data generation tools)

2 相关工作(Related Work)
近年来,研究者提出了许多系统,旨在帮助自动化地生成合成数据(synthetic data),用于大语言模型(LLM)的微调。下面介绍几个代表性工具,并说明它们的特点与不足。
Distilabel(Canto 等,2024)
这是一个模块化(modular)框架,提供了实用的组件,能生成多种类型的合成数据,比如:
- 指令微调数据(instruction-tuning data):例如“请把这句话翻译成法语”这类带明确指令的问答对;
- 偏好数据(preference data):例如给出两个回答 A 和 B,标注“B 更好”,用于训练奖励模型(reward model)。
优点:结构清晰、可插拔、适合开发者灵活组合。
局限:没有内置图形界面(GUI),也不直接支持从原始文档(如 PDF、Word)中自动抽取内容来生成数据。
Kiln(Chesterfield 实验室,2025)
这是一个基于图形界面(GUI-based)的平台,主打“开箱即用”:
- 支持零样本(zero-shot)数据生成:不需要提前写模板或示例,模型直接根据提示词生成;
- 可构建主题树(topic tree):比如输入“人工智能”,自动生成子主题“机器学习”→“深度学习”→“transformer”;
- 能生成推理类数据(reasoning data):例如多步逻辑题,“如果 A 比 B 高,B 比 C 高,那么谁最矮?”;
- 还提供人工审核与打分界面:用户可实时查看、修改、给生成结果打分。
优点:交互友好,适合非技术背景用户参与。
局限:不强调“以原始文档为源头”生成数据——也就是说,它更擅长凭空编题,而不是从你手头的一份行业白皮书里提炼出专业问答。
Curator(Marten 等,2025)
这个工具专注于生成多样化任务类型的微调数据,覆盖范围很广:
- 推理数据(reasoning):如数学证明、逻辑推断;
- 代码执行数据(code execution):如“写一个 Python 函数,输入列表返回去重后的升序排列”;
- 图表生成数据(chart generation):如“根据以下销售数据画柱状图”;
- 函数调用数据(function-calling):如“调用 weather_api(city=‘Beijing’) 获取天气”。
优点:任务类型丰富,适配复杂下游应用。
Data-Juicer(Chen 等,2024a,b)
这是一个面向数据工程师的“数据流水线工具箱”:
- 支持多种用户接口(命令行、Python API、Web UI);
- 提供大量数据处理算子(operators):如去重、过滤低质量文本、提取代码块、识别数学公式等;
- 用户可自由拼接这些算子,定制清洗与增强流程。
优点:高度可定制,适合有工程能力的团队做大规模数据治理。
局限:对小白用户门槛高;不聚焦“从文档生成微调数据”这一核心场景,更像是通用数据预处理器。
GraphGen(Chen 等,2025)
这个工具利用知识图谱(knowledge graph)来生成问答对:
- 输入一份源文档(如某篇科研论文),先抽取出实体和关系(如“Transformer 是一种 neural network architecture”),构建成图;
- 再通过可视化界面,让用户选择图中节点/路径,自动生成问题(如“Transformer 是什么?”)和答案。
优点:生成结果事实性强、结构清晰,适合知识密集型领域。
局限:依赖高质量知识图谱构建,对普通用户来说配置复杂;不支持 persona(角色)引导或风格控制(比如“请以高中老师口吻出题”)。
这些工具的共同短板(见表 1) :
虽然各有亮点,但它们仍存在三个关键缺陷:
- 缺乏人机协同闭环(human-in-the-loop) :
大多数工具只做“一次生成”,不支持边看边改、实时反馈、迭代优化。而真实数据建设中,专家往往需要反复调整提示词、筛选样例、修正错误答案——这正是质量提升的关键。 - 不支持“以原始文档为源头”的数据合成 :
很多工具假设你已经有现成的 prompt 或 topic,但现实中,用户常手握一堆 PDF、网页、内部文档,却不知如何高效转化为训练数据。缺少“文档→文本块→QA 对→校验→导出”的全链路支持。 - 缺少端到端图形界面(end-to-end GUI) :
有的工具命令行友好但无界面,有的有界面但只覆盖部分环节(如只做生成,不做校验)。结果是:技术人员嫌麻烦,业务人员不会用,中间没人能顺畅落地。
这些缺口,正凸显了开发一个统一、易用、以文档为中心、支持人机协同的新框架的必要性——也就是本文提出的 Easy Dataset。
图 1:Easy Dataset 框架概览。该框架包含两大核心模块:自适应文档处理与角色驱动的数据合成。在第一模块中,不同格式的文档经模型驱动的解析,再通过混合分块策略切分为语义合理的文本块。在第二模块中,为每份文档自动构建“体裁–受众”组合,例如“技术文档 → 工程师”,以此指导生成多样化的问答对;接着引入角色引导式提问,如模拟“面试官”“学生”“产品经理”等视角进一步拓展问题类型;最后,通过知识增强型提示合成最终的增强问答对,确保答案事实准确;整个流程支持交互式人工精修,保障数据质量。
3 框架(Framework)
我们提出了“Easy Dataset”,这是一个统一且可扩展的框架,专门用于从非结构化文档中自动生成高质量的大语言模型(LLM)微调数据集。
简单来说,它就像一个“智能数据工厂”:你把原始文档(比如 PDF 报告、扫描的合同、网页截图等)扔进去,它就能一步步帮你把杂乱的内容变成可用于训练模型的问答对(QA 数据),而且整个过程支持人工参与和调整——就像设计师在修图时随时能放大、涂改、重做某一步。
如图 1 所示,整个流程是一个可视化、人机协同(human-in-the-loop)的流水线 ,也就是说:每一步你都能看到中间结果,并手动干预、修正或重跑。这大大降低了构建高质量微调数据的门槛,尤其适合没有编程经验的研究者或工程师。
它的核心流程分为四个关键阶段:
3.1 自适应文档处理(Adaptive Document Processing)
第一步是“读懂”原始文档。由于很多文档是 PDF、扫描件甚至图片,里面混着文字、表格、图表、页眉页脚等,纯文本提取工具(比如 pdfplumber)常常失效。
Easy Dataset 改用视觉-语言模型(Vision-Language Models, VLMs) ,比如 Qwen-VL 或 LLaVA 这类既能“看图”又能“读字”的模型,来理解整页布局、识别公式、区分标题与正文、还原表格结构。
举个例子:输入一张带表格的财务报表截图,VLM 不仅能提取出“2023年营收:¥5.2亿”,还能识别出这是“利润表”中的“营业收入”行,为后续生成有上下文的问答打下基础。
3.2 混合分块策略(Hybrid Chunking Strategy)
提取出文本后,不能直接喂给大模型生成问答——太长会超上下文长度,太短又丢失语义连贯性。Easy Dataset 采用三种方式结合的分块方法:
- 按长度切分 (length-based):比如每段最多 512 个 token,像传统做法;
- 按结构切分 (structure-based):尊重原文逻辑,例如“不把一个标题和它下面的三段解释拆到不同块里”,遇到
# 简介、## 方法、### 实验设置这样的 Markdown 标题就自然断开; - 人工标注切分点 (manual splitting):在可视化界面中,你可以拖动滑块或点击按钮,在任意位置插入分隔符,比如在某个关键定义之后强制切一刀。
这样既保住了语义完整性,又适配了不同模型的输入限制。
3.3 问答生成(QA Generation)
这是最灵活的一步:生成什么样的问答对?Easy Dataset 提供两种模式:
- 朴素模式(naive) :让 LLM 直接阅读文本块,自问自答。例如输入一段关于“光合作用”的科普文字,模型可能生成:“什么是光合作用?” → “光合作用是植物利用阳光将二氧化碳和水转化为葡萄糖和氧气的过程。”
- 角色驱动模式(persona-driven) :你可以指定一个“角色”,让模型以该身份提问和回答。例如设定角色为“高中生物老师”,它就会生成教学风格的问题:“请用一句话向高一学生解释光合作用的核心目的。” → “就是植物用自己的‘厨房’,靠阳光做饭(造养分),顺便放出我们呼吸需要的氧气。”
这种设计让生成的数据天然具备多样性(语气、粒度、视角不同),更贴近真实应用场景。
3.4 模块化模型配置与导出(Modular Model Configuration & Export)
Easy Dataset 不绑定某一家大模型——你既可以调用 OpenAI、Qwen、Claude 的 API,也可以本地运行 Llama 3、Phi-3 等开源模型。
它提供一个模块化配置界面 :像搭积木一样选择模型、设置 temperature(控制随机性)、top_p(控制采样范围)、max_tokens(最大输出长度)等参数。
最后,生成好的 QA 数据支持一键导出为多种格式:JSONL(每行一个 JSON 对象,工业界常用)、CSV(方便 Excel 查看)、Hugging Face Dataset(可直接 load_dataset() 加载),并且原生兼容主流微调框架 ,比如 LlamaFactory(Zheng 等,2024),意味着你导出后几乎不用改代码,就能直接开始训练。
3.1 自适应文档处理(Adaptive Document Processing)
文档解析(Document Parsing)
我们的框架能从各种格式的非结构化文档中提取纯文本内容,包括:纯文本(plain text)、Markdown、DOCX 和 PDF 文件。这是构建高质量微调数据集的基础步骤,因为后续所有任务(比如训练大语言模型)都依赖于准确、语义完整的文本输入。
-
纯文本和 Markdown 文件 :我们几乎不做改动,直接保留原文——就像复制粘贴一样,只去掉极少的无意义空格或换行,目的是不破坏原有的逻辑结构和语义。
-
DOCX 文件(Word 文档) :这类文件表面上看起来有标题、段落、加粗等样式,但底层其实没有严格的结构标记(不像 HTML 或 Markdown 那样明确标出“这是标题”“这是列表”)。如果直接读取,容易把格式代码混进正文,或者漏掉关键信息。为此,我们用一个轻量级工具叫 Mammoth (Williamson, 2015),它能把 DOCX 文件“翻译”成干净的 Markdown 格式。举个例子:
原 DOCX 中:
【标题1】机器学习简介
【正文】监督学习是……Mammoth 输出:
# 机器学习简介监督学习是……
这样既保留了层级语义(如标题 vs 正文),又去掉了 Word 特有的格式干扰(比如字体大小、页眉页脚)。 -
PDF 文件 :情况更复杂,得分两类处理:
-
文字区域 → 直接 OCR 或文本提取;
-
图片/图表区域 → 交给视觉-语言模型(Vision-Language Model, VLM)来“看图说话”,比如识别图中坐标轴标签、表格内容、流程图逻辑等。
这样就能避免“把图当空白跳过”或“把公式当乱码丢弃”的问题,最大程度保全原始信息。 -
简单排版 PDF (比如论文 PDF、纯文字报告):我们用
pdf2md工具(Zillmann, 2017)快速转成 Markdown,速度快、效果稳。 -
复杂排版 PDF (比如带图表、多栏、图文混排的教材或财报):规则类工具(比如按坐标切文本块)很容易出错——比如把一张图的标题和图注切到不同段落,甚至把表格拆得支离破碎。
我们的方案是两步走:
- 先做版面分析(layout analysis) :自动识别页面里哪些区域是文字、哪些是图片、哪些是表格、哪些是页眉页脚。这就像给 PDF “画地图”。
- 再分区域处理 :
此外,我们的框架还支持对接最新的专业 PDF 处理工具,比如 MinerU (Wang et al., 2024a;He et al., 2024),用户可以根据文档难度自由切换策略——小文档用轻量方法快,大而杂的财报就调用 MinerU 深度解析。
文本分块(Text Chunking)
大语言模型(LLM)一次只能处理有限长度的文本(即“上下文窗口”,比如 4K、8K、128K token)。所以,我们不能把整本书直接喂给模型,而是要把长文档切成一个个合理的小段(chunk),既要够短以适配模型限制,又要够“完整”——不能在一句话中间硬切,也不能把相关代码和注释分开。
为此,我们提出 HybridChunking(混合分块法) ,它不是一刀切的机械切分,而是“有结构意识 + 可人工干预”的智能策略:
- 第一步:粗粒度初分
先按自然换行符(\n)切分,得到初步段落(比如每个段落、每个列表项、每个代码块)。 - 第二步:动态拆与合
- 如果某一段太长(比如一个 500 行的 Python 函数),就用用户指定的分隔符递归切分:比如按
def切函数、按#切注释块、按"""切 docstring。 - 如果相邻几段都特别短(比如连续 5 行都是单句定义),就合并它们,凑够最小长度(如 128 token),但绝不跨语义单元 ——比如不会把“定义变量 a”和“下一段讲算法原理”强行拼一起。
- 第三步:人工兜底(可视化界面)
再聪明的规则也有盲区。比如某份合同里有一段用特殊符号§分节,但用户没告诉系统这个符号是分隔符。这时,我们提供一个可视化界面:用户能看到原文被高亮分块的效果,鼠标拖拽就能调整块边界,像编辑视频时间轴一样精细控制。所有手动操作还能保存为模板,下次同类文档自动复用。
总结来说,HybridChunking 不是“全自动”也不是“全手动”,而是让机器干重复活(识别换行、括号、缩进),让人管关键决策(哪里该切、哪里要保),最终产出语义连贯、长度可控、适配 LLM 的高质量文本块。
3.2 人物角色驱动的数据合成(Persona-Driven Data Synthesis)
Easy Dataset 提供了一套灵活的流程,能从文本片段(text chunks)中自动生成“问题-答案”(QA)对。整个流程高度可配置,支持两种生成模式:
- 基础 QA 对生成(naive QA-pair generation) :直接基于文本内容提问和作答;
- 人物角色驱动的 QA 对生成(persona-driven QA-pair generation) :让大模型(LLM)“扮演不同身份”来提问和回答,从而生成风格多样、语境可控的微调数据。
换句话说:不是让模型“冷冰冰地答题”,而是先告诉它:“你现在是一位刚入门的程序员,请用鼓励的语气提一个简单问题”,或者“你现在是资深法律顾问,请用严谨术语提一个专业问题”。这样,同一段原文,就能产出多种风格、面向不同人群的 QA 数据,极大提升数据多样性与实用性。
问题生成(Question Generation)
每一段文本被送入大模型前,都会配上一个可自定义的系统提示(system prompt) 。这个提示就像给模型发的一张“角色卡”,控制它提问的方式,比如:
- 问题要简短还是详细?
- 是命令式(“请解释…”)还是启发式(“为什么…?”)?
- 面向小学生?还是面向行业专家?
- 语气是中立、热情、还是严肃?
举个例子:
原文片段:“Transformer 模型使用 self-attention 机制计算 token 之间的依赖关系。”
若 persona 是(教学引导,高中生),系统提示可能是:
“你是一位耐心的 AI 老师,正在给高中生讲解深度学习。请提出一个简洁、易懂、带生活类比的问题,帮助学生理解 self-attention 的作用。”
→ 模型可能生成问题:“self-attention 就像课堂上每个同学都同时听全班发言并判断谁的话最重要——这样理解对吗?”
为了防止模型“偷懒”,只靠问号(?)识别问题(现实中很多真实问题并不带标点),Easy Dataset 还引入了随机标点丢弃机制(stochastic punctuation dropout) :在生成问题时,以一定概率(如 30%)把问号删掉。
这迫使模型真正理解“什么是问题”,而不是靠符号做判断,从而提升下游微调模型在真实场景中的泛化能力。
答案生成(Answer Generation)
答案不是随便编的,而是严格“忠于原文”的高质量回应。具体做法是:
把刚生成的问题 + 对应的原始文本片段一起喂给大模型,并加上明确指令(knowledge-enhanced prompting),例如:
“请仅根据以下提供的文本内容作答。不得编造、不得引用外部知识。答案需准确、简洁,并与问题直接相关。”
这样能确保答案:
- 语义上紧扣原文(semantic alignment)
- 事实正确(factual consistency)
- 符合所属领域语境(domain relevance)
而且答案风格也能按需切换:
- 面向考试复习 → 要求“简明扼要,分点列出”;
- 面向技术文档 → 要求“附带关键术语英文原词”;
- 面向教学场景 → 要求“先给出结论,再用一句话解释”。
如果使用具备思维链(Chain-of-Thought, CoT)能力的模型(如 DeepSeek-R1),答案还会包含中间推理步骤。例如:
问题:“为什么 self-attention 能捕捉长距离依赖?”
答案会是:
推理步骤 :因为每个 token 都直接与其他所有 token 计算 attention 分数,不经过层层传递……
最终答案 :所以它天然支持任意距离的 token 关联。
这些推理步骤会被完整保留在 QA 对中,方便后续分析模型“错在哪一步”,大幅提升可解释性与调试效率。
最后,Easy Dataset 还提供生成后精修接口 :
- 用户可人工审核、修改、确认每一条答案;
- 同时也用另一个 LLM 自动重写答案和 CoT 步骤,进一步提升事实准确性与语言鲁棒性。
人物角色驱动的 QA 对生成(Persona-Driven QA-Pair Generation)
这个思路最早由 Ge 等人(2024)提出:只要给大模型设定不同“沟通身份”(persona),就能自然产出风格各异的文本。比如:
- “作为面试官” → 提问偏考察逻辑与经验;
- “作为好奇的小学生” → 提问偏重比喻和具象化;
- “作为同行评审专家” → 提问聚焦假设、局限与证据。
Easy Dataset 把这个思想升级为一套结构化两阶段流程,灵感来自 Hao 等人(2025)提出的 Massive Genre-Audience(MGA)方法 。MGA 原本用于预训练语料扩充,而 Easy Dataset 将其巧妙迁移到 QA 数据合成任务中,目标不再是“更多文本”,而是“更多样、更精准、更适合微调的 QA 对”。
该流程分为两个阶段:
第一阶段:人物角色合成(Persona Synthesis Stage)
对每一份原始文档,先用一个 LLM 自动生成一组独特的 ** (体裁,受众)对(Genre-Audience pair, GA pair)** 。
- 体裁(Genre) :定义“提问的意图和对话风格”,例如:动机激发(Motivation)、概念澄清(Concept Clarification)、故障诊断(Troubleshooting)、教学示范(Demonstration)等;
- 受众(Audience) :刻画“提问者的认知水平与背景知识”,例如:初学者(Beginners)、工程师(Engineers)、决策者(Executives)、跨领域研究者(Cross-domain Researchers)等。
举例:
- (Motivation, Beginners)→ “如何用一句话鼓励新手迈出第一步?”
- (Troubleshooting, Engineers)→ “当 attention score 出现 NaN 时,最可能的三个原因是什么?”
- (Demonstration, Executives)→ “请用非技术语言,说明 transformer 相比传统模型带来的业务价值。”
用户也可以手动编辑或添加 GA 对,以便更精准匹配特定行业(如医疗、金融)或任务(如客服问答、合规审查)。
第二阶段:人物角色引导的 QA 生成(Persona-Guided QA Generation Stage)
拿到这些 GA 对之后,系统对同一文本片段,分别用每个 GA 对“设定角色”,再调用大模型生成对应风格的问题;接着,再基于该问题、原文片段、以及 GA 对所定义的角色,生成风格一致的答案。
结果就是:
- 同一段讲“梯度下降(Gradient Descent)”的技术文档,
→ 可同时产出:
- 给高中生的类比式问答(“像下山找最低点,步子太大容易错过山谷…”);
- 给算法工程师的公式推导式问答(“请写出 SGD 更新公式的完整形式,并指出 learning rate 如何影响收敛轨迹”);
- 给产品经理的收益导向式问答(“梯度下降优化了什么指标?上线后用户停留时长提升了多少?”)。
所有 QA 对都满足两个关键要求:
- 忠实性(Fidelity) :问题与答案均严格基于原文,不幻觉、不偏离;
- 一致性(Stylistic Consistency) :问题和答案共享同一 persona,语气、粒度、术语密度完全匹配。
表 2:Easy Dataset 生成的人物角色驱动 QA 对示例。通过调整 GA 对,框架可在保持高原文保真度的前提下,生成风格多样的数据样本。

这套方法,本质上是把原本用于“扩大预训练语料库”的 MGA 方法,成功转化为一套专为领域微调(domain-specific fine-tuning)服务的高质量、多样化 QA 数据合成引擎 。正如表 2 所示,仅靠一份原始文档,就能高效、可控地“裂变”出大量风格各异但内容扎实的训练样本,显著提升原始语料的利用效率。
3.3 模型配置(Model Configuration)
为了让大语言模型(LLM)能顺畅地接入数据生成流程,我们设计了一个灵活的“模型配置模块”。你可以把它理解成一个统一的模型插槽 ——就像给电脑装不同显卡一样,这个模块让你可以轻松切换、管理多个 LLM,而不用写代码或改配置文件。
整个过程非常简单:你只需要在界面上填 4 个基本信息,就能让系统调用你想要的模型:
- 模型服务商(Model provider) :比如 OpenAI、Anthropic、Google,或者国内的千问、讯飞星火等;
- API 地址(API endpoint) :服务商提供的调用网址(例如
https://api.openai.com/v1/chat/completions); - API 密钥(API key) :你的个人访问密钥(类似登录密码,用于身份验证);
- 模型名称(Model name) :比如
gpt-4o、claude-3-haiku、qwen2-7b等具体型号。
举个例子:
如果你填了
- provider =
"openai", - endpoint =
"https://api.openai.com/v1/chat/completions", - key =
"sk-abc123...", - model =
"gpt-3.5-turbo",
那系统就会自动用 OpenAI 的gpt-3.5-turbo模型帮你生成数据。
更贴心的是,它还支持本地运行的模型 !比如你用 Ollama(Ollama, 2023)在自己电脑上跑了一个 llama3:8b,只需把 provider 设为 "ollama",model 设为 "llama3:8b",系统就能直接连上本地服务,不依赖网络、不花钱、更隐私。
此外,模块还提供了对生成行为的精细调控能力 ,主要通过两个常用参数实现:
- temperature(温度值) :控制输出的随机性。值越小(如 0.1),结果越确定、越保守;值越大(如 0.9),结果越多样、越有创意。
- top-p(核采样阈值) :只从累计概率超过 p 的最小词集合里选词。比如
top_p = 0.9表示:模型只考虑那些加起来占总概率 90% 的最可能的词,其余 10% 的冷门词直接忽略。这比固定取前 k 个词(top-k)更自适应。
# 示例:模拟 temperature 和 top_p 对生成的影响(概念示意,非真实调用)import randomimport numpy as npdef mock_generation(logits, temperature=1.0, top_p=1.0): # logits 是模型输出的原始分数,假设为 [2.0, 1.5, 0.8, 0.3, -0.5] # 步骤1:用 temperature 调整 logits logits_scaled = [logit / temperature for logit in logits] # 步骤2:转为概率(softmax) exps = [np.exp(x) for x in logits_scaled] probs = [e / sum(exps) for e in exps] # 步骤3:top-p 截断 —— 只保留累计概率 ≥ top_p 的最小前缀 sorted_pairs = sorted(enumerate(probs), key=lambda x: x[1], reverse=True) cumsum = 0.0 indices_to_keep = [] for idx, prob in sorted_pairs: cumsum += prob indices_to_keep.append(idx) if cumsum >= top_p: break # 步骤4:在保留的词中按概率采样 filtered_probs = [probs[i] for i in indices_to_keep] filtered_probs = [p / sum(filtered_probs) for p in filtered_probs] # 重归一化 chosen_idx = random.choices(indices_to_keep, weights=filtered_probs)[0] return chosen_idx, probs# 测试:logits = [2.0, 1.5, 0.8, 0.3, -0.5]logits = [2.0, 1.5, 0.8, 0.3, -0.5]idx, full_probs = mock_generation(logits, temperature=0.5, top_p=0.8)print(f"采样得到的词索引: {idx}")print(f"原始概率分布(未缩放): {[f'{p:.3f}' for p in full_probs]}")
运行示例(输入相同 logits):
- 当
temperature=0.5, top_p=0.8→ 输出偏向高分词(如索引 0 或 1),且排除低分尾部; - 当
temperature=1.5, top_p=0.95→ 概率更平滑,低分词也有机会被选中,结果更多样。
这样,不管是生成严谨的技术文档、口语化的客服对话,还是带逻辑链的推理题,你都可以通过调节这两个参数,让模型“收放自如”。
3.4 数据集导出(Dataset Export)
Easy Dataset 支持将自动生成的问答对(QA pairs)导出为标准格式的数据集文件,比如 JSON、JSONL 和 CSV。你可以把它们想象成不同“包装盒”——虽然里面装的都是同样的问答内容,但盒子的形状(格式)不同,方便适配不同的训练工具。
举个例子:
- JSON 像一个结构清晰的“收纳盒”,所有问题和答案都用
{}包裹,并用键名(如"question"、"answer")标记清楚; - JSONL(即每行一个 JSON)像一叠“明信片”,每张卡片上写一条问答,适合大数据量时逐行读取;
- CSV 则像 Excel 表格,用逗号分隔字段,直观易读,适合用表格软件打开查看。
它还内置支持两种当前非常流行的问答数据格式规范:
- Alpaca 格式 (Taori 等,2023):结构简单,通常包含
instruction(指令)、input(输入,可选)和output(输出)三个字段。比如:```plaintext
{ “instruction”: “把下面这句话翻译成英文”, “input”: “你好,今天过得怎么样?”, “output”: “Hello, how is your day going?”} - ShareGPT 格式 (Zheng 等,2023):更贴近真实对话,用
conversations列表记录多轮交互,每轮含from(说话人,如"human"或"gpt")和value(内容)。比如:```plaintext
{ “conversations”: [ {“from”: “human”, “value”: “Python 中怎么打印 ‘Hello’?”}, {“from”: “gpt”, “value”: “用 print(‘Hello’) 就可以。”} ]}
你还可以自定义导出模板 :只需告诉 Easy Dataset,你想保留哪些字段——比如 question(问题)、answer(答案)、reasoning_steps(推理步骤)、domain_label(领域标签)等。就像定制快递单:你可以选择只打勾“收件人”和“电话”,也可以加上“备注”“是否保价”。这样导出的数据就能无缝接入你自己的微调流程,或者符合某个开源社区约定的数据标准。
此外,Easy Dataset 还能自动对接 LlamaFactory 训练框架 (Zheng 等,2024):它会根据你导出的数据,自动生成一个 LlamaFactory 能直接识别的配置文件(通常是 YAML 格式)。你只需要在 LlamaFactory 的启动命令里指定这个配置文件路径,比如:
llamafactory-cli train examples/train_lora.yaml
整个过程就完成了——不用手动改参数、不用拼接路径、也不用担心字段名对不上。这大大降低了从“生成数据”到“真正开始训练”的门槛,让初学者也能快速跑通完整流程。
表 3:Qwen2.5-7B-Instruct 模型在通用与领域专用评测基准上,使用朴素数据合成(naive)和角色驱动数据合成(persona-driven)方式进行微调前后的性能对比。加粗表示最优结果,下划线表示次优结果。

4 评估(Evaluation)
4.1 实验设置(Experimental Setup)
我们怎么知道 Easy Dataset 生成的数据好不好?这就需要做实验来“打分”。下面用大白话一步步讲清楚整个评估是怎么做的:
第一步:选一个真实、有挑战性的领域当“考场”
研究人员挑了 5 份最新的金融报告 (都是模型知识截止日期之后发布的),全部来自公开网站。为什么选金融?因为这类文档结构乱、术语多、逻辑复杂——很适合检验 Easy Dataset 能不能从“杂乱无章”的原始材料里,提炼出真正有用的训练数据。
第二步:自己动手出一套“专业考卷”
他们从这 5 份报告里,人工设计了 100 道问题 ,比如:“这份财报中,2023 年的净利润同比增长了多少?”、“公司提到的三大风险因素是什么?”——这些问题都紧扣原文内容,专门用来测试模型学没学会这个领域的“真本事”。这套题就叫领域专用评估数据集 (domain-specific evaluation dataset)。
第三步:让 Easy Dataset “出题+组卷”,训练模型
用 Easy Dataset 工具,基于那 5 份金融报告,自动生成一批训练数据(比如问答对、摘要、推理步骤等)。然后,用这批数据去微调(fine-tune)一个开源大模型:Qwen2.5-7B-Instruct (通义千问的一个版本,70 亿参数,带指令优化)。训练框架用的是 LlamaFactory (一个流行的、易上手的大模型微调工具包)。
第四步:设置对照组,公平比拼
不是只试一种方法,而是做了两个版本的 Easy Dataset:
- 朴素版(naive pipeline) :直接从文档抽句子、转问答,不加额外角色或背景;
- 人设驱动版(persona-driven pipeline) :让 Easy Dataset “扮演”某个角色(比如财务分析师),再根据角色视角去生成问题和答案,更贴近真实使用场景。
这两个版本分别生成训练数据,各自微调模型,最后看谁教出来的模型更厉害。
第五步:用两套试卷来考试
给微调后的模型安排两场考试:
- 专业卷 :上面提到的那 100 道金融问题(领域专用数据集);
- 通用卷 :5 个权威公开基准测试(benchmarks),覆盖不同能力:
- MMLU (大规模多任务语言理解):考常识、数学、人文等 57 个学科的知识;
- CMMLU (中文版 MMLU):专为中文语境优化的多学科测试;
- HellaSwag :考常识推理,比如“一个人拿起钥匙,接下来最可能做什么?”;
- MATH :纯数学解题能力,含代数、几何、竞赛题;
- HumanEval :考代码生成能力,给函数描述,让模型写 Python 函数。
第六步:请“专家监考老师”来批卷(关键细节!)
对于那 100 道金融题,不用人工一条条看答案对错(太费时),而是用了 ** “大模型当裁判”(LLM-as-a-judge)** 的方法:把模型的回答 + 标准答案 + 评分标准一起喂给另一个更强的模型——DeepSeek-V3 (通过 API 调用),让它像资深金融分析师一样,逐题打分(比如 0~5 分)。这种方法在学术界已被验证可靠,具体怎么设计提示词、怎么校准分数,都在附录 A 里写了。
其他技术细节,比如学习率设多少、训练几轮、batch size 多大……这些“配方参数”全放在附录 B,供想复现实验的人查阅。
4.2 结果(Results)
表3展示了Qwen2.5-7B-Instruct模型在多个通用基准测试(general-purpose benchmarks)以及一个领域专用评估数据集上的评测结果,对比了基础模型(base model)、使用“朴素合成法”(naive data synthesis)微调后的模型,以及使用“角色驱动合成法”(persona-driven data synthesis)微调后的模型。
通俗理解一下这个对比实验 :
就像教一个刚毕业的通才型助理(基础模型),先让他只读一堆公开的百科和新闻(通用能力),再分别用两种方式给他“补课”——
- 方式一(朴素合成法) :直接从金融文档中提取问题和答案,拼成训练题,比如:“什么是‘可转债’?答:一种可以转换成股票的债券。”
- 方式二(角色驱动合成法) :让不同“角色”来出题和答题,比如让一位资深基金经理、一位新手股民、一位监管人员,分别基于同一份财报,提出不同角度的问题并给出符合其身份的回答。这样生成的数据不仅有知识,还有语气、关注点、表达习惯等多样性。
看通用能力表现(如MMLU等基准) :
- 微调后模型没有“偏科”——它依然能很好回答历史、物理、医学等跨学科问题,说明Easy Dataset生成的数据不是死记硬背某领域,而是把新知识“融进去”了 ,没把原来的能力挤掉。
- 更有意思的是,“角色驱动”版本在MMLU上得分最高,而且在多数任务中不输“朴素版”,甚至在几个难任务(比如需要推理或跨文档整合的题目)上反超。这说明:加入不同角色的视角和表达风格,反而帮模型学得更活、泛化更强 ——就像多听几位老师讲同一个知识点,理解会更立体。
看金融领域专用表现 :
- 基础模型在该金融评估集上表现很差,因为它根本没见过2024年的新财报、新规、市场术语等,属于“知识断档”。
- 用朴素合成法微调后,分数升到57.0 ;
- 改用角色驱动合成法后,进一步提升到59.6 。
举个具体例子:
假设有一道题:“某上市公司刚发布一份‘终止重大资产重组’公告,投资者最应关注哪三项风险?”
- 基础模型可能胡猜(因没学过这类公告结构);
- 朴素版可能答出“政策风险、市场风险、流动性风险”(标准答案式列举);
- 角色驱动版则可能模拟基金经理说:“重点关注交易对手方信用恶化是否已暴露、前期尽调是否存在重大遗漏、以及公司后续融资渠道是否受限”——更贴近真实业务逻辑,所以得分更高。
这些结果共同说明:Easy Dataset不仅能高效注入最新、最准的领域知识,还能通过设计数据生成方式(比如引入角色),让模型学得更扎实、更灵活,真正做到“专而不僵,活而不散”。
5 结论与未来工作
我们提出了 Easy Dataset,这是一个端到端(end-to-end)的框架,专门用于自动合成面向特定领域的大型语言模型(LLM)微调数据集 。
你可以把它想象成一个“智能数据工厂”:你把原始的、杂乱无章的文档(比如PDF报告、网页文本、内部手册等)放进去,它就能在人的参与和指导下,自动把它们加工成高质量、多样化、可直接用于训练或微调 LLM 的结构化数据(例如问答对、指令-响应样本、摘要-原文对等)。
关键特点是:
- 人在环中(human-in-the-loop) :不是完全黑箱运行,而是允许用户在关键步骤(如模板设计、样本筛选、质量校验)中实时干预和调整,就像老师指导学生写作业一样,既保证效率,又守住质量底线;
- 界面直观 :不需要写代码,通过可视化操作就能定义数据生成规则(比如“从技术文档中抽取‘问题-解决方案’格式的样本”);
- 产出三高 :生成的数据集具有高质量 (语义准确、格式规范)、高多样性 (覆盖多种句式、任务类型、难度层次)、高可用性 (可直接导入 Hugging Face Datasets 或主流训练脚本)。
实验结果表明:用 Easy Dataset 构建的数据集对 LLM 进行微调后,模型在目标领域(如金融问答、医疗摘要)的任务表现大幅提升,同时没有损害它原本具备的通用能力(比如常识推理、数学计算)和鲁棒性(比如对抗扰动下的稳定性)——换句话说,它让模型“更专业”,但没让它“变偏科”。
接下来,我们计划从三个方向持续扩展 Easy Dataset:
- 支持更广的数据模态(modalities) :目前主要处理纯文本,后续将支持 SQL 查询生成、表格理解与生成、图文混合(multi-modal)数据的合成;
- 集成自动质量监控 :在数据生成过程中实时检测低质样本(如重复、矛盾、幻觉内容),并自动预警或过滤;
- 开发高级增强策略(enrichment strategies) :比如基于语义相似度自动扩增边缘案例、引入可控噪声提升泛化性、跨文档关联信息生成复合样本等,进一步提升数据的丰富度(variety)和保真度(fidelity)。
学AI大模型的正确顺序,千万不要搞错了
🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!
有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!
就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇
学习路线:
✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经
以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!
我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)