
想微调特定领域的 DeepSeek,数据集究竟要怎么搞?
大家问的最多的就是关于微调数据集的问题:总结了一下,常见的问题大概有这么几类:为什么我的微调效果不好?跟数据集有关系吗?数据集的格式是固定的吗?我要弄成什么样子?数据集还分很多种类?测试集、训练集、验证集的区别是啥?我想要微调特定领域的模型?去哪获取这个领域公开的数据集?手动整理数据集太累了,有没有什么快速标注数据集的方法?数据集可以用 AI 生成吗?怎么把领域的文献转成可供模型微调的数据集?:了
大家问的最多的就是关于微调数据集的问题:
总结了一下,常见的问题大概有这么几类:
-
为什么我的微调效果不好?跟数据集有关系吗?
-
数据集的格式是固定的吗?我要弄成什么样子?
-
数据集还分很多种类?测试集、训练集、验证集的区别是啥?
-
我想要微调特定领域的模型?去哪获取这个领域公开的数据集?
-
手动整理数据集太累了,有没有什么快速标注数据集的方法?
-
数据集可以用 AI 生成吗?怎么把领域的文献转成可供模型微调的数据集?
下面,我们就在后续的文章里为大家详细讲解这些关于数据集的问题,大概的学习路径如下:
-
前置知识:了解常见的微调任务类型,根据特定任务选择适合的数据集;
-
前置知识:了解常见的数据集格式,数据集的类型;
-
学会怎么找:一些推荐的获取公开数据集的途径;
-
学会这么标:基于标注工具半自动标注数据集;
-
学会怎么做:将特定领域的文献转换为目标格式的数据集;
-
学会怎么做:基于 AI 全自动生成模型蒸馏数据集。
在开始之前,我们还是一定要明确做好数据集对于模型微调的重要性,大家一定不要觉得随随便便用一些数据都可以喂给 AI,对于数据集本身的格式、数据集内容的准确性、数据集的数量等多个方面都会影响你微调模型的最终效果。
我最近给很多小伙伴排查了关于模型微调的问题,其中 80% 以上都是数据集的问题,剩下的 20% 属于微调参数设置或者微调方法的问题。
我们还用让学生考试参加补习班来举例,如果补习班的学习教材不行,即使学生再怎么努力、补习班的老师和教学策略有多好,补习效果也不会很好,因为给你学的东西都是有错的,要老师和教学方法好还有什么用呢?
这就是做好数据集的重要性。
下面,我们一起先来看看,如何根据特定的微调任务场景,选择合适的数据集。
一、微调数据集的常见分类
很多同学弄不清楚,给模型喂的数据究竟需要什么样的格式,实际上就是还没分清楚几种常见的微调任务类型。为了在不同的业务场景下解决不同的问题,我们可能采取的微调任务类型是不一样的,那所用的数据集格式肯定也会有所差别。
所以,为了弄清楚我们要整理什么样的数据集格式,先要搞清楚我们要做的微调属于哪种任务场景,下面是我梳理的对常见微调任务的一个分类图:
从最上层的预训练模型开始,我们先划分出是否为多模态(例如让模型具备对图片、语音、视频的理解和生成能力)微调,还是纯文本微调(仅让模型具备生成文字的能力)。
在文本微调中,监督微调是目前应用最广泛也是最常用的微调技术,当然目前我们普通人想在特定行业里去微调自己的大模型,最常用的也是监督微调,所以监督微调的数据集格式是我们后续重点学习的内容。
然后其他微调技术还包括无监督、自监督微调,强化学习微调等等,这些我们只做简单了解,不用过多深入。最后还有因为最近 DeepSeek 爆火而带火的知识蒸馏技术,我也把它当作特殊微调任务的一种,这个我们后面再具体讲解。
1.1 预训练
从零开始训练一个模型,一般这个流程叫做预训练,这个过程的目的就是让模型掌握语言的通用规律,以及基本的语言理解能力。
目前我们市面上主流的大模型,比如 ChatGPT、DeepDeek
等等,都属于 “自回归模型”,而 “自回归模型” 的本质就是:用过去的自己来预测未来的自己。
我们都知道,大模型输出文本的时候是按照 Token
来输出的。
Token
简单理解就是把句子拆成最小语义单元(如中文拆字 / 词,英文拆词或子词)。
当你给定模型一个问题时,模型先会预测出第一个 Token,然后根据问题和第一个 Token 再去预测第二个 Token,知道整句话输出完成,比如下面的例子:
回答被拆分出了 4 个 Token
,每个 Token
都是根据前面的问题 + 已经输出的 Token
预测出来的。 那怎么能让模型把后面输出的每个 Token
预测的更准确呢?这就要靠我们的预训练数据集了,在预训练的数据集中,这些关键字出现在一起的次数越多,那模型输出的概率越大。所以我们的数据集越丰富,模型预测 Token
输出的准确率就越高,最终的输出效果也就更好。
所以在预训练的过程中,我们一般用海量非结构化文本(比如书籍、网页、对话),通过「预测下一个词」来训练模型,这也就意味着预训练的数据集格式是没有明确要求的,例如下面这些数据我们可以直接用于训练:
但是在特定领域的微调上,就不能用非结构化文本了,我们可以这样理解:
-
预训练阶段:就像婴儿学说话,听到的是各种声音(非结构化),不管是什么,直接让他多听,慢慢多就能学会语言规律;
-
指令微调阶段:就像教小孩做事「听到问题要回答」,需要明确告诉他这是什么问题,正确答案是什么。如果继续用没规律(非结构化)对话,他对你要让他学的事情就不会印象太深刻。
而预训练的过程,我们可以理解成一个无需人工监督,自己学习和锻炼能力的过程,对应的,想要让模型具备特定的能力,就要用到监督微调了。
1.2 监督微调
监督微调(Supervised Fine-Tuning,SFT
),顾名思义就是需要人去监督微调的过程。
怎么 “监督” 呢?就是通过标注过的数据直接教模型做事,适合有明确目标的任务。最简单的,我们直接告诉模型输入对应的输出是什么就可以了。
比如:我们想训练一个中英翻译模型,把英文翻译为中文就是一个非常明确的需求场景,所以在数据集里只需要有输入、输出就可以了:
{"input": "Hello", "output": "你好"}
1.2.1 指令微调
那假如我们想让模型具备多种语言理解的能力呢,这时候只靠两个字段就不够了,因为在 Input
是同样一个词语的时候,根据我们想让模型完成的不同任务,output
可能是不一样的,这时候我们就要多引入一个指令的概念,比如这个数据集:
[ { "instruction": "将这句英文翻译成法语", "input": "Hello, how are you?", "output": "Bonjour, comment ça va ?" }, ... ]
我们告诉模型明确的指令:将英文翻译为法语,再将 Input
(英文)、Output
(法语)告诉模型, 模型就能准确理解要做什么了,这就是指令微调。
指令微调常见的业务场景:
-
智能教育:实现作业辅导、规划个性化学习路径、辅助语言学习。
-
智能办公:可处理文档、邮件,进行日程管理。
-
智能翻译:应用于专业领域翻译、特定场景翻译及多语言交互。
-
数据分析:让模型根据分析需求指令,对数据进行准确解读和洞察。
指令微调典型开源数据集(包含指令、输入、输出字段):
https://huggingface.co/datasets/shibing624/alpaca-zh
Alpaca
数据集:由斯坦福大学创建,通过微调模型生成,包含约 5.2 万个指令跟随数据样本。涵盖多种任务,如常识问答、文本生成等,助力模型在指令理解和生成方面优化。
指令微调的数据集制作相对还是比较简单的,因为我们要执行的任务一般很明确,往往也有比较明确的答案了,比如想要微调模型在翻译方面的能力,那就用现成的翻译 API 来构造数据集;想要微调模型在数学解题方面的能力,其实也有现成的题目 + 答案可以用来构造。所以指令微调场景的数据集一般不太难做,主要进行一些格式转换的工作即可。
1.2.2 对话微调
另外一种常见的微调任务就是对话微调。
对话微调(Dialogue Tuning
) 是通过多轮对话数据训练模型生成连贯、符合语境的回复,强调对话历史的上下文理解和回复的自然流畅性。其核心在于教会模型处理对话中的逻辑关系、情感表达和角色身份,对话微调的数据集通常包含对话的上下文以及对应的回复。
[ { "dialogue": [ {"role": "user", "content": "今天天气怎么样?"}, {"role": "assistant", "content": "北京今日多云转晴,气温22℃,适合户外活动。"}, {"role": "user", "content": "那适合去长城吗?"}, {"role": "assistant", "content": "长城景区海拔较高,建议携带外套,注意防晒。"} ] }, ... ]
对话微调数据集的核心特点:包含多轮对话上下文、标注角色身份,注重回复连贯性与逻辑性。通过这样的数据,模型可以学习到在不同对话场景下如何生成合适的回复,从而提高对话的连贯性和相关性。
对话微调常见的业务场景:
-
智能客服系统:提升客服机器人在处理用户咨询时的对话能力,能够更准确地理解用户意图并提供解决方案。
-
聊天机器人:让聊天机器人更自然地与用户进行多轮对话,提高用户体验。
-
语音助手:优化语音助手在语音交互中的对话表现,使其更符合用户的期望。
对话微调典型开源数据集:
https://huggingface.co/datasets/philschmid/guanaco-sharegpt-style?
一个用于训练对话模型的多语言问答数据集,其内容结构和风格符合 ShareGPT 对话格式,数据集中的每个样本为一个对话轮次,包含人类提问和模型回答,数据覆盖多语言(英语、西班牙语、中文、俄语等)和多样化领域。
对话微调的数据集制作也不困难,一般可从在线聊天平台、客服对话记录、或者一些公开的访谈记录来获取数据,也能通过众包方式让标注人员模拟对话生成,只需整理为特定格式,如标注对话角色、意图等。
1.2.3 领域适配
接下来,可能是最近我见过最多的大家对于微调的一类诉求和场景,基于微调让模型对特定领域进行适配。预训练的模型虽然基于海量数据具备了通用的文字理解和生成能力,但是由于预训练的数据集在特定领域可能并不会覆盖的那么全面,这些模型在某些特定领域或任务上的表现可能并不理想,这时候就需要进行领域适配微调。
领域适配(Domain Adaptation
)是指将模型在特定领域的数据上进行微调,使其更好地适应特定领域的任务和需求。
怎么进行领域适配呢?我们需要在特定领域的数据集上对模型进行训练,这些数据集通常包含该领域的专业术语、特定格式和相关任务的标注。例如,在医疗领域,数据集可能包含病历文本、医学术语以及对应的诊断结果等信息。
[ { "instruction": "分析患者的症状描述", "input": "55岁男性,持续性胸骨后疼痛3小时,含服硝酸甘油无效", "output": "可能诊断:急性心肌梗死(STEMI),建议立即行心电图检查及心肌酶谱检测", "domain": "医疗" }, { "instruction": "解释法律条款", "input": "《民法典》第1032条", "output": "该条款规定自然人享有隐私权,任何组织或个人不得以刺探、侵扰、泄露、公开等方式侵害他人隐私权", "domain": "法律" }, ... ]
领域适配数据集的核心特点:领域术语标注(如医学本体库、法律术语库)、复杂规则建模(如药物相互作用、合同条款逻辑)、场景化数据增强(如模拟问诊对话、合同审查流程);
领域适配典型的业务场景:
-
医疗领域适配:用于病历分析、疾病诊断辅助、医疗文献检索等。
-
法律领域适配:辅助法律文件分析、案例检索、合同审查等。
-
金融领域适配:用于风险评估、市场分析报告生成、金融产品推荐等。
领域适配典型开源数据集:
https://huggingface.co/datasets/qiaojin/PubMedQA
基于
PubMed
文献的医学问答数据集,包含医学研究相关问题,适合医疗信息抽取与领域适配任务。
在领域适配的任务上,数据集的准备相对就困难一点了,首先我们可以尝试去一些开源数据集平台(如 HuggingFace) 上检索是否有复合我们需求的数据集,如果没有找到合适的,或者开源数据集无法完全满足我们的需求的时候,可能就得靠我们自己的一些领域文献来构造数据集。
将领域文献构造成数据集,一般就两个途径:
-
第一个就是靠纯人工整理,或者与领域专家合作标注数据(可以借助一些三方的标注平台),将数据处理为模型可接受的格式,可能涉及术语标准化等工作。
-
第二个就是借助 AI 辅助生成,注意这里 AI 起到的作用只是辅助和提效,并不能完全自动化,就算大家真的能够借助某些工具全自动将领域文献转化成数据集,我也不建议大家直接用,在不经过人工二次确认的情况下,质量肯定难以保障,最终模型微调的效果也不会很好。
在后面的实战章节,我会教大家如何借助一个神器,低成本的将领域内的文献批量转成可供模型微调的数据集。
1.2.4 文本分类
还有一种很常见的监督微调任务,就是文本分类(Text Classification
),它是自然语言处理中的一个经典任务,目的就是通过标注数据训练模型对文本进行类别预测或标签分配。这类任务需要模型理解文本语义与类别特征的关系,适用于需要结构化输出的场景。
怎么进行文本分类呢?我们需要使用标注了类别的文本数据集对模型进行训练,让模型学习文本特征与类别的映射关系。文本分类数据集的关键在于构建符合业务需求的分类标签,例如从评论中区分出好评和差评,从新闻中区分出客集新闻和金融新闻:
[ {"text": "这款手机续航长达48小时,拍照效果惊艳", "label": "positive"}, {"text": "系统频繁卡顿,客服响应速度慢", "label": "negative"}, {"text": "量子计算机突破新型纠错码技术", "label": "science_news"}, {"text": "央行宣布下调存款准备金率0.5个百分点", "label": "finance_news"} ]
文本分类微调的典型业务场景:
-
情感分析:商品评论情感极性识别(正面/负面/中性)
-
内容审核:检测违规内容(涉政/暴力/广告)
-
新闻分类:自动归类至财经/科技/体育等栏目
-
意图识别:用户query分类(咨询/投诉/比价)
文本分类典型开源数据集:
https://huggingface.co/datasets/stanfordnlp/imdb
imdb
大型电影评论数据集,包含用户评论到电影评分的映射关系,适用于对评论进行积极、负面分类的微调任务。
文本分类任务的数据集,一般可以借助一些专业的第三方标注平台来做:这类平台往往配备了丰富的标注工具,能满足不同文本分类需求。例如在新闻文本分类中,标注员可利用平台的快速标注功能,将新闻精准划分为政治、经济、娱乐等类别。在后面的实战章节,我会教大家如何通过工具高效的标注文本分类数据集。
1.2.5 模型推理微调
对于推理模型的微调其实是监督微调的一种特殊形式,通过在数据集中显式标注思维链(Chain of Thought, COT
),训练模型不仅给出最终答案,还能生成逻辑推导过程。其核心在于让模型学会「分步思考」,适用于需要复杂逻辑推理的场景(如数学证明、代码调试)。
在推理模型(比如 DeepSeek-R1
)的回答中,<think></think>
中包含的这部分其实就是模型的推理过程,它其实是根后面的答案一起作为一个回答输出的,只不过在大部分的 C 端应用中对这部分提取出来做了特殊展示。
随着最近推理模型 DeepSeek-R1
的爆火,开始让推理模型走进大众的视野,大家在选择模型进行微调时,也会去选择具备推理能力的模型,如 DeepSeek-R1
的蒸馏版本。在用于推理模型微调的数据集中,通常需要额外包含模型思考过程的部分:
[ { "instruction": "解决数学应用题", "input": "小明买了3支铅笔,每支2元;又买了5本笔记本,每本比铅笔贵4元。总花费多少?", "chain_of_thought": [ "铅笔单价:2元/支 → 3支总价:3×2=6元", "笔记本单价:2+4=6元/本 → 5本总价:5×6=30元", "合计花费:6+30=36元" ], "output": "总花费为36元" }, ... ]
不过有一点需要大家注意,其实并不是所有任务都适合用推理模型,因为推理模型的幻觉比较大,有些情况选择推理模型反而会起到相反的效果,在处理简单明确的任务时,推理模型可能会把问题复杂化,导致思考过度、响应较慢,甚至增加幻觉的风险。比如如果你让推理模型去完成检索、解释类的任务时,当它找不到可以参考的信息就会按照自己的思考过程进行输出,结果并不一定准确,下面则是一些适合用于推理模型微调的场景:
-
代码生成与调试:推理模型能够理解复杂的编程问题,生成高效的代码解决方案,并辅助开发人员进行代码调试。
-
数学问题求解:在数学建模、复杂计算和逻辑推理任务中,推理模型表现出色,能够提供详细的解题步骤和准确的答案。
-
复杂数据分析:推理模型擅长处理需要多步骤推理和策略规划的复杂数据分析任务,帮助科学家和研究人员进行更深入的数据挖掘。
-
法律与金融分析:在处理法律合同、金融协议等复杂文档时,推理模型能够提取关键条款,理解模糊信息,辅助决策。
数据集中的思维链,在某些特定场景下可能比较容易获取,比如在数学推理任务的微调上,一般数据集本身带的解题过程就可以作为思维链,比如下面的数学解题数据集:
https://huggingface.co/datasets/AI-MO/NuminaMath-CoT
约 86 万道中国高中数学练习题、以及美国和国际数学奥林匹克竞赛的题目,每个问题的解答都采用了思维链(CoT)的格式。
还有就是靠带推理能力的大模型蒸馏获取,像 OPEN AI
的 O1、O3 这种模型,为了避免大家窃取思考过程,思维链都是直接隐藏掉的,但是我们的国货之光 DeepDeek
是完全开源且开放思考过程的,目前很多带思维链的开源数据集都是从 DeepSeek-R1
蒸馏而来。或者我们也可以引导不具备推理能力的模型来产出思考过程,后面我们会在实战章节中讲解。
1.2.6 知识蒸馏
提到蒸馏,这里我们也稍微讲一下,严格来说,蒸馏技术并不属于微调的范畴,但是我们实际上是可以通过微调来达到蒸馏的效果,所以这里我把它当作是一种特殊的微调(并不严谨)。
知识蒸馏(Knowledge Distillation
)是将复杂模型(教师模型)的知识迁移到轻量级模型(学生模型)的技术,通过优化学生模型使其输出接近教师模型的“软标签”,从而在保持性能的同时降低推理成本。
简单来说,如果大模型已经完全可以满足你在特定任务上的诉求,但是部署成本又太高了,你完全可以选择一个小模型,然后从大模型里把你任务里需要用到的领域知识提取出来,构造成数据集,再去微调小模型,从而让这个小模型也能在你的特定领域完成任务,这就可以理解为一个模型蒸馏的过程。
模型蒸馏的数据集构造应该是最简单的,在你完全信任大模型输出的条件下,你可以直接将大模型产出的问答对作为数据集,最后在进行人工的质量评估和验证即可。
模型蒸馏典型开源数据集:
https://huggingface.co/datasets/Congliu/Chinese-DeepSeek-R1-Distill-data-110k
中文基于满血 DeepSeek-R1 蒸馏数据集,数据集中不仅包含 math 数据,还包括大量的通用类型数据,总数量为 110K。
在后面的实战章节,我会教大家如何使用工具批量生成用于模型蒸馏的数据集。
1.3 其他微调技术(了解)
以上几种监督微调的方式应该是大家最经常用到几个场景了,但是为了方便大家更好的理解微调技术,我们也要了解一下其他的一些微调手段。
1.3.1 强化学习微调
强化学习微调(Reinforcement Learning from Human Feedback,RLHF
)是在监督微调的基础上,通过人类来主动反馈优化模型生成质量的方法。
其核心在于引入奖励模型(Reward Model
)评估生成结果的合理性,并通过强化学习策略(如 PPO
算法)调整模型参数,使生成内容更符合人类偏好。
[ { "input": "请推荐一部科幻电影", "output": "《星际穿越》是一部经典科幻片,探讨了时间与亲情。", "reward_score": 4.5 // 人类标注的质量评分(0-5分) }, { "input": "解释黑洞理论", "output": "黑洞是由暗物质构成的神秘天体,会吞噬一切物质。", "reward_score": 2.0 // 包含错误信息,得分低 } ]
强化学习微调的典型业务场景:
-
对话系统优化:提升回复的相关性,对齐人类价值观(安全、无害、有用性)。
-
内容生成:控制输出风格(如幽默、正式)或避免敏感信息。
-
代码生成:优化代码的可读性和正确性。
强化学习典型开源数据集:
https://huggingface.co/datasets/Dahoas/rm-static
人类偏好排序数据集,用于强化学习微调、训练奖励模型。
1.3.2 多模态微调
看到之前评论里也有很多同学问能不能在训练数据集里引入图片,这里也简单提一下,如果我们想要让模型具备更好的图片、音频、视频等非纯文本的理解能力,那就属于多模态微调的范畴了。
多模态微调(Multimodal Fine-Tuning
)指通过文本、图像、语音等多模态数据训练模型,使其具备跨模态理解与生成能力。它和文本类模型的微调可以说是并列的两个范畴,其中也包括监督/非监督微调、强化学习微调等范畴。
需要注意的是,想要做一个多模态的微调任务,前提是选择的预训练模型一定也要具备基础的多模态理解能力,多模态微调任务涉及多种模态的数据(如文本、图像、音频等),模型需要能够理解和处理这些不同模态的信息,并有效地进行融合和交互。如果预训练模型本身不具备多模态能力,那么在微调阶段将面临很大的挑战,难度不亚于从零训练一个多模态模型,所以你想用多模态数据集去微调 DeepSeek 就先别考虑了。
[ { "text": "一只猫在追蝴蝶", "image_url": "https://example.com/cat.jpg", "caption": "一只橘色的猫正在追逐花园里的白色蝴蝶" }, { "audio": "audio.wav", "text": "会议录音转写:今天的议题是...", "summary": "会议讨论了Q3销售目标与市场策略" } ]
注意这里的图片、视频、音频等多模态数据可以是 CND 地址、base64 编码,或者直接放在 HuggingFace 上,这里写相对路径,总之在训练时能够读取的到就可以。
多模态微调的典型业务场景:
-
图文问答:输入图片和问题,生成答案。
-
视频内容理解:分析视频帧和字幕,生成摘要。
-
跨模态检索:根据文本描述搜索相关图像/视频。
多模态微调典型开源数据集:
https://huggingface.co/datasets/HuggingFaceM4/the_cauldron
包含 50 个大规模视觉语言训练数据集(仅训练集),用于多任务视觉语言模型的微调。数据集结构包含
images
(图片列表)和texts
(对话文本),其中对话以用户提问、模型回答的形式呈现,覆盖问答、选择等任务(如TQA数据集示例)。
二、微调数据集的常用格式
看了这么多的微调任务场景,大家可能会有点乱了,怎么这么多格式,微调的数据集到底有格式要求吗?到实际的微调代码里,能够自动适配这么多的格式吗?
首先,对于模型微调的数据集,是没有明确的格式要求的,我们一般在代码中抹除各种微调数据集格式的差异,我们还拿之前微调实战教程中的代码来举例,回顾一下之前我们是怎么处理数据集的。
我们先来看第一段代码:
这段代码其实就是在定义一个用于格式化微调数据集的模版,其中的三个 “{}” 其实就是对应的我们要传入的三个变量,分别对应原始问题、思考过程、最终答案三个部分。
然后我们再来看下面这段代码,也很好理解,就是提取出我们原始数据集里面的三个变量:
-
Question:对应问题
-
Complex_COT:对应思考过程
-
Response:对应最终回答结果
然后循环原始数据集,将这三个变量传入上面的模版,最终导入到一个 text
变量里。
回顾一下我们之前的一个数据集格式:
调用上面的模版,每条数据集其实就转换成了下面这种格式:
最终所有数据集合并完,其实最终就是一个字符串数组:
我们最后在回顾下微调模型的参数,其中有两个重要的参数:
-
train_datset:接收上面我们已经处理好的数据集
-
dataset_text_field:用于指定取数据集中的哪个字段来做训练。
所以其实最后喂给模型的还是一段格式化好的字符串,并非结构化的数据。
那也就是说,数据集我们随便用什么格式都可以吗?
当然也不是,模型微调已经不是什么新技术了,只是最近由于 DeepSeek
的横空出世,导致逐步开始被各领域更广泛的应用,在这之前,哪些数据集格式效果好,哪些容易整理,已经总结了很多经验,比如目前广泛被大家使用的有两种数据集格式,Alpaca
和 ShareGPT
。
2.1 Alpaca
Alpaca
也就是我们上面提到的指令微调里的一个数据集案例。
Alpaca
最初是斯坦福大学于 2023 年发布的 52k 条指令微调数据集,由 OpenAI
的 text-davinci-003
模型生成,旨在通过指令跟随(Instruction Following
)任务优化大语言模型(如 LLaMA
)的性能。
后续随着社区的发展,Alpaca 的 JSON 结构逐渐被抽象为一种 通用数据格式,并且扩展了一些字段如 system
(系统提示)和 history
(历史对话),支持多轮交互任务。适用于多种微调场景,很多主流框架(如 LLaMA-Factory、DeepSpeed)都可以直接加载 Alpaca
格式的数据集。
这里我们参考 LLaMA-Factory
给出的几种在不同微调场景中 Alpaca
格式的数据案例:
Alpaca 格式的指令微调数据集:
Alpaca 格式的领域适配微调数据集:
Alpaca 格式的偏好数据集:
2.2 ShareGPT
ShareGPT 最早是一种数据格式标准,由社区设计用于规范多轮对话和工具调用场景的模型训练数据存储方式。其核心目标是通过结构化字段(如 conversations
列表、tools
工具描述)支持复杂交互(如用户提问 → 工具调用 → 结果整合)。
随着格式的普及,社区基于 ShareGPT
格式构建了多个具体的数据集,这类数据集被称为 “ShareGPT 格式数据集”。ShareGPT
格式的核心特征如下:
-
角色标签包括
human
(用户)、gpt
(模型)、function_call
(工具调用指令)、observation
(工具返回结果)等,覆盖完整工具调用流程。 -
消息顺序规则:
human
或observation
必须出现在奇数位置,gpt
或function_call
在偶数位置,确保逻辑连贯性。 -
通过
tools
字段定义外部工具(如天气查询 API、计算函数),使模型能动态调用外部资源生成响应。 -
通过
conversations
列表完整记录对话历史,适用于需上下文理解的场景(如医疗问诊中的连续追问)。
ShareGPT 格式的指令微调数据集:
这里的 “function call” 就像是模型使用的“工具指令”。比如你想知道今天的天气,模型就会调用一个“天气查询工具”,输入地点和日期,工具返回结果后,模型再告诉你答案。这个过程让模型能借助外部工具完成复杂任务,比如查询实时数据或进行计算,从而变得更强大、更实用,也更像人类解决问题的方式。它的能力非常强大,相当于给 AI 嫁接起了连通外部的桥梁,这里我们不做过多讲解,如果大家感兴趣,我会在后续的文章里详细讲解。
ShareGPT 格式的偏好数据集:
ShareGPT 格式的多模态数据集:
特殊的 ShareGPT 格式数据集:OpenAI 格式
OpenAI 格式可以视为 ShareGPT 格式的一种特殊情况,主要关注用户、助手和系统之间的简单对话,其特点是使用
messages
列表来组织对话,每条消息包含role
(角色)和content
(内容)字段。角色可以是“system”(系统)、“user”(用户)或“assistant”(助手),分别表示系统提示、用户输入和模型回答。在实际应用中,OpenAI 格式的数据集可以兼容支持 ShareGPT 格式的系统,但 ShareGPT 格式提供了更丰富的对话结构和功能支持。这个也是我们上个教程中提到的硅基流动微调数据集要求的格式。
2.3 格式对比
下面是两种数据集格式的详细对比,大家可以根据自己的实际需求场景选择合适的格式:
对比维度 | Alpaca 格式 | ShareGPT 格式 |
---|---|---|
核心设计目标 | 单轮指令驱动任务(如问答、翻译、摘要) | 多轮对话与工具调用(如聊天机器人、API 交互) |
数据结构 | 以 instruction 、input 、output 为主体的 JSON 对象 |
以 conversations 列表为核心的多角色对话链(human/gpt/function_call/observation) |
对话历史处理 | 通过 history 字段记录历史对话(格式:[["指令", "回答"], ...] ) |
通过 conversations 列表顺序自然体现多轮对话(角色交替出现) |
角色与交互逻辑 | 仅区分用户指令和模型输出,无显式角色标签 | 支持多种角色标签(如 human 、gpt 、function_call ),强制奇偶位置规则 |
工具调用支持 | 不原生支持工具调用,需通过 input 或指令隐式描述 |
通过 function_call 和 observation 显式实现工具调用,支持外部 API 集成 |
典型应用场景 | - 指令响应(如 Alpaca-7B) | |
- 领域知识问答 | ||
- 文本结构化生成 | - 多轮对话(如 Vicuna) | |
- 客服系统 | ||
- 需实时数据查询的交互(如天气、计算) | ||
优势 | - 结构简洁,任务导向清晰 | |
- 适合快速构建单轮任务数据集 | - 支持复杂对话流与外部工具扩展 | |
- 更贴近真实人机交互场景 | ||
局限 | - 多轮对话需手动拼接 history |
|
- 缺乏动态工具交互能力 | - 数据格式更复杂 | |
- 需严格遵循角色位置规则 |
三、微调数据集的不同用途
还有一点需要大家明确,也是问的比较多的,其实我们准备的数据集,并不都是用于模型训练使用的,一般分为训练集、测试集、验证集,我们还用考试来举例:训练集教会模型「基础知识」,验证集优化「学习方法」,测试集检验「实战能力」,三者如同「预习-复习-考试」的学习闭环,缺一不可:
-
训练集 = 日常练习题(通过大量练习掌握知识点)
-
验证集 = 模拟考试卷(检测阶段学习成果,调整学习方法)
-
测试集 = 最终期末考试(检验真实学习能力)
-
完整集 = 所有可用的习题库(包含前三者的原始数据全集)
3.1 训练集 — 老师教知识
-
作用:模型学习规律的核心资料
-
示例:
教AI识别猫时,给它看10,000张标注好的猫图(包含不同品种、姿势) -
关键点:
-
需覆盖各种可能性(白天/夜晚、近景/远景)
-
相当于学生的课本+习题册
3.2 验证集 — 学习效果检查
-
作用:防止死记硬背,测试举一反三能力
-
典型场景:
训练中途用2,000张新猫图验证,发现模型错把「无毛猫」认成狗,于是调整训练策略 -
核心价值:
-
选择最佳模型版本(如不同神经网络结构)
-
调整超参数(相当于改变学习计划表)
3.3 测试集 — 最终能力考核
-
作用:评估模型真实水平
-
必须遵守:
-
绝对隔离原则:测试集的5,000张猫图在训练中从未出现过
-
相当于高考的「绝密押题卷」
-
常见误区:
若用测试集反复调参,相当于提前偷看考题,成绩会虚高
3.4 完整集 — 数据资源池
-
包含关系:完整集 = 训练集 + 验证集 + 测试集
-
划分比例(示例):
-
常规情况:70%训练 + 15%验证 + 15%测试
-
小数据场景:80%训练 + 10%验证 + 10%测试
下面是一些关于这三种数据集的常见问题:
-
为什么不能混用? :如果测试集数据泄露到训练中,就像考前背答案,实际应用时遇到新题就会失败。
-
数据不够怎么办?:交叉验证法:将完整集分成5份,轮流用4份训练、1份验证(类似「轮换座位考试」),合成数据:用图像翻转、文字替换等方式扩充数据量。
-
特殊场景处理:时间序列数据:需按时间顺序划分(不能用随机拆分)。例如预测股价,必须用2023年前的数据训练,2024年数据测试;
关于微调数据集理论的部分就讲到这,下一期我们讲进入实战环节,我会较大家如何将特定领域内的文献,转换成可供模型微调的数据集。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
更多推荐
所有评论(0)