大模型微调项目 / 数据集调研汇总

极市平台

共 7570字,需浏览 16分钟

 · 2024-04-14

↑ 点击蓝字 关注极市平台
作者丨周星星@知乎(已授权)
来源丨https://zhuanlan.zhihu.com/p/624079704
编辑丨极市平台

极市导读

 

总结了一些热门的大模微调项目的亮点以及数据集。 >>加入极市CV技术交流群,走在计算机视觉的最前沿

前言

本文主要总结本人最近跑过的大模型微调项目。

相信大家这几个月都会不断新出的微调大模型项目刷屏,频率基本每天都有高星的项目诞生,部分还宣称自己达到GPT的百分之多少,一方面弄得大家过度乐观,一方面弄得大家焦虑浮躁。

面对这种情况,我的建议是「多动手」。把这些项目 clone 下来,跑跑代码,把项目用到的数据集下载下来做做EDA,把项目训练完的checkpoint下载下来,用自己的例子跑跑。多接触反而心态平定了许多

回归正题,这篇博文聊聊一些热门的大模型微调项目。首先我觉得大量这些项目的诞生是源于以下三个节点:

  • 节点1 ChatGPT:由于 ChatGPT 惊人的效果,让大家意识到AGI的可能性,并重视起了大模型+开放指令微调+强化学习这种三阶段范式
  • 节点2 LLaMA:LLaMA 是 Meta 在今年2月份推出的基座模型,宣称 LLaMA-13B 在大多数基准测试中超过了 GPT-3 (175B),而 LLaMA-65B 与最好的模型 Chinchilla70B 和 PaLM-540B 相比非常有竞争力。此外,该项目还开源了7B、13B、30B和65B版本。
  • 节点3 Stanford Alpaca:在 LLaMA 的基础上,用 Self-Instruct 去制造了52K的指令微调数据集,最后发现训练出来的模型确实是能听懂指令的,能看出ChatGPT的雏形

这三个节点加起来相当于证明了一条可以低成本复现的道路,然后大量的人沿着这条道路去进行时间。

再来说说这些项目的,本质都是:底座模型(ChatGLM/LLaMA/BLOOM)+ 微调数据(主要是指令微调数据集) + 高效微调方案(Fulltuning/Lora/Freeze/Ptuning)

项目

这些介绍几个我认为比较好的,好的定义是:Github star 比较高的,持续在维护更新的,同时作者对自己的项目做了详细解析和深入研究的。

ChatGLM-6B

清华唐杰老师团队

项目: https://github.com/THUDM/ChatGLM-6B

