
# 微调典型问题
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 "}
       ……
       ```
       
      
   
   
   ![](https://support.huaweicloud.com/bestpractice-pangulm/public_sys-resources/note_3.0-zh-cn.png)
   若目标任务是相对明确的，则在微调数据中，每个任务的Prompt可以保持固定的。注意，这里Prompt保持固定和保证数据多样性，二者并不冲突。
   如果您的数据质量较差，也可以采取一些方法来提升数据质量，比如：
   - **数据过滤：**您可以通过一些简单基础的规则逻辑来过滤异常数据，比如，去空、去重、字符串过滤等。同时，您也可以采用PPL（困惑度），或训练一个二分类模型等方式过滤脏数据。
   
   - **数据转换**：您可以通过一些规则来提升数据的多样性，比如：同义词替换、语法结构修改、标点符号替换等，保证数据的多样性。
   
   - **基于大模型的数据泛化：**您可以通过调用大模型（比如盘古提供的任意一个规格的基础功能模型）来获取目标场景的数据，以此提升数据质量。一个比较常见的方法是，将微调数据以及数据评估标准输入给模型，让模型来评估数据的优劣。
   
   - **人工标注：**如果以上方案均无法满足您的要求，您也可以使用"数据标注"功能，采用人工标注方式来加工数据。
     
 
