Ai之大模型-数据集-理论6.1

发布时间:2025-03-28 09:54:58编辑:111阅读(75)

    数据集对于大模型的作用

    1. 训练与知识获取的基础

    数据驱动学习:大模型通过海量数据学习语言模式、世界知识、逻辑推理等能力。数据是模型“知识”的唯一来源。

    参数匹配:大模型的参数量通常在数十亿到万亿级别,需要足够大的数据集才能充分训练参数,避免过拟合。

    2. 决定模型的能力上限

    多样性:数据覆盖的领域(科技、文学、医学等)、语言类型(多语言数据)、任务类型(问答、翻译、摘要等)

    直接影响模型的泛化能力。

    数据质量:清洗后的高质量数据(如去重、去噪、去偏见)能提升模型输出的准确性和可靠性。

    长尾问题:数据中低频事件(如罕见语言、小众知识)的覆盖度,影响模型在细分场景的表现。

    3. 支持模型泛化能力

    模式识别:通过大量数据,模型学习通用的语言结构和语义规律(如语法规则、上下文关联),而非死记硬背。

    零样本/小样本学习:大模型从数据中提炼的通用知识,使其能在未明确训练的任务上表现良好

    (如用英语问答训练数据支持中文问答)。

    4. 影响模型偏见与安全性

    数据偏见:数据集中的社会偏见、错误信息或有害内容会被模型继承并放大(如性别、种族偏见)。

    伦理对齐:通过数据过滤、标注或强化学习,可调整模型输出与人类价值观的契合度。

    5. 多任务与多模态能力

    跨任务统一训练:多任务数据集(如文本生成、分类、推理混合数据)支持模型的多功能整合。

    多模态扩展:结合文本、图像、音频的跨模态数据(如CLIP、DALL·E),使模型具备跨模态理解能力。

    6. 持续学习与迭代

    动态更新:新增数据(如新闻、科学进展)可使模型适应变化的世界知识。

    领域适应:通过微调特定领域数据(如法律、医疗),模型可专业化。

    7. 评估与基准测试

    验证数据:独立测试集(如GLUE、SuperGLUE)用于量化模型的性能。

    问题暴露:通过对抗性数据集(如对抗样本、陷阱问题)检验模型鲁棒性。

    8. 开源与社区协作

    共享数据集(如Wikipedia、Common Crawl、The Pile)推动研究透明度和模型复现。

    数据标注:众包或专家标注的数据(如SQuAD问答数据集)支持监督学习。


    如何把你的Deepseek-R1微调为某个领域的专家?

    如何拥有一个无限制、可联网、带本地知识库的私人DeepSeek?

    常见的问题有这么几类:

    1 微调效果不好?跟数据集有关系吗?

    2 数据集的格式是固定的吗?要弄成什么样子?

    3 数据集还分很多种类?测试集、训练集、验证集的区别是啥?

    4 想要微调特定领域的模型?去哪获取这个领域公开的数据集?

    5 手动整理数据集太累了,有没有什么快速标注数据集的方法?

    6 数据集可以用AI生成吗?怎么把领域的文献(word,ppt,文章)转成可供模型微调的数据集?

    以上这些数据集的问题,大概的学习路径如下:

    1-1 了解常见的微调任务类型,根据特定任务选择适合的数据集;

    2 -2 了解常见的数据集格式,数据集的类型;

    3-3 学会怎么找,一些推荐的获取公开数据集的途径;

    4-4 学会这么标,基于标注工具半自动标注数据集;

    5-5 学会怎么做,将特定领域的文献转换为目标格式的数据集;

    6-6 基于AI全自动生成模型蒸馏数据集;


    一、微调数据集的常见分类

    为了在不同的业务场景下解决不同的问题,可能采用的微调任务类型是不一样的,那所用的数据集格式肯定也会有所差别,

    对常见微调任务的一个分类图:

    image.png

    从最上层的预训练模型开始,先划分出是否为多模态(例如让模型具备对图片,语音,视频的理解和生成能力)微调,

    还是纯文本微调(仅让模型具备生成文字的能力)。

    在文本微调中,监督微调是目前应用最广泛也是最常用的微调技术,当然普通人想在特定行业里去微调自己的大模型,最常用的也是监督微调,所以监督微调的数据集格式是后续重点学习的内容。

    然后其他微调技术还包括无监督、自监督微调、强化学习微调等等。


    预训练

    从零开始训练一个模型,一般这个流程叫做预训练,这个过程的目的就是让模型掌握语言的通用规律,以及基本的语言理解能力。

    市面上主流的大模型,比如Deepseek,Chatgpt等等,都属于“自回归模型”,而“自回归模型”的本质就是:用过去的自己来预测未来的自己。

    大模型输出文本的时候是按照Token来输出的。Token简单理解就是把句子拆成最小语义单元(如中文拆字/词,英文拆词或子词)。当你给定模型一个问题时,模型先会预测出第一个Token,然后根据问题和第一个Token再去预测第二个Token,直到整句话输出完成,比如下面的例子:

    image.png

    回答被拆分出了4个Token,每个Token都是根据前面的问题+已经输出的Token预测出来的。那怎么能让模型把后面输出的每个Token预测的更准确呢?这就要靠预训练数据集了,在预训练的数据集中,这些关键字出现子在一起的次数越多,那模型输出的概率越大。所以数据集越丰富,模型预测Token输出的准确率就越高,最终的输出效果也就更好。

    所以在预训练的过程中,一般用海量非结构化文本(比如书籍,网页,对话),通过预测下一个词来训练模型,这也就意味着预训练的数据集格式是没有明确要求的。


    但是在特定领域的微调上,就不能用非结构化文本了,可以这样理解:

    预训练阶段:就像婴儿学说话,听到的是各种声音(非结构化),不管是什么,直接让他多听,慢慢就能学会语言规律;

    指令微调阶段:就像教小孩做事【听到问题要回答】,需要明确告诉他这是什么问题,正确答案是什么,如果继续用没规律(非结构化)对话,他对你要让他学的事情就不会印象太深刻;

    而预训练的过程,我们可以理解成一个无需人工监督,自己学习和锻炼能力的过程,对应的,想要让模型具备特定的能力,就要用到监督微调了。


    监督微调

    监督微调(Supervise fine-tuning,SFT),顾名思义就是需要人去监督微调的过程。

    怎么“监督”呢?就是通过标注过的数据直接教模型做事,适合有明确目标的任务。最简单的,我们直接告诉模型输入对应的输出是什么就可以了。

    比如:想训练一个中英翻译模型,把英文翻译为中文就是一个非常明确的需求场景,所以在数据集里只需要有输入,输出

    就可以了(示例):

    {"input":"Hello", "output":"你好"}


    指令微调

    那想让模型具备多种语言理解的能力呢,这时候只靠两个字段就不够了,因为在Input是同样一个词语的时候。

    想让模型完成不同任务,output可能是不一样的,这时候我们就要多引入一个指令的概念,比如这个数据集:

    [{"instruction":"将这句英文翻译成法语", "input":"Hello, how are you?", "output":"Comment ça va?"}]

    告诉模型明确的指令:将英文翻译为法语,再将Input(英文)、Output(法语)告诉模型,模型就能准确理解要做什么了,这

    就是指令微调。

    指令微调常见的业务场景:

    智能教育:实现作业辅导、规划个性化学习路径、辅助语言学习。

    智能办公:可处理文档、邮件,进行日程管理。

    智能翻译:应用于专业领域翻译、特定场景翻译及多语言交互。

    数据分析:让模型根据分析需求指令,对数据进行准确解读和洞察。

    指令微调典型开源数据集(包含指令、输入、输出字段):

    image.png

    Alpaca 数据集:由斯坦福大学创建,通过微调模型生成,包含约 5.2 万个指令跟随数据样本。涵盖多种任务,如常识问答、文本生成等,助力模型在指令理解和生成方面优化.

    指令微调的数据集制作相对还是比较简单的,因为要执行的任务一般很明确,往往也有比较明确的答案了,比如想要微调模型在翻译方面的能力,那就用现成的翻译 API 来构造数据集;想要微调模型在数学解题方面的能力,其实也有现成的题目 + 答案可以用来构造。所以指令微调场景的数据集一般不太难做,主要进行一些格式转换的工作即可。


    对话微调

    另外一种常见的微调任务就是对话微调。对话微调(Dialogue Tuning) 是通过多轮对话数据训练模型生成连贯、符合语境的回复,强调对话历史的上下文理解和回复的自然流畅性。其核心在于教会模型处理对话中的逻辑关系、情感表达和角色身份,对话微调的数据集通常包含对话的上下文以及对应的回复。

    [

      {

        "dialogue": [

          {"role": "user", "content": "今天天气怎么样?"},

          {"role": "assistant", "content": "北京今日多云转晴,气温22℃,适合户外活动。"},

          {"role": "user", "content": "那适合去长城吗?"},

          {"role": "assistant", "content": "长城景区海拔较高,建议携带外套,注意防晒。"}

        ]

      },

    ]]

    对话微调数据集的核心特点:包含多轮对话上下文、标注角色身份,注重回复连贯性与逻辑性。通过这样的数据,模型可以学习到在不同对话场景下如何生成合适的回复,从而提高对话的连贯性和相关性。

    对话微调常见的业务场景:

    智能客服系统:提升客服机器人在处理用户咨询时的对话能力,能够更准确地理解用户意图并提供解决方案。

    聊天机器人:让聊天机器人更自然地与用户进行多轮对话,提高用户体验。

    语音助手:优化语音助手在语音交互中的对话表现,使其更符合用户的期望。

    对话微调典型开源数据集:

    image.png

    一个用于训练对话模型的多语言问答数据集,其内容结构和风格符合 ShareGPT 对话格式,数据集中的每个样本为一个对话轮次,包含人类提问和模型回答,数据覆盖多语言(英语、西班牙语、中文、俄语等)和多样化领域。对话微调的数据集制作也不困难,一般可从在线聊天平台、客服对话记录、或者一些公开的访谈记录来获取数据,也能通过众包方式让标注人员模拟对话生成.。


    领域适配

    接下来,可能是最近见过最多的大家对于微调的一类诉求和场景,基于微调让模型对特定领域进行适配。预训练的模型虽然基于海量数据具备了通用的文字理解和生成能力,但是由于预训练的数据集在特定领域可能并不会覆盖的那么全面,这些模型在某些特定领域或任务上的表现可能并不理想,这时候就需要进行领域适配微调。领域适配(Domain Adaptation)是指将模型在特定领域的数据上进行微调,使其更好地适应特定领域的任务和需求。怎么进行领域适配呢?我们需要在特定领域的数据集上对模型进行训练,这些数据集通常包含该领域的专业术语、特定格式和相关任务的标注。例如,在医疗领域,数据集可能包含病历文本、医学术语以及对应的诊断结果等信息。

    [

      {

        "instruction": "分析患者的症状描述",

        "input": "55岁男性,持续性胸骨后疼痛3小时,含服硝酸甘油无效",

        "output": "可能诊断:急性心肌梗死(STEMI),建议立即行心电图检查及心肌酶谱检测",

        "domain": "医疗"

      },

      {

        "instruction": "解释法律条款",

        "input": "《民法典》第1032条",

        "output": "该条款规定自然人享有隐私权,任何组织或个人不得以刺探、侵扰、泄露、公开等方式侵害他人隐私权",

        "domain": "法律"

      },

    ]

    领域适配数据集的核心特点:领域术语标注(如医学本体库、法律术语库)、复杂规则建模(如药物相互作用、合同条款逻辑)、场景化数据增强(如模拟问诊对话、合同审查流程);

    领域适配典型的业务场景:

    医疗领域适配:用于病历分析、疾病诊断辅助、医疗文献检索等。

    法律领域适配:辅助法律文件分析、案例检索、合同审查等。

    金融领域适配:用于风险评估、市场分析报告生成、金融产品推荐等。

    领域适配典型开源数据集:

    image.png

    基于 PubMed 文献的医学问答数据集,包含医学研究相关问题,适合医疗信息抽取与领域适配任务。

    在领域适配的任务上,数据集的准备相对就困难一点了,首先我们可以尝试去一些开源数据集平台(如 HuggingFace) 上检索是否有复合我们需求的数据集,如果没有找到合适的,或者开源数据集无法完全满足我们的需求的时候,可能就得靠我们自己的一些领域文献来构造数据集。

    将领域文献构造成数据集,一般就两个途径:

    第一个就是靠纯人工整理,或者与领域专家合作标注数据(可以借助一些三方的标注平台),将数据处理为模型可接受的格式,可能涉及术语标准化等工作。

    第二个就是借助 AI 辅助生成,注意这里 AI 起到的作用只是辅助和提效,并不能完全自动化,就算大家真的能够借助某些工具全自动将领域文献转化成数据集,我也不建议大家直接用,在不经过人工二次确认的情况下,质量肯定难以保障,最终模型微调的效果也不会很好。如何借助一个神器,低成本的将领域内的文献批量转成可供模型微调的数据集。


    文本分类

    还有一种很常见的监督微调任务,就是文本分类(Text Classification),它是自然语言处理中的一个经典任务,目的就是通过标注数据训练模型对文本进行类别预测或标签分配。这类任务需要模型理解文本语义与类别特征的关系,适用于需要结构化输出的场景。怎么进行文本分类呢?需要使用标注了类别的文本数据集对模型进行训练,让模型学习文本特征与类别的映射关系。文本分类数据集的关键在于构建符合业务需求的分类标签,例如从评论中区分出好评和差评,从新闻中区分出客集新闻和金融新闻:

    [

      {"text": "这款手机续航长达48小时,拍照效果惊艳", "label": "positive"},

      {"text": "系统频繁卡顿,客服响应速度慢", "label": "negative"},

      {"text": "量子计算机突破新型纠错码技术", "label": "science_news"},

      {"text": "央行宣布下调存款准备金率0.5个百分点", "label": "finance_news"}

    ]

    文本分类微调的典型业务场景:

    情感分析:商品评论情感极性识别(正面/负面/中性)

    内容审核:检测违规内容(涉政/暴力/广告)

    新闻分类:自动归类至财经/科技/体育等栏目

    意图识别:用户query分类(咨询/投诉/比价)

    文本分类典型开源数据集:

    image.png

    imdb 大型电影评论数据集,包含用户评论到电影评分的映射关系,适用于对评论进行积极、负面分类的微调任务。

    文本分类任务的数据集,一般可以借助一些专业的第三方标注平台来做:这类平台往往配备了丰富的标注工具,能满足不同文本分类需求。例如在新闻文本分类中,标注员可利用平台的快速标注功能,将新闻精准划分为政治、经济、娱乐等类别。在后面的实战章节,如何通过工具高效的标注文本分类数据集。


    模型推理微调

    对于推理模型的微调其实是监督微调的一种特殊形式,通过在数据集中显式标注思维链(Chain of Thought, COT),训练模型不仅给出最终答案,还能生成逻辑推导过程。其核心在于让模型学会「分步思考」,适用于需要复杂逻辑推理的场景(如数学证明、代码调试)。

    在推理模型(比如 DeepSeek-R1)的回答中,<think></think> 中包含的这部分其实就是模型的推理过程,它其实是根后面的答案一起作为一个回答输出的,只不过在大部分的 C 端应用中对这部分提取出来做了特殊展示。

    image.png

    随着最近推理模型 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

    image.png

    约 86 万道中国高中数学练习题、以及美国和国际数学奥林匹克竞赛的题目,每个问题的解答都采用了思维链(CoT)的格式。

    还有就是靠带推理能力的大模型蒸馏获取,像 OPEN AI 的 O1、O3 这种模型,为了避免大家窃取思考过程,思维链都是直接隐藏掉的,但是我们的国货之光 DeepDeek 是完全开源且开放思考过程的,目前很多带思维链的开源数据集都是从 DeepSeek-R1 蒸馏而来。或者也可以引导不具备推理能力的模型来产出思考过程。


    知识蒸馏

    提到蒸馏,这里也稍微讲一下,严格来说,蒸馏技术并不属于微调的范畴,但是实际上是可以通过微调来达到蒸馏的效果,所以这里我把它当作是一种特殊的微调(并不严谨)。

    知识蒸馏(Knowledge Distillation)是将复杂模型(教师模型)的知识迁移到轻量级模型(学生模型)的技术,通过优化学生模型使其输出接近教师模型的“软标签”,从而在保持性能的同时降低推理成本。

    简单来说,如果大模型已经完全可以满足你在特定任务上的诉求,但是部署成本又太高了,你完全可以选择一个小模型,然后从大模型里把你任务里需要用到的领域知识提取出来,构造成数据集,再去微调小模型,从而让这个小模型也能在你的特定领域完成任务,这就可以理解为一个模型蒸馏的过程。模型蒸馏的数据集构造应该是最简单的,在你完全信任大模型输出的条件下,你可以直接将大模型产出的问答对作为数据集,最后在进行人工的质量评估和验证即可。

    模型蒸馏典型开源数据集:

    https://huggingface.co/datasets/Congliu/Chinese-DeepSeek-R1-Distill-data-110k

    image.png

    中文基于满血 DeepSeek-R1 蒸馏数据集,数据集中不仅包含 math 数据,还包括大量的通用类型数据,总数量为 110K.



    其他微调技术(了解)以上几种监督微调的方式应该是最经常用到几个场景了,但是为了更好的理解微调技术,也要了解一下其他的一些微调手段。

    强化学习微调

    强化学习微调(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

    image.png

    人类偏好排序数据集,用于强化学习微调、训练奖励模型。


    多模态微调

    能不能在训练数据集里引入图片,这里也简单提一下,如果想要让模型具备更好的图片、音频、视频等非纯文本的理解能力,那就属于多模态微调的范畴了。

    多模态微调(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

    image.png

    包含 50 个大规模视觉语言训练数据集(仅训练集),用于多任务视觉语言模型的微调。数据集结构包含 images(图片列表)和texts(对话文本),其中对话以用户提问、模型回答的形式呈现,覆盖问答、选择等任务(如TQA数据集示例)。


    微调数据集的常用格式

    看了这么多的微调任务场景,大家可能会有点乱了,怎么这么多格式,微调的数据集到底有格式要求吗?到实际的微调代码里,能够自动适配这么多的格式吗?

    首先,对于模型微调的数据集,是没有明确的格式要求的,我们一般在代码中抹除各种微调数据集格式的差异,我们还拿之前微调实战教程中的代码来举例,回顾一下之前我们是怎么处理数据集的。

    来看一段代码:

    train_prompt_style = """
    以下是描述任务的指令,以及提供进一步上下文的输入。
    请写出一个适当完成请求的回答。
    在回答之前,请仔细思考,并创建一个逻辑连贯的思考过程,以确保回答准确无误。
    ### 指令:
    你是一位精通八字算命、紫微斗数、风水、易经卦象、塔罗牌占卜、星象、面相手相和运势预测等方面的算命大师。
    请回答以下算命问题。
    ### 问题:
    {}
    ### 回答:
    <思考>
    {}
    </思考>
    {}"""

    这段代码其实就是在定义一个用于格式化微调数据集的模版,其中的三个 "{}" 其实就是对应的我们要传入的三个变量,分别对应原始问题、思考过程、最终答案三个部分。然后我们再来看下面这段代码,也很好理解,就是提取出我们原始数据集里面的三个变量:

    Question:对应问题

    Complex_COT:对应思考过程

    Response:对应最终回答结果

    数据集格式地址:https://huggingface.co/datasets/Conard/fortune-telling

    image.png

    所以其实最后喂给模型的还是一段格式化好的字符串,并非结构化的数据。那也就是说,数据集我们随便用什么格式都可以吗?当然也不是,模型微调已经不是什么新技术了,只是最近由于 DeepSeek 的横空出世,导致逐步开始被各领域更广泛的应用,在这之前,哪些数据集格式效果好,哪些容易整理,已经总结了很多经验,比如目前广泛被大家使用的有两种数据集格式,Alpaca 和 ShareGPT。


    Alpaca

    Alpaca 也就是我们上面提到的指令微调里的一个数据集案例。

    Alpaca 最初是斯坦福大学于 2023 年发布的 52k 条指令微调数据集,由 OpenAI 的 text-davinci-003 模型生成,旨在通过指令跟随(Instruction Following)任务优化大语言模型(如 LLaMA)的性能。

    后续随着社区的发展,Alpaca 的 JSON 结构逐渐被抽象为一种 通用数据格式,并且扩展了一些字段如 system(系统提示)和 history(历史对话),支持多轮交互任务。适用于多种微调场景,很多主流框架(如 LLaMA-Factory、DeepSpeed)都可以直接加载 Alpaca 格式的数据集。

    这里参考 LLaMA-Factory 给出的几种在不同微调场景中 Alpaca 格式的数据案例:

    Alpaca 格式的指令微调数据集

    格式要求

    {

            "instruction": "给出一条指令(必填)",

            "input": "问题输入(选填)",

            "output": "模型回答(必填)",

            "system": "系统提示词(选填)",

            "history":[

                ["第一轮指令(选填)", "第一轮回答(选填)"],

                ["第二轮指令(选填)", "第二轮回答(选填)"]

            ]

        }

    实际案例

    {

            "instruction": "将这句英文翻译成中文",

            "input": "Hello, how are you?",

            "output": "你好,你好吗?",

            "system": "翻译任务,请确保翻译准确、自然",

            "history": [

                ["将这句英文翻译成中文", "你好,你好吗?"],

                ["将这句中文翻译成英文", "Hello, how are you?"]

            ]

        }


    Alpaca 格式的领域适配微调数据集

    格式要求

    {

            "instruction": "给出一条指令(必填)",

            "input": "问题输入(选填)",

            "output": "模型回答(必填)",

            "system": "系统提示词(选填)",

            "domain":"领域标签(选填)",

        }

    实际案例

    {

            "instruction": "分析以下症状可能的疾病",

            "input": "患者持续发热3天,伴有咳嗽和胸痛",

            "output": "可能诊断为肺炎,建议进行胸部X光检查",

            "system": "请根据症状提供可能的疾病诊断",

            "domain": "医疗",

        }


    Alpaca 格式的偏好数据集:

    格式要求

    {

            "instruction": "给出一条指令(必填)",

            "input": "问题输入(选填)",

            "chosen": "优质回答(必填)",

            "rejected": "劣质回答(必填)",

        }

    实际案例

    {

            "instruction": "根据以下描述生成一个创意广告文案",

            "input": "一款适合年轻人的运动手表",

            "chosen": "年轻人的运动伙伴,随时随地记录你的精彩瞬间!",

            "rejected": "一款手表,可以看时间。",

        }


    ShareGPT

    ShareGPT 最早是一种数据格式标准,由社区设计用于规范多轮对话和工具调用场景的模型训练数据存储方式。其核心目标是通过结构化字段(如 conversations 列表、tools 工具描述)支持复杂交互(如用户提问 → 工具调用 → 结果整合)。

    随着格式的普及,社区基于 ShareGPT 格式构建了多个具体的数据集,这类数据集被称为 "ShareGPT 格式数据集"。ShareGPT 格式的核心特征如下:

    角色标签包括 human(用户)、gpt(模型)、function_call(工具调用指令)、observation(工具返回结果)等,覆盖完整工具调用流程。

    消息顺序规则:human 或 observation 必须出现在奇数位置,gpt 或 function_call 在偶数位置,确保逻辑连贯性。

    通过 tools 字段定义外部工具(如天气查询 API、计算函数),使模型能动态调用外部资源生成响应。

    通过 conversations 列表完整记录对话历史,适用于需上下文理解的场景(如医疗问诊中的连续追问)。

    ShareGPT 格式的指令微调数据集:

    {

      "conversations": [

        {"role": "user", "content": "如何用Python计算列表的平均值?"},

        {"role": "assistant", "content": "可以使用sum和len函数..."},

        {"role": "user", "content": "如果列表中有空值怎么办?"},

        {"role": "assistant", "content": "需要先过滤空值,例如..."}

      ]

    }

    这里的 “function call” 就像是模型使用的“工具指令”。比如你想知道今天的天气,模型就会调用一个“天气查询工具”,输入地点和日期,工具返回结果后,模型再告诉你答案。这个过程让模型能借助外部工具完成复杂任务,比如查询实时数据或进行计算,从而变得更强大、更实用,也更像人类解决问题的方式。它的能力非常强大,相当于给 AI 嫁接起了连通外部的桥梁,这里我们不做过多讲解,如果大家感兴趣,我会在后续的文章里详细讲解。


    ShareGPT 格式的偏好数据集:

    {

      "conversations": [

        {"role": "user", "content": "给我推荐一本小说。"},

        {"role": "assistant", "content": "我推荐<神雕侠侣>"},

        {"role": "user", "content": "给我推荐一本好看的小说。"},

        {"role": "assistant", "content": "我推荐<神雕侠侣>这是一本经典的武侠小说。"}

      ]

       "chosen": {"role": "assistant", "content": "我推荐<神雕侠侣>。"},

       "rejected": {"role": "assistant", "content": "我推荐<神雕侠侣>这是一本经典的武侠小说。"}

    }


    ShareGPT 格式的多模态数据集

    {

      "conversations": [

        {"role": "user", "content": "<image>判断这张图片中的动物是什么。"},

        {"role": "assistant", "content": "这是一只可爱的猫咪,它正在地上玩耍"},

      ]

       "images": ["https://py3study.com/logo.jpg"],

    }


    特殊的 ShareGPT 格式数据集:OpenAI 格式

    {

      "conversations": [

      {"role": "assistant", "content": "你是一个数学辅导老师"},

      {"role": "user", "content": "帮我解决这个数学问题:3+2=?"},

     {"role": "assistant", "content": "3+2=5"},]

    }

    OpenAI 格式可以视为 ShareGPT 格式的一种特殊情况,主要关注用户、助手和系统之间的简单对话,其特点是使用 messages 列表来组织对话,每条消息包含 role(角色)和 content(内容)字段。角色可以是“system”(系统)、“user”(用户)或“assistant”(助手),分别表示系统提示、用户输入和模型回答。在实际应用中,OpenAI 格式的数据集可以兼容支持 ShareGPT 格式的系统,但 ShareGPT 格式提供了更丰富的对话结构和功能支持。这个也是硅基流动微调数据集要求的格式。


    格式对比

    下面是两种数据集格式的详细对比,可以根据自己的实际需求场景选择合适的格式:

    image.png


    微调数据集的不同用途

    还有一点需要大家明确,也是问的比较多的,其实我们准备的数据集,并不都是用于模型训练使用的,一般分为训练集、测试集、验证集,我们还用考试来举例:训练集教会模型「基础知识」,验证集优化「学习方法」,测试集检验「实战能力」,三者如同「预习-复习-考试」的学习闭环,缺一不可:

    训练集 = 日常练习题(通过大量练习掌握知识点)

    验证集 = 模拟考试卷(检测阶段学习成果,调整学习方法)

    测试集 = 最终期末考试(检验真实学习能力)

    完整集 = 所有可用的习题库(包含前三者的原始数据全集)


    训练集 — 老师教知识

    作用:模型学习规律的核心资料示例:

    教AI识别猫时,给它看10,000张标注好的猫图(包含不同品种、姿势)

    关键点:需覆盖各种可能性(白天/夜晚、近景/远景)相当于学生的课本+习题册


    验证集 — 学习效果检查

    作用:防止死记硬背,测试举一反三能力

    典型场景:

    训练中途用2,000张新猫图验证,发现模型错把「无毛猫」认成狗,于是调整训练策略。

    核心价值:选择最佳模型版本(如不同神经网络结构)调整超参数(相当于改变学习计划表)


    测试集 — 最终能力考核

    作用:评估模型真实水平

    必须遵守:绝对隔离原则:测试集的5,000张猫图在训练中从未出现过

    相当于高考的「绝密押题卷」

    常见误区:

    若用测试集反复调参,相当于提前偷看考题,成绩会虚高


    完整集 — 数据资源池

    包含关系:完整集 = 训练集 + 验证集 + 测试集

    划分比例(示例):

    常规情况:70%训练 + 15%验证 + 15%测试

    小数据场景:80%训练 + 10%验证 + 10%测试

    下面是一些关于这三种数据集的常见问题:

    为什么不能混用? :如果测试集数据泄露到训练中,就像考前背答案,实际应用时遇到新题就会失败。

    数据不够怎么办?:交叉验证法:将完整集分成5份,轮流用4份训练、1份验证(类似「轮换座位考试」),合成数据:用图像翻转、文字替换等方式扩充数据量。

    特殊场景处理:时间序列数据:需按时间顺序划分(不能用随机拆分)。例如预测股价,必须用2023年前的数据训练,2024年数据测试;


关键字