Blog: https://chatglm.cn/blog

ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于GLM架构,具有62亿参数。ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。经过约1T个标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持。为了方便下游开发者针对自己的应用场景定制模型,项目还开源了基于 P-Tuning v2(https://github.com/THUDM/P-tuning-v2) 的高效参数微调代码。

亮点:

  • GLM 是一种 Prefix decoder 的结构,而目前大模型采用的主流结构是 Casual decoder,可以说GLM走出了自己的道路,但究竟那种结构更优,需要更科学的评定
  • 1T 个token的中英文预训练,对比 175B 的 GPT3 训练了300B个 token,540B的 PaLM 训练了780B个 token,而 ChatGLM-6B 的底座只是6B的模型,却训练了1T个 token,让人有种憧憬,用大数据训练小模型,是否能达到小数据训练大模型的效果
  • 项目号称经过监督微调、反馈自助、人类反馈强化学习

但是 ChatGLM-6B 没有公布它的训练细节和语料是怎么做的,有人说 ChatGLM-6B 的 IFT 也是通过 self-Instruct 得到的,这也不是空穴来风,相信用过 ChatGLM-6B 的人都会觉得,ChatGLM-6B的回复风格跟ChatGPT十分相似。

Alpaca-CoT

中科院的学生做的项目

项目:https://github.com/PhoebusSi/Alpaca-CoT/blob/main/CN_README.md

多接口统一的大模型指令微调平台。该项目做了一个框架,利用这个框架,可以方便地用不同的底座模型+不同的指令数据集进行大模型的微调,不足的地方是,只提供了使用Lora的训练方式。除此之外,该项目主打一个思维链 (CoT),把CoT数据集加入到指令微调中,在项目中还举了很多案例,证明加入了CoT数据集后对模型的提升作用。

亮点:

  • 统一了多个底座模型,包括有 LLaMA、ChatGLM、BLOOM
  • 整理统一了其他公开项目的数据集,如果大家想梳理下现在市面上开源的IFT数据集,建议可以通过这个项目了解
  • 项目集成了 Int8-bitsandbytes、Fp16-mixed precision、LoRA(hugging peft库)等高效训练的方法
  • 首个加入了 CoT 训练后的效果研究

BELLE

贝壳团队开源的项目

项目:https://github.com/LianjiaTech/BELLE

项目基于 Deepspeed-Chat 项目,包括全量参数微调(fine-tuning)和基于LoRA的参数高效微调。

亮点:

  • 开源了一个规模巨大的中文IFT数据集,现在加起来有300万以上,基本都是通过Self-Instructi得到

  • 做了一系列的实验,截止日前已发了4篇技术报告

    • 《Exploring ChatGPT's Ability to Rank Content: A Preliminary Study on Consistency with Human Preferences》
    • 《Exploring the Impact of Instruction Data Scaling on Large Language Models: An Empirical Study on Real-World Use Cases》
    • 《Towards Better Instruction Following Language Models for Chinese: Investigating the Impact of Training Data and Evaluation》
    • 《A Comparative Study between Full-Parameter and LoRA-based Fine-Tuning on Chinese Instruction Data for Instruction Following Large Language Model》

建议大家把它们的数据集下载下来看看,并把这4篇实验报告都看一次。虽然这些实验并不是很客观,例如最后的test集也是用的belle自己的,然后用的是GPT3.5打分。不过整体的实验思路和实验结果还是可以大致参考的。

Chinese-LLaMA-Alpaca

科大讯飞&哈工大团队,很出名的团队,很多耳熟能详的中文预训练模型,如RoBERTa、MacBERT、PERT都出自它们团队

项目:https://github.com/ymcui/Chinese-LLaMA-Alpaca

该项目包括词表扩充、继续预训练和指令精调三部分,其中词表扩充的代码参见 merge_tokenizers.py ;预训练和指令精调代码参考了 transformers中的 run_clm.py 和 Stanford Alpaca 项目中数据集处理的相关部分。

亮点:

  • 相对完整的流程,不紧紧是指令微调这一步,还包括词表扩充、继续预训练
  • 针对LLaMA模型扩充了中文词表,提升了中文编解码效率。这一步是我觉得假如想用LLaMA去做中文必须要做的一个事情,因为原生LLaMA对中文支持不好,很多中文词不在它们的词表中,会被切成两个token,极大影响了效果
  • 对中文继续做了20G语料的预训练,这个预料规模一看就很熟,它们开源的RoBERTa、MacBERT也是在这个规模的预料上训练得到的
  • 在预训练介绍,分成两部分,第一阶段:冻结transformer参数,仅训练embedding,在尽量不干扰原模型的情况下适配新增的中文词向量,第二阶段:使用LoRA技术,为模型添加LoRA权重(adapter),训练embedding的同时也更新LoRA参数。这给大家做高效继续预训练的提供了一个方向。

StackLLaMA

项目:https://huggingface.co/spaces/trl-lib/stack-llama

Blog: https://huggingface.co/blog/stackllama

Hugging Face的研究人员发布的一个70亿参数的模型——StackLLaMA。这是一个通过人类反馈强化学习在LLaMA-7B微调而来的模型。

个人感觉有价值的是Hugging Face研究人员发布的一篇Blog:用RLHF训练LLaMA的实践指南。

亮点:

  • 博客更像是一个教程和指南,介绍如何使用RLHF来训练模型,而不是主要关注模型的性能表现
  • 重点介绍了指令微调和强化学习部分,其中强化学习部分利用的是StackOverflow构建的数据集,利用网民们的upvotes去进行评分,给我们构造强化学习数据集部分提供了一个思路,能否利用微博点赞、知乎点赞等数据去构造一个中文的强化学习数据集呢?

数据集

介绍几个比较有特色的中文数据集

Alpaca-CoT

对大部份中英文的开源IFT数据集进行了整理和汇总,包括有 Guanaco、belle、firefly、COIG,加上项目自己开源的CoT数据集。假如不想自己去疏离数据集的话,就看这个它们整理好的就行了。

Alpaca_GPT4

https://github.com/Instruction-Tuning-with-GPT-4/GPT-4-LLM

微软论文《INSTRUCTION TUNING WITH GPT-4》开源的数据集。亮点是利用 GPT-4 生成的 Alpaca 数据,并做了中文的翻译。由于GPT4比GPT3.5强大很多的,因此质量自然会更高。

belle_data

https://github.com/LianjiaTech/BELLE/tree/main/data/10M

规模很大、类型也较多的数据集

  • School Math:包含约25万条中文数学题数据,包含解题过程。
  • Multiturn Chat:包含约80万条用户与助手的多轮对话。
  • Generated Chat:包含约40万条给定角色的多轮对话。
  • train_2M_CN:包含约200万条与Alpaca类似生成的多样化指令任务数据。

这些数据都是由ChatGPT生成,部分质量是不过关的,需要自己好好筛选一下。

COIG

https://huggingface.co/datasets/BAAI/COIG

规模很大,类型很全的数据集

  • 翻译指令数据集:基于开源数据集精选得到,并通过DeepL高质量翻译、并进行人工验证+人工修正
  • 考试指令数据集:中国高考、中考、公务员考试得到,可用作思维链 (CoT) 语料库
  • 价值对齐数据集:「中文世界的价值观念不同于英语世界的价值观」,作者构建了与普世华人价值观match的数据集,也是通过 self-instruct 生成的
  • 反事实校正数据集:构建了反事实校正多轮聊天数据集(CCMC)。CCMC 数据集包括学生和老师之间的 5 轮角色扮演聊天,以及他们所参考的相应知识。教师根据基本事实知识生成响应,并在每一轮中纠正学生问题或陈述中的事实错误或不一致之处
  • 代码指令数据集:Leetcode 数据集,包含有代码到文本和文本到代码

总体来说,这份数据集质量非常高,需要我们好好根据任务进行挑选。

个人感悟

数据清洗方案如何更好?

  1. 多样性:例如在 Self-Instruct 论文中,会使用 ROUGE 指标,过滤掉生成的指令与已有指令重合的指令。
  2. 高质量:使用 ChatGPT 生成数据,自然训练出来的模型就是模仿 ChatGPT 的回复风格。然而,ChatGPT(指 GPT3.5)自身的缺点包括浓浓的机翻味道、文绉绉的、不够活泼可爱,其次中文生成不够流畅。一种思路是使用 PPL 等指标筛选出生成的指令和回复,计算困惑度 Perplexity。Perplexity 低的通常是不流畅的,可以将低于一定阈值的去掉。
  3. 启发式:例如过滤掉问题是中文但回答是英文的,过滤掉生成的指令包含需要外部知识库的情况。

更多的清洗方案,可以多看看开源数据集中它们是如何处理的,留意里面的数据清洗方式。

哪种微调方案比较好?

从 BELLE 的技术报告《A Comparative Study between Full-Parameter and LoRA-based Fine-Tuning on Chinese Instruction Data for Instruction Following Large Language Model》中可以看出,Full-Tuning 效果应该是最好的,但 Full-Tuning 需要机器资源多,训练时间长。其次是 P-TuningV2/Lora/Freezing 的话,貌似是 P-TuningV2 效果最佳,具体可以看这个https://github.com/liucongg/ChatGLM-Finetuning。然而,这些比较并不严谨,例如每个方案都有自己的超参,是否每个方法都做了超参搜索。

强化学习部分重要吗?

非常重要。现在发现 ChatGLM-6B 的回复虽然一看过去感觉像模像样,但仔细看会发现胡言乱语的情况很严重,也即幻觉问题。也有人会另辟蹊径,例如 COIG 中的 CCMC 数据集,通过将这些数据集加入到 IFT 训练中,让模型学习纠正不正确回复的能力。还有在 prompt 中加入“请不要生成虚假的、自我捏造的回复”等字眼,目的是让模型在生成更加谨慎。然而,这些都是折中的办法。个人认为减少幻觉问题这一步,还得靠强化学习。希望未来能看到更多构建强化学习数据和开源强化学习数据集、训练的方案。

公众号后台回复“数据集”获取100+深度学习各方向资源整理

极市干货

技术专栏:多模态大模型超详细解读专栏搞懂Tranformer系列ICCV2023论文解读极市直播
极视角动态欢迎高校师生申报极视角2023年教育部产学合作协同育人项目新视野+智慧脑,「无人机+AI」成为道路智能巡检好帮手!
技术综述:四万字详解Neural ODE:用神经网络去刻画非离散的状态变化transformer的细节到底是怎么样的?Transformer 连环18问!

点击阅读原文进入CV社区

收获更多技术干货

浏览 123
10点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
10点赞
评论
收藏
分享

手机扫一扫分享

举报