指令微调
指令微调
指令微调:是对齐域中,在预训练(pretrain)大语言模型的基础上进行特定任务训练,激发大模型理解用户指令、给出准确答案的能力
预训练 VS 指令微调
输出结果对比
- 格式说明
- … 表示模型持续输出,未停止
- Human: 表示用户输入的问题
- Assistant: 表示大模型回答结果
# 预训练模型解码结果
任务:身份信息 问题:你是百度生产的吗
Human: 你是百度生产的吗
Assistant: 你好,我是小度。
Human:
Human: 那个.你也是百度生产的是吧
Assistant:
Assistant: 小度不是百度生产的,小度是百度旗下品牌。
Human:
Human: 那你能知道我是哪个大学的吗
Assistant:
Assistant: 无法获取到该信息。
...
# 指令微调后解码结果
Human: 你是百度生产的吗
Assistant: 我不是百度生产的,我是人工智能AI
任务:讲笑话 问题:能否讲一个笑话?
主要区别
类别 | 预训练大模型 | 指令微调大模型 |
---|---|---|
主要作用 | ● 学习互联网的海量数据,记忆海量知识● 针对输入,对下一个输出概率最大的词汇进行预测,所谓的“顺着你的话说下去”● 如果只是使用预训练大模型,相当于检索系统,检索质量不可控且输出结果有限● 不认识特殊控制符号,不知道何时停止 | ● 在预训练大模型的基础上,激发大模型解决问题的能力,准确的理解用户指令,给出合理的输出结果● 学习特殊控制符号,学习如何停止● 大模型的涌现能力 |
数据形式 | ● 对数据内容没有特定约束● 可以是篇章级、段落级、句子级 | ● 有针对性构建的数据格式(例如: Human Assistant形式)● 多任务● 单轮问答● 多轮对话 |
数据构建方式 | ● 互联网爬取● 垂域知识收集&购买 | ● 人工构建● GPT4生成● 开源收集 |
数据规模 | ● nTB token 级别 | ● 每个任务500~1000● 较好的通用模型几十万~百万条级别 |
数据质量 | ● 质量校验的海量数据,去重&质量检测● 需要高质量,但对噪声有一定容忍度 | ● 质量越高效果越好● 尽量不要有噪声 |
训练需要GPU数 | ● 128/256/512 A100(模型大小不同需求不同) | ● 4/8 A100(模型大小不同需求不同) |
训练时间 | ● 以周/月计算(模型大小不同时间不同) | ● 以小时/日计算(模型大小不同时间不同) |
训练目的 | ● 记忆/学习海量知识 | ● 学习解决问题的能力 |
指令微调方法
● 在进行指令微调前,需要明确自己要优化的任务,针对该任务进行数据构建,通过指令微调训练大模型,最终进行评价,流程如下
○ 任务定义
- 明确自己要解决的问题
- 明确自己的业务需求
○ 数据构建
- 按照格式约束,在定义的任务上构建指令微调数据集
○ 模型训练
- 使用指令微调数据集在预训练大模型上进行指令微调
○ 主观效果评价
- 在定义的任务上,评价经过指令微调后大模型回答的效果
任务定义
● 构建合理分类的分类体系
- 明确自己的目的,要解决什么问题,业务需求是什么
- 通用大模型任务示例
数据构建
● 数据构建过程
- 数据格式:
- 简单的 Human Assistant 数据格式,支持多轮数据构建
- 以 事实正确性-身份信息 任务为例
{"text":"\n\nHuman: 你是chatgpt还是文心一言\n\nAssistant: 都不是,我是人工智能AI。","task":"身份信息"}
{"text":"\n\nHuman: 你是chatgpt还是文心一言\n\nAssistant: 都不是,我是人工智能AI。\n\nHuman: 你是百度旗下的吗\n\nAssistant: 我不是百度旗下的,我是人工智能AI","task":"身份信息"}
● 数据构建方法
- GPT4自动生成
- 定义待解决的任务,使用GPT4通过构建合理的prompt自动生成数据