预训练
- 数据量比较大
- 数据质量非常低
- 书生万卷的大模型微调数据集
模型微调阶段
- 目的
- 预训练模型无法满足需求的时候
- 减少幻觉
- 遵循指令,流畅回答
- 面向特定任务场景
- Prompt Engineering的局限性
- 数据安全性问题
- 私有化部署
- 企业内部的数据
- 敏感的数据
- 降低训练成本
- 提高训练效率
- 动态学习能力
- 非常的可靠
- 私有化部署
- 需要个性化服务
- 预训练模型无法满足需求的时候
- 微调的方式
- 从参数规模进行划分
- FFT全量微调
- PEFT
- 定义:对部分的内容进行封装
- Prompt Tuning
- Prefix Tuning
- LoRA
- QLoRA
- 定义:对部分的内容进行封装
- 从训练数据进行划分
- SFT(Supervised Fine Tuning)
- RLHF(Reinforcement Learning with Human Feedback)
- RLAIF(Reinforcement Learning with AI Feedback)
- 从参数规模进行划分
- 微调的主要步骤
- 明确目标任务
- 选择和测试基座模型
- 可以选择一个小模型进行验证
- 数据准备
- 数据收集
- 数据清洗
- 数据预处理
- 标注
- 划分
- 设定微调策略
- LoRA
- QLoRA
- LoRA
- 设置超参数
- 学习率
- 批量大小
- 训练轮数
- 模型初始化
- 开始微调训练
- 模型评估和调优
- 模型性能的测试
- 模型部署应用
针对模型微调数据阶段的具体的讲解
- 数据的📱
- 网络数据
- 公开的数据集
- 人工标注
- 书生会在五月份开源一个数据标注工具📱
- 数据的扩充
- 数据增强
- 针对已有的数据进行改造,获得更多的数据量
- Self-intruct
- 使用GPT4等的大模型生成一个很好的问答对
- 如何生成这种问答对呢?
- 使用GPT4等的大模型生成一个很好的问答对
- 非对话类数据的转化
- 感觉这种方法其实是比较好的,关键是如何转化呢?
- 数据增强
- 数据的处理(可以多多关注XTuner的文档)
- 格式转化
- 划分训练集和测试集
- 开始自定义微调
- 微调数据的分类
- 按照任务类型进行分类
- 开放式问答
- 闭域问答
- 按照数据类型进行划分
- 单轮文本对话
- 多轮文对话
- 多模态对话
- 交互式对话
- 按照垂直领域划分
- 法律
- 医疗
- 对微调数据进行评估
- 数据质量高
- 多样性
- 真实数据
- 数据量多(没有质量重要)
- 相关的参考论文
- LIMA
- 扩大数据量是有用的,但是不同时扩大提示多样性的话,收益会大大减少
- MAYBE
- 特定的任务的模型可能从固定的任务重获益,从而获得更高的习惯能
- COIG-CQIA :Quality is all you need
- 弱智吧
- LIMA
- 按照任务类型进行分类
- 微调结果的评价
- 人工评价
- 评测工具
- OpenCompass,更客观
- ELO排名
- 更加的简单直接
RHF阶段
- 排序和打分的阶段
- 数据集非常小但是质量非常高
强化学习阶段
- 常用的就是chatgpt
实验阶段
- 数据:弱智吧的数据
-
如何构建高质量的数据
- 数据的采集
- 领域的相关性
- 质量高
- Harmless
- 某些问题我们可以拒绝回答
- Honest
- Helpful
- Harmless
- 数据预处理
- 数据的标注
- 人工标注(成本比较高)
- 可以使用OpenDataLAB
- 自动标注
- GPT4来生成回复,用人工来判断其如何
- 人工标注(成本比较高)
- 数据增强
- 文本重述
- 翻译循环
- 合成数据生成
- 数据的采集
-
数据划分
- 划分成训练集
-
使用COIG-CQIA的数据集为例
-
格式,我们最后需要转化成openAI的数据集的格式,生成一个转换成这样的脚本
{ "messages":{ { "role":"user", "content":'' }, { "role":"assistent", "content":"" }
-
划分一个训练集和测试集
-
- 开始进行自定义微调
- 参考前面的微调自定义小助手
- 转成HuggingFace格式的数据
- 魔性的整合
- 进行闭环的迭代进行训练,改变数据或者增加数据看一下对其的提升