更新时间:2025-08-14 GMT+08:00
分享

微调典型问题

  1. 什么情况下需要微调?

    微调的目的是为了提升模型在某个特定的任务或领域的表现。在大多数场景下,通过Prompt工程,通用模型也能给出比较满意的回答。但如果您的场景涉及如下几种情况,则建议采用微调的手段来解决:

    • 目标任务依赖垂域背景知识:通用模型学习到的知识大部分都是来自互联网上的开源数据,如果目标任务本身属于某个领域(比如,金融、政务、法律、医疗、工业等),需要依赖很深的领域背景知识,那么通用模型可能无法满足这些要求,需要在该领域的数据集上进行微调,以增强模型的泛化能力。
    • 回答的风格或格式有特殊要求:虽然通用模型学习了相当可观的基础知识,但如果目标任务要求回答必须符合特定的风格或格式,这将造成和基础知识的数据分布差异。比如,需要模型使用某某银行客服的口吻进行线上问答,此时需要使用符合该行风格和格式的数据集进行微调,以提升模型的遵循度。
    • Prompt工程后,效果仍无法达到预期:当对模型做了大量的Prompt工程,加之目标任务的难度也较高,通用模型的回答可能无法达到预期,此时也建议采用目标任务的数据进行微调,以提升模型回答的准确性。
  2. 什么情况下不建议微调?

    虽然微调可以在一定程度上提升领域能力,但有时候微调也无法解决所有问题。即使您的目标场景依赖垂域背景知识,微调也并非最佳方案,比如:

    • 场景微调的数据量很少或者数据质量很差:微调对数据量和数据质量有很高的要求。
    • 垂域知识问答场景:通用模型本身已经具有在给定的一段或几段段落知识的场景下,来做总结回答的能力。因此,如果您的场景是基于某个领域内的知识问答,那么采用微调的手段确实能从一定程度上提升效果,但如果综合考虑训练的耗时和模型后续的持续迭代,采用搜索+问答的方案则更具性价比。
  3. 数据量很少,可以微调吗?

    不同规格的模型对微调的数据量都有相应要求。

    如果您准备用于微调的数据量很少,无法满足最小的量级要求,那么不建议您直接使用该数据进行微调,否则可能会存在如下问题:

    • 过拟合:当微调数据量很小时,为了能充分学习这些数据的知识,可能会训练较多的轮次,因而模型会过分记住这些数据,导致无法泛化到其他数据上,最终发生过拟合现象。
    • 欠拟合:当微调数据量很小时,模型无法有效地调整模型的参数,同时也很容易受到数据噪声的干扰,从而影响模型的鲁棒性。当目标任务的难度较大时,该问题将愈加显著。

    如果您的可用数据很少,也可以采取一些方法来扩充您的数据,从而满足微调要求,比如:

    • 数据增强:在传统机器学习中,可以通过简单的重复上采样方式来扩充数据,但该方法不适用于大模型微调的场景,这将导致模型的过拟合。因此可以通过一些规则来扩充数据,比如:同义词替换、语法结构修改、标点符号替换等,保证数据的多样性。
    • 基于大模型的数据泛化:您可以通过调用大模型(比如盘古提供的任意一个规格的基础功能模型)来获取目标场景的数据,以此扩充您的数据集。为了能获取更高质量的数据,可以通过CoT(思维链)、self-instruct等方式批量调用大模型,来获取满足您要求的数据。
    • 人工标注:如果以上两种方案均无法满足您的要求,您也可以使用“数据标注”功能,采用人工标注方式来获取数据。
  4. 数据量足够,但质量较差,可以微调吗?

    对于微调而言,数据质量非常重要。一份数据量少但质量高的数据,对于模型效果的提升要远大于一份数据量多但质量低的数据。若微调数据的质量较差,那么可能会导致模型学习到一些错误或者不完整的信息,从而影响模型的准确性和可靠性。因此,不建议您直接使用低质量数据进行微调。

    一份高质量的数据应具备以下几类特征:

    • 数据与目标任务一致:微调数据应该与微调任务的目标和分布保持一致,反映出任务的实际要求。比如,现在需要微调一个情感分类的模型,模型只需要回复“消极”或者“积极”:
      • 情感分类场景-典型低质量数据:数据中存在与目标任务不一致的样本。
        {"context": ["请分析以下内容的情感,只回复积极或者消极\n内容:xxx], "target": "积极"}
        {"context": ["请分析以下内容的情感,只回复积极或者消极\n内容:xxx], "target": "消极"}
        {"context": ["请分析以下内容的情感,只回复积极或者消极\n内容:xxx], "target": "这段内容xxx"}
        {"context": ["请分析以下内容的情感,回复你的看法\n内容:xxx], "target": "这段内容xxx"}
        ……
      • 情感分类场景-较高质量数据:数据指向性明确。
        {"context": ["请分析以下内容的情感,回复积极或者消极\n内容:xxx], "target": "积极"}
        {"context": ["请分析以下内容的情感,回复积极或者消极\n内容:xxx], "target": "消极"}
        ……
    • 数据中无异常样本:微调数据需要加工和校验,滤除其中的噪声,尽可能保证回答中不存在异常数据。比如,空数据、重复、水印、异常字符等。
    • 数据多样性:微调数据需要具有一定的多样性,多样性能增加任务的复杂度和难度,让模型能够处理不同的情况和问题,提升模型泛化性。比如,现在需要微调一个文案创作的模型,模型需要生成各个城市的宣传文案:
      • 文案创作场景-典型低质量数据:数据多样性差。
        {"context": ["请帮我写一份宣传文案"], "target": "北京,xxx"}
        {"context": ["请帮我写一份宣传文案"], "target": "上海,xxx "}
        {"context": ["请帮我写一份宣传文案"], "target": "广州,xxx "}
        {"context": ["请帮我写一份宣传文案"], "target": "深圳,xxx "}
        ……
      • 文案创作场景-较高质量数据:数据有一定多样性。
        {"context": ["请帮我写一份宣传文案介绍北京"], "target": "北京,xxx"}
        {"context": ["现在需要你写一份文案来宣传上海"], "target": "上海,xxx "}
        {"context": ["广州市需要一份推广文案,请开始创作"], "target": "广州,xxx "}
        {"context": ["你是一名导游,现在请向我介绍下深圳这座城市"], "target": "深圳,xxx "}
        ……

    若目标任务是相对明确的,则在微调数据中,每个任务的Prompt可以保持固定的。注意,这里Prompt保持固定和保证数据多样性,二者并不冲突。

    如果您的数据质量较差,也可以采取一些方法来提升数据质量,比如:

    • 数据过滤:您可以通过一些简单基础的规则逻辑来过滤异常数据,比如,去空、去重、字符串过滤等。同时,您也可以采用PPL(困惑度),或训练一个二分类模型等方式过滤脏数据。
    • 数据转换:您可以通过一些规则来提升数据的多样性,比如:同义词替换、语法结构修改、标点符号替换等,保证数据的多样性。
    • 基于大模型的数据泛化:您可以通过调用大模型(比如盘古提供的任意一个规格的基础功能模型)来获取目标场景的数据,以此提升数据质量。一个比较常见的方法是,将微调数据以及数据评估标准输入给模型,让模型来评估数据的优劣。
    • 人工标注:如果以上方案均无法满足您的要求,您也可以使用“数据标注”功能,采用人工标注方式来加工数据。

相关文档