谈谈ChatGPT的低成本“平替”实现路线
技术琐话 2023-04-06 08:33 发表于四川
以下文章来源于老刘说NLP,作者刘焕勇
当前,一日如一月,甚至一年,从数据、架构、模型三个方面全面井喷。如何快速、低成本的实现一个“可平替”【实际上并不现实,尤其是在比如编程、数学题等任务上】的chatgpt,成为大家落地的重要探索方向。
实际上,尤其针对中文市场,目前已经出现基于一些开源预训练大语言模型(如BLOOM、LAMMA、GLM等),使用由ChatGPT生产的数据(不包含任何其他数据),并加持LORA模型进行加速组成的研发范式。
老刘将这种研发范式归为一下三个模块。
其中:
语言模型:解决基座问题,目前包括llama,bloom,glm等,但这些都存在版权问题,开源协议规定禁止商用;
指令微调数据:解决所需要的对齐sft数据,根据场景指定,包括alpaca、belle、guanaco等百万级微调数据,
微调加速:解决的是低资源下的训练问题,贫民玩法,其中热度最高的为LoRA是一种以极低资源微调大模型的方法,其来自于论文LoRA: Low-Rank Adaptation of Large Language Models。
由于meta-llama的小参数以及论文中的高性能介绍,目前已经出现系列的变体。
最近,由于关于llama\alpaca类项目井喷,名字十分混乱,让人难以理解,为了更好的理解这些概念,本文主要介绍其中的几个代表性项目,从数据、模两个角度对llama、Stanford Alpaca、BELLE、Chinese-LLaMA-Alpaca等进行介绍,供大家一起参考。
从中我们可以看到,其中三块的内容都需要大量的投入,尤其是目前指令微调数据上,很依赖alpaca以及chatgpt的self-instruct数据,而这些数据并不干净,最近的分析表明,它非常以美国为中心(https://github.com/gururise/AlpacaDataCleaned)。
长路漫漫,更需摸清方向。
老刘说NLP
老刘,刘焕勇,NLP开源爱好者与践行者。主页:https://liuhuanyong.github.io。老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
281篇原创内容
公众号
一、模型基座-LLaMA: Open and Efficient Foundation Language Models
Facebook Meta AI最新提出的语言模型LLaMA,该模型声称以更小的体积,在多数任务上超越了GPT-3的性能。
模型相关项目已经开源:https://github.com/facebookresearch/llama
二、指令微调-Stanford Alpaca: A Strong, Replicable Instruction-Following Model
stanford_alpaca,一个强大、可复制的指令对齐模型,该模型从Meta的LLaMA 7B模型进行了微调。我们在使用text-davinci-003以自我指导风格生成的52K指令后续演示上训练羊驼模型。在自学评估集中,羊驼表现出许多类似于OpenAI的text-davinci-003的行为,但也出人意料地小,易于/廉价复制。
博客(https://crfm.stanford.edu/2023/03/13/alpaca.html)中介绍到,在学术预算下训练高质量的指导跟踪模型有两个重要挑战:强大的预训练语言模型和高质量的指导跟踪数据。第一个挑战通过最近发布的Meta的新LLaMA模型来解决。对于第二个挑战,self-instruct论文建议使用现有的强语言模型来自动生成指令数据。特别是,羊驼是一种语言模型,使用从LLaMA 7B模型的监督学习,从OpenAI的文本davinci-003生成的52K指令进行后续训练。
如上图所示,对于数据,首先通过自学方法生成了后续指导演示。从自学种子集的175个人工编写的指令-输出对开始。然后,提示text-davinci-003使用种子集作为上下文示例生成更多指令。通过简化生成pipeline,改进了自我指导方法,并显著降低了成本。我们的数据生成过程产生了52K个独特的指令和相应的输出,使用OpenAI API的成本不到500美元。
配备此指令跟踪数据集,然后使用Hugging Face的训练框架微调了LLaMA模型,利用了完全分片数据并行和混合精度训练等技术。在初始运行中,在8个80GB A100上微调7B LLaMA模型花了3个小时,这在大多数云计算提供商中花费不到100美元。
地址:https://github.com/tatsu-lab/stanford_alpaca
不过,羊驼仅用于学术研究,禁止任何商业用途。这一决定有三个因素:首先,羊驼是基于LLaMA的,它拥有非商业许可证,因此我们必然会继承这一决定。其次,指令数据基于OpenAI的text-davinci-003,其使用条款禁止开发与OpenAI竞争的模型。最后还没有设计足够的安全措施,因此羊驼还没有准备好用于一般用途。
2、开放数据
alpaca_data.json包含我们用于微调羊驼模型的52K指令跟踪数据。此JSON文件是字典列表,每本字典都包含以下字段:
instruction:str,描述模型应该执行的任务。52K的每个指令都是独一无二的。 input:str,任务的可选上下文或输入。例如,当指令是“总结以下文章”时,输入是文章。大约40%的例子有输入。 output:str,由text-davinci-003生成的指令的答案。
在生成该数据时,在一项初步研究中,发现该52K数据比自学发布的数据要多样化得多。如下图所示:内圈代表指令的根动词,外圈代表直接后接对象。
三、多语种指令微调-Guanaco: A Multilingual Instruction-Following Language Model Based on LLaMA 7B
Guanaco是一个根据Meta的LLaMA 7B模型训练的指令对齐语言模型。在羊驼模型的原始52K数据的基础上,我们额外添加了534,530个条目,涵盖英语、日语、德语、简体中文、繁体中文(台湾)、繁体中文(香港)以及各种语言和语法任务。通过用这些丰富的数据重新培训和优化模型,Guanaco在多语言环境中展示了出色的性能和潜力。
地址:https://github.com/Guanaco-Model/Guanaco-Model.github.io
1、模型介绍
Guanaco模型旨在很好地处理指导后续问答任务和持续对话,根据Meta的LLaMA 7B模型训练形成指令对齐语言模型。
Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request. ### Instruction: {instruction} ### Input: {input} ### Response:
2、数据开放
Guanaco模型的数据集旨在增强多语言能力并解决各种语言任务。它以羊驼模型的175项任务为基础,以不同语言重写种子任务,并添加专门为英语语法分析、自然语言理解、跨语言自我意识和显式内容识别而设计的新任务。该数据集共有534,530个条目,以6000美元的低成本生成。
地址:https://huggingface.co/datasets/JosephusCheung/GuanacoDataset
四、 中文指令微调-BELLE: Be Everyone's Large Language model Engine
1、模型介绍
本项目目标是促进中文对话大模型开源社区的发展,愿景做能帮到每一个人的LLM Engine。现阶段本项目基于一些开源预训练大语言模型(如BLOOM、LAMMA等),针对中文做了优化,模型调优仅使用由ChatGPT生产的数据(不包含任何其他数据)。
该项目参考Stanford Alpaca 生成的中文数据集1M + 0.5M,提供了基于BLOOMZ-7B1-mt优化后的模型:BELLE-7B-0.2M,BELLE-7B-0.6M,BELLE-7B-1M,BELLE-7B-2M
采取了不同大小规模(20万、60万、100万和200万样本)的指令学习的数据集训练模型,基于BLOOMZ-7B1-mt训练调优后的模型,现已开放:
项目地址:https://github.com/LianjiaTech/BELLE
以Bloomz-7b1-mt为基础,我们评估了不同数量的instruction tuning数据,对模型效果的影响。总的来说,提升数据量能持续带来效果的提升,但是在不同类型的任务上表现有所不同。
在Extract, Classification, Closed QA, 和Summarization任务上,增加数据能持续带来效果的提升,还未达到瓶颈。在Translation, Rewrite, 和Brainstorming任务上,几十万的数据量就能获得较好的效果。
在Math, Code, 和COT任务上,模型效果较差,而且增加数据量已经无法带来效果的提升。
https://github.com/LianjiaTech/BELLE/blob/main/assets/model_compare.jpg
=
2、开放数据
1)zh_seed_tasks.jsonl:包含175个种子任务。
{ "id": "seed_task_8", "name": "english_haiku_generation", "instruction": "请以下面词语为主题写一首诗", "instances": [{"input": "夏天", "output": "不但春妍夏亦佳,随缘花草是生涯。\n鹿葱解插纤长柄,金凤仍开最小花。"}], "is_classification": false } { "id": "seed_task_38", "name": "synonym_generation", "instruction": "给出下面词语的同义词", "instances": [{"input": "惊人地", "output": "令人惊奇地,令人惊讶地,意外地,难以置信地,不可思议地"}], "is_classification": false }
地址:https://github.com/LianjiaTech/BELLE/blob/main/zh_seed_tasks.json
2)0.5M生成的数据 :为了方便模型训练,huggingface开源数据将原始生成文件中的"instruction"、"input"字段合并成"input"字段,"output"字段修改为"target"字段。
{ "instruction": "给定一个文字输入,将其中的所有数字加1。\n“明天的会议在9点开始,记得准时到达。”\n", "input": "", "output": "“明天的会议在10点开始,记得准时到达。”" }
地址:https://huggingface.co/datasets/BelleGroup/train_0.5M_CN
3)1M生成的数据:生成方式与0.5M数据集相同,在后处理中去掉了一些质量不高的数据,例如自称GPT模型的数据、由于input不完善导致模型无法回答的数据,以及指令是中文但input或target是英文的数据。
地址:https://huggingface.co/datasets/BelleGroup/train_1M_CN