大模型微调全流程
建议在微调过程中严格按照以上流程执行,避免跳步,否则可能导致无效劳动。比如,如果没有充分构建数据集,最终发现微调模型效果不佳是数据集质量的问题,那么前期的努力将付诸东流,事倍功半。
数据集收集与整理
根据数据集的可获得性,数据集可以分为两种类型:公开已有的数据集和难以获取的数据集。
如何获取公开已有的数据集?
获取公开已有的数据集的最简单方式是通过相关开源平台进行搜索和下载。例如:GitHub、Hugging Face、Kaggle、魔搭等平台都提供了大量的开放数据集。此外,还可以尝试通过爬虫技术从一些网站获取数据,比如贴吧、知乎、行业垂直网站等。使用爬虫抓取数据通常需要一定的技术支持和遵循相关的法律法规。
如果所需数据全网没有或难以获得怎么办?
当现有的公开数据集无法满足需求时,另一个选择是自行构建数据集。但是,手动构建几百到上千条数据集往往既繁琐又耗时。那么,如何能够高效地构建数据集呢?以下介绍两种常见的快速构建数据集的思路:
1. 借助大模型平台的“数据增强”功能
目前很多大模型平台提供了数据增强的功能,这可以有效地帮助我们扩展数据集。例如,质谱开放平台、讯飞开放平台、火山开放平台等,都可以通过这些平台的增强功能,利用原始数据快速生成更多样本。具体操作是:首先,手动准备少量(如 50 条)数据,并上传到这些平台。平台会通过数据增强技术对数据进行扩充,快速实现数据集的扩大。
2. 利用大模型生成数据
另一种高效的方式是借助大模型生成数据。首先,准备少量(例如几十条)数据并作为示例输入给大模型。大模型可以根据这些示例生成相似的数据内容。为了确保生成数据的质量,建议在第一轮生成时不要一次生成过多,建议先生成 20 条数据并仔细审查,找出大模型可能犯的常见错误。然后,将这些错误示例反馈给大模型,改进生成效果。
示例Prompt: 参照以下示例,输出20个类似的“近期运气”问题。请注意,语言要生活化、不要过于夸张,避免使用诸如“在活动中”、“在比赛中”等定语或状语,语句尽量简洁,避免多余修饰。示例: 我这个季度顺利吗? 我这个季度会发财吗? 最近有哪些事情在等着我? 最近会发生什么事情? 近期我能否被幸运之神垂青?
数据清洗与微调数据集构建
原始数据集通常并不符合模型训练的要求,因此需要对其进行清理和处理,使其符合模型学习的格式。在多数情况下,微调数据集通常采用 AIpaca 格式进行构建。
AIpaca 格式简介
AIpaca 格式具有简单的结构,特别适用于文本生成、翻译、总结等任务,尤其是单轮任务导向的指令微调。以下是其主要组成部分的详细解释:
- instruction: 任务指令,类似于用户的输入(必填项),明确告诉模型要做什么。
- input: 任务所需的输入内容。通常在任务开放式或不需要明确输入时,可以为空字符串。
- output: 给定指令和输入的情况下,模型需要生成的期望输出,即参考答案(必填项)。
- system: 可以视作模型的预先 Prompt,用于设置模型的行为,通常是对模型的一些初始提示(选填项)。
- history: 历史对话信息,可以帮助模型建立上下文关系。在多轮任务中,模型会根据历史对话生成回答(选填项)。
例如,AIpaca 数据格式如下:
[ { "instruction": "用‘梦想’、‘坚持’和‘成功’这三个词组成一个句子。", "input": "", "output": "只有坚持追逐梦想,才能最终取得成功。" }, { "instruction": "对《三国演义》做一个简短的介绍。", "input": "", "output": "《三国演义》是中国古典四大名著之一,描写了从东汉末年到西晋初年近百年的历史,讲述了东汉末年的群雄割据混战及魏、蜀、吴三国之间的政治和军事斗争,塑造了一批英雄人物。" } ]
数据集构建方法
为了制作微调数据集,通常我们需要将数据转换为符合 AIpaca 格式的 JSON 文件。以下是常见的两种数据集制作方法:
- 手动构建数据集:整理好所需的数据并按照 AIpaca 格式构建,可以通过编写 Python 代码手动构建数据集。这种方法适用于简单的场景和小规模数据集。
- 利用大模型自动化构建:通过调用大模型接口来自动生成数据集。这种方法适用于大规模数据集,尤其是当任务的指令和输出模式比较固定时。
完整数据集格式
完整的 AIpaca 格式如下所示,包含了任务的指令、输入、输出、系统提示词及历史对话信息:
[ { "instruction": "人类指令(必填)", "input": "人类输入(选填)", "output": "模型回答(必填)", "system": "系统提示词(选填)", "history": [ ["第一轮指令(选填)", "第一轮回答(选填)"], ["第二轮指令(选填)", "第二轮回答(选填)"] ] } ]
该格式帮助模型学习从指令到输出的映射关系,类似于给模型提供了练习题,instruction + input = 问题,output = 答案。
底座模型选型
- 模型类型选择:根据任务需求选择基础模型,如 GPT、LLaMA、或 BERT 等。
- 规模和参数:决定模型大小(如 7B、13B 或 65B 参数规模),考虑计算资源、训练时间和推理速度。
- 开源 vs 商业模型:分析是否需要选择开源模型(如 LLaMA、Falcon)或商业闭源模型(如 OpenAI GPT 系列)。
- 用测试数据,在选择的多个模型中,做对比测试,找出最合适的。
模型参数说明
灵魂五问
一、什么是微调?
微调 (Fine-tuning) 是指在一个已经预训练好的模型基础上,使用新的数据集对其进一步训练的过程。这些预训练模型通常已经在大型数据集上学习到了丰富的特征和知识,具备一定的通用能力。微调的核心目标是将这些通用知识迁移到一个新的、更具体的任务或领域,使模型能够更好地解决特定问题。
二、为什么要微调?
1. 节省计算资源
从头开始训练一个大型模型需要大量的计算资源和时间,成本非常高。微调利用预训练模型作为起点,只需对新数据集进行较少的训练,就能取得良好效果,大大降低了计算成本和时间。
2. 提升模型性能
预训练模型虽然具有通用能力,但在特定任务上可能表现不佳。微调通过特定领域数据对模型参数进行调整,使其更加擅长处理目标任务,从而提高准确率和效率。
3. 适应新领域
通用预训练模型可能无法很好地理解特定领域的数据特征,而微调可以帮助模型适配新领域,使其更好地处理特定任务中的数据。
三、微调得到的是什么?
微调得到的是一个经过优化和调整后的模型。这个模型基于原始预训练模型的结构,但他的参数已经更新,能够更好地适应新任务或领域需求。
举例说明:
假设有一个预训练的图像分类模型,可以识别常见物体。如果需要识别特定类型的花朵,可以用包含各种花朵图片和标签的新数据集对模型进行微调。经过微调后,模型的参数会更新,从而更准确地识别这些花朵类型。
四、如何把微调好的模型进行生产使用?
1. 部署到生产环境
将模型集成到网站、移动应用或其他系统中,可以使用模型服务器或云服务进行部署,如 TensorFlow Serving、TorchServe 或 Hugging Face 提供的 API。
2. 推理任务
将微调后的模型用于推理,比如给定输入进行预测或分析结果。
3. 持续更新与优化
根据新的需求或反馈,进一步微调模型或添加更多数据进行训练,保持模型性能最佳状态。
五、微调方法怎么选?
- LoRA:低秩适配,用于减少微调参数规模,适合资源受限环境。
- QLoRA:基于 LoRA 的量化优化,更高效地处理大模型微调。
- P-tuning:提示学习技术,适合小样本任务或少量标注数据。