目录文章目录目录有监督微调SFT指令微调具备泛化能力的指令数据集指令数据集生成方法多轮对话指令数据样本SFT 数据集特征有监督微调SFT事实上LLM 所拥有的海量知识都是源于预训练语料的预训练是 LLM 强大能力的根本来源。但是预训练赋予 LLM 的能力却还需要 SFT 将其激发出来。因为经过预训练的 LLM 好像一个博览群书但又不求甚解的书生对什么问题都可以流畅地接出下文但却无法理解问题本身只会 “死记硬背”。这一现象的本质是因为 LLM 的预训练任务是经典的 CLM从上文预测下一个 token。而 SFT 就是教这个博览群书的学生如何正确的去运用它的知识即 Instruction Alignment指令对齐让 LLM 和人类期望的指令输出进行匹配和对齐。强大的指令理解能力与文本生成能力使 LLM 能够直接、高效、准确地响应用户指令从而真正向通用人工智能的目标逼近。指令微调首先对 PLM 和 LLM 的 SFT 要进行区分和对比Task-specific SFT对于能力有限的 PLM需要针对每一个下游任务单独进行 SFT 以优化模型在该任务上的表现。例如要解决文本分类问题需要对 BERT 进行文本分类的微调要解决实体识别的问题就需要进行实体识别任务的微调。但这些微调并不通用。Multi-task SFT对于能力强大的 LLM往往不再对指定任务进行 SFT而是优化模型的 “通用指令遵循能力”即能够理解并回复用户的指令。所以严格的讲针对 LLM 的 Multi-task SFT 采用的是 “指令微调” 方法数据样本是由用户手动撰写的高质量 “指令-响应对”。如下所示一般 SFT 所使用的指令数据集包括以下 3 个键{instruction:用户输入的指令,input:执行该指令可能需要的补充输入没有则置空,output:用户希望模型在收到该指令后做出的回复}# e.g.{instruction:将下列文本翻译成英文,input:今天天气真好,output:Today is a nice day}具备泛化能力的指令数据集泛化的含义是 LLM 即便在执行未训练过的 instruction 时也能够表现良好。为了使 LLM 能够获得泛化的指令遵循能力需要收集大量多种类型的 “指令-响应对” 来对 LLM 进行 SFT同时也需要相对较大的指令数据量。数据的数量一般来说在单个任务上 500~1000 的训练样本就可以获得不错的微调效果。但是泛化表现良好的 LLM 的数据量一般在数 B 量级的 token。数据的多样性指令数据集的覆盖范围越大越好并且要注意多种类型的指令数据之间的配比。例如OpenAI GPT-3 微调的 InstructGPTChatGPT 前身使用了来自于用户使用其 API 的十种指令指令数据集生成方法事实上ChatGPT 的成功很大一部分来源于其高质量的人工标注数据。但高质量指令数据集的获取成本很高需大量人工设计、标注、筛选的投入。为降低数据成本业界也提出了使用 ChatGPT 或 GPT-4 来生成指令数据集的方法。例如开源指令数据集 Alpaca 就是基于一些种子 Prompt通过 ChatGPT 来生成更多的指令然后再对指令进行回复来构建的。多轮对话指令数据样本多轮对话的含义是 LLM 在每一次对话时能够参考之前的对话历史来给出回复而不会忘记前面的内容。实际上LLM 能否支持多轮对话与预训练没有关系而是与 SFT 有关。如果要使 LLM 支持多轮对话就需要在 SFT 时将指令数据样本构造为多轮对话的格式目前绝大部分 LLM 均使用了多轮对话的指令数据样本来进行 SFT。构造多轮对话指令数据样本一般有 3 种方式将前面所有对话历史作为 input将模型的最后一次回复作为 output直接拟合最后一次回复。缺点是会丢失大量中间信息。将 N 轮对话构造成 N 个样本缺点是造成了大量重复计算。直接要求 LLM 预测每一轮对话的输出是最合理的多轮对话构造方式。SFT 数据集特征一个可参考的微调过程如下所示垂直领域 Post-pretrain 后先进行通用 SFT 训练提升模型对通用的指令理解和语言跟随能力。然后再进行垂直领域 SFT 训练提升模型在垂类领域中的指令理解和语言跟随能力。垂直领域 Post-pretrain无标注数据量要求有大量高质量的行业预训练语料通常是 Billion 级的 tokens1B 约等于 13.3 亿个汉字。领域专业性数据 包含领域内常见的专业术语和词汇以确保模型能够正确理解和使用这些术语。例如在金融领域包括金融教材、公司公告、研究报告等在医疗领域包括临床文献、病历记录、药品说明书等。但实际上对于某些领域或任务高质量、标注好的数据可能非常稀缺限制了后预训练过程的效果。多样性和广泛性 确保语料库涵盖特定领域内的各种场景、主题和任务。这有助于模型更全面地理解领域内的多样性。通用 / 垂直领域 SFT有标注指令集数据量少量高质量人工标注的指令集通常为数千条数据。领域特定性与通用性矛盾后预训练过程旨在使模型适应特定领域或任务的需求但过度的领域特定化可能导致模型在通用任务上表现下降。如何在领域适应性与通用性之间找到平衡点是一个挑战。混合训练提升通用能力仅用单一领域数据进行模型训练模型很容易出现灾难性遗忘现象其他领域的能力出现下降。在领域训练过程中加入通用数据进行混合训练在增强用户垂类场景能力的同时保持其原本的通用能力。若仅需要使用指定垂类场景下的能力可以直接进行训练若需要模型保持通用能力的同时提升垂类场景的能力可以选择数据配比进行混合训练。经验上推荐配比为 1:5即 1 份领域数据5 份通用语料。迁移学习难度将后预训练好的模型迁移到新的任务或领域时可能面临数据分布差异、任务复杂度变化等问题需要设计有效的迁移学习策略来提高模型的适应能力。