https://arxiv.org/pdf/2304.08177.pdf
github链接:
https://github.com/ymcui/Chinese-LLaMA-Alpaca
摘要
本项目开源了中文LLaMA和Alpaca大型模型,强调指令微调。
我们通过添加2万个中文标记,扩展了原始LLaMA的中文词汇表,提高了编码效率并增强了基本语义理解。
通过结合使用中文数据的二次预训练和中文指令数据的微调,我们大大提高了模型对指令的理解和执行能力。
1 引言
总之,本技术报告的贡献如下:
(1)通过在原始LLaMA词汇表中额外添加20,000个中文标记,我们提高了中文编码和解码效率,提升了LLaMA对中文的理解能力。
(2)我们采用低秩适应(LoRA)方法进行中文LLaMA和Alpaca模型的高效训练和部署,使研究人员能够在不产生过多计算成本的情况下使用这些模型。
(3)我们评估了中文Alpaca7B和13B模型在各种自然语言理解(NLU)和自然语言生成(NLG)任务上的性能,证明了它们在中文语言任务背景下相较于原始LLaMA模型有显著的改进。
2 中文LLaMA
(1)我们建议使用额外的中文标记扩展LLaMA分词器,并调整模型以适应新的分词器。
① 为了增强分词器对中文文本的支持,我们首先使用SentencePiece在中文语料库上训练一个中文分词器,词汇量为20,000。然后,我们将中文分词器与原始LLaMA分词器合并,组合它们的词汇表。最终,我们得到一个合并后的分词器,称为中文LLaMA分词器,词汇量为49,953。
② 为了使模型适应中文LLaMA分词器,我们将词嵌入和语言模型头部从形状 V×H 调整为 V′×H,其中V = 32,000代表原始词汇量,V′ = 49,953是中文LLaMA分词器的词汇量。新的行添加到原始嵌入矩阵的末尾,确保原始词汇中的标记嵌入不受影响。
③ 完成上述调整步骤后,我们使用中文LLaMA分词器对中文LLaMA模型进行预训练,用于标准的非正式语言建模(CLM)任务。给定一个输入标记序列x =(x0,x1,x2,. . .),模型以自回归的方式训练以预测下一个标记。
png-01
3 中文AIpaca
(1)获得预训练的中文LLaMA模型后,我们遵循Stanford Alpaca中使用的方法,应用self-instruct的微调来训练遵循指令的模型。
(2)我们采用来自Stanford Alpaca的以下提示模板进行self-instruct的微调,这在推理期间也会被利用:
png-02
(3)我们的方法与Stanford Alpaca之间的一个关键区别在于,我们仅使用为没有输入字段的示例设计的提示模板,而Stanford Alpaca则分别为有和无输入字段的示例使用两个模板。
4 使用LoRA进行参数高效微调
(1)低秩适应(LoRA)是一种参数高效的训练方法,它保持预训练模型的权重,同时引入可训练的秩分解矩阵。
(2)这种方法显著减少了可训练参数的数量。LoRA的一般公式如下方程所示,其中r是预定的秩,d是隐藏大小,A和B是分解后的可训练矩阵:
png-03
(3)为了在遵循严格预算的同时实现参数高效训练,我们将LoRA应用于所有实验中的中文LLaMA/Alpaca模型,包括预训练和微调阶段。我们主要将LoRA适配器整合到注意力模块的权重中,在某些情况下,还包括额外的MLP层。
5 实验设置
5.1 预训练和微调的实验设置
① 7B 版本
>>> 预训练
我们使用原始LLaMA权重初始化中文LLaMA模型,并在通用中文语料库上进行预训练,与中文BERT-wwm、MacBERT、LERT等所使用的语料库一致,形成一个20GB的文本语料库。
预训练过程分为两个阶段:
阶段1:我们固定模型中的Transformer编码器的参数,只训练嵌入向量,在最小化对原始模型的干扰的同时调整新添加的中文词向量。
阶段2:我们为注意力机制添加LoRA权重(适配器),并训练嵌入向量、LM头部和新添加的LoRA参数。
>>> 指令微调
我们还使用LoRA进行高效微调,通过在MLP层添加LoRA适配器来增加可训练参数的数量。我们利用约200万个数据点,包括翻译、pCLUE3、Stanford Alpaca和爬取的SFT数据来调整7B模型。
对于爬取的数据,我们采用self-instruct方法,从ChatGPT(gpt-3.5-turbo API)自动获取数据。
② 13B 版本
>>> 预训练
13B模型的预训练过程与7B模型的过程大致相同,不同之处在于我们跳过预训练中的阶段1。我们在设置嵌入向量和LM头部为可训练的同时,直接将LoRA应用于注意力机制和MLP进行训练。
>>> 指令微调
13B模型的预训练过程与7B模型的过程大致相同,不同之处在于我们跳过预训练中的阶段1。我们在设置嵌入向量和LM头部为可训练的同时,直接将LoRA应用于注意力机制和MLP进行训练。
png-04
5.2 解码的实验设置
在我们的实验中,我们使用以下解码超参数:
png-05
• 上下文大小:我们将上下文大小设置为2048,这决定了模型在生成文本时可以同时考虑的最大token数量。
• 最大序列长度:我们将生成的序列长度限制为512个token,以确保输出保持聚焦且与输入提示相关。
• 温度:我们将温度设置为0.2,这控制了采样过程的随机性。较低的值使模型生成更聚焦和确定性的输出,而较高的值以牺牲连贯性为代价增加多样性。
• Top-k采样:我们使用k=40的Top-k采样,这意味着模型在每一步从概率最高的前40个token中选择下一个token,为生成的文本增加随机性和多样性。
• Top-p采样:我们还使用p=0.9的Top-p采样,它通过考虑动态token集合进一步增强多样性,这些token集合共同占据了90%的概率质量。
• 重复惩罚:为了防止模型生成重复文本,我们应用重复惩罚系数为1.3的方法,惩罚已经被选择的token。
5.3 在CPU上部署
(1)在许多开源社区的帮助下,如llama.cpp(Gerganov,2023),用户可以将LLMs有效地量化为4-bit形式,显著减少内存使用和计算需求,使LLMs更容易在个人计算机上部署。
(2)总的来说,使用llama.cpp(或类似工具)将LLMs部署在个人计算机上为在各个领域更多样化和注重隐私的利用LLMs铺平了道路。
5.4 评估和任务设计
(1)我们使用以下提示模板来评分系统的输出:
png-06
(2)我们的评估集旨在对中文Alpaca模型在广泛的自然语言理解和生成任务中进行全面评估。该集合包括160个样本,涵盖10个不同的任务,包括问答、推理、文学、娱乐、翻译、多轮对话、编码和伦理等。
6. 结果
png-07