大语言模型的指令微调(第一节)
·
有监督微调,又叫指令微调。
指的是在预训练好的大语言模型下,通过有标注的自然语言形式的数据,对预训练模型的参数进行微调。
为什么预训练模型要进行有监督微调
大语言模型的预训练目标仅仅只是对下一个目标词的预测,并不能很好的理解和响应人类的指令,还需要使用指令数据对模型进行微调
指令微调的训练过程
- 针对某一项具体的任务定义相应的自然语言形式的指令或者提示
- 将训练数据打包成包含指令和输出的统一形式
- 使用打包好的训练数据进行微调,只不过对于损失部分的计算只是对输出内容
指令微调的数据
需要包含指令输入和答案输出
- 单轮对话
User:
解释一下什么是人工智能?
Assistant:
人工智能,就是让机器模仿甚至超越人类的智能,去完成原本只有人才能做的事。
简单说:不是造真人,是造 “会思考、会学习、会解决问题” 的机器 / 程序。 - 多轮对话
User:
解释一下什么是人工智能?
Assistant:
人工智能,就是让机器模仿甚至超越人类的智能,去完成原本只有人才能做的事。
简单说:不是造真人,是造 “会思考、会学习、会解决问题” 的机器 / 程序。
User:
解释一下什么是机器学习?
Assistant:
机器学习就是让计算机自己从数据里 “学规律”,而不是人一条条写死规则。
注意:多轮对话通常把最后一轮Assistant之前的数据作为输入,将最后一轮Assistant的回答作为输出
指令微调数据的构建方法
手动构建
顾名思义,人工从网上等各种信息渠道收集数据,再人为的删选过滤,打标签等
- 耗费人力,成本高
- 数据集构建的质量高,具有可解释性,可控度高
开源数据集:
Databricks-dolly-1k,OL-CC,OASST1,Aya Dataset,LCCC
现有数据集转换
整合和修改当前多个开源数据集,最后合并成一个新的数据集用于指令微调
-
数据集具有多样性和全面性,规模大,节省时间
-
难以控制质量和格式的标准化,很多数据集是为自然语言处理后建的,缺少提示词,容易产生数据的不一致和模糊
开源数据集:
OIG,Flan 2022,COT -
Flan 2022数据集的构建采用了任务混合和输入反转,可以增强模型的泛化能力
- 任务混合:将多个任务的数据进行混合训练
- 输入反转:将原始的输入内容的部分元素进行反转和部分重新排列
-
指令数据如果缺乏多样性,会造成模型出现过拟合,并且导致知识遗忘和泛化能力下降
解决数据的不一致和冗余问题:
- 构建一个通用的分类体系,将不一致的数据和模糊的数据基于模型的分类和规则的过滤,为不一致和模糊的数据重新分配新的标签
- 均匀选择每一种类型的文本,同时强调语义的多样性,通过选择文本相似度较低的样本来确保数据的多样性
自动构建
利用大语言模型的生成能力自动构建指令,self-Instruct方法
-
生成任务指令
- 构建一个包含175个任务的小型的指令数据集,称为种子指令集,用于初始化指令池
- 在指令池中采样8条指令(六条人工生成的,两条模型迭代的),作为上下文示例,输入给大语言模型生成更多的指令,直到模型自己停止生成
-
确定指令是不是代表分类任务
- 给大语言模型上下文的示例,让模型自己判断属于分类任务还是不属于
-
生成任务的输入和输出
- 对于非分类任务:使用输入优先,先根据任务产生输入,再根据任务指令和输入生成让大语言模型生成输出
- 对于分类任务:使用输出优先,先根据模型所有可能产生的输出(分类任务输出的是输入所属的标签),对每一个可能输出的标签都让模型产生输入
-
过滤低质量数据
- 为保证数据的多样性,在新的指令加入到指令池的时候先衡量池中现有数据的相似度,只要它和任何一条指令的ROUGE-L相似度低于0.7都不能加入到指令池,还有其他的硬过滤规则
最后,后续该栏目会两日一更,聚焦于大语言模型的微调和对齐以及强化学习与对应的代码实战
更多推荐



所有评论(0)