【AI大模型应用开发】【基础】1.大模型知识学习图谱
一.背景随着ChatGPT等大型语言模型的出现自然语言处理领域掀起了新一轮的研究和应用浪潮,尤其是在ChatGLM、LLaMA等开源较小规模的LLM模型后业界出现了许多基于LLM的二次微调或应用案例,现阶段经过市场调研更多的企业致力于基于大模型的应用来实现业务的开发和迭代,下面就是关于大模型理论实践应用的完整知识体系其中主要包括大模型基础知识、主流开源模型介绍及应用、大模型主流微调方法、大模型微调实战、LangChain工具的应用等进而全面掌握大模型的知识并加以企业应用二.阶段知识:一大模型基础知识1.什么是LLMLM概念语言模型就是用来计算一个句子的概率的模型也就是判断一句话是否是人话的概率语言建模的目的就是构建该自然语言中词序列的分布然后用于评估某个词序列的概率,如果给定的词序列符合语用习惯则给出高概率否则给出低概率LLM的概念LLM是指包含千亿或更多参数的语言模型这些参数是基于大量文本数据上训练的,例如模型GPT-3、ChatGPT、PaLM、ChatGLM以及LLaMA等LLM本质是建立在Transformer架构上,其中多头注意力层堆叠在一个非常深的神经网络2.语言模型的主要方法基于规则和统计的语言模型:N-Gram模型神经网络语言模型:基于循环神经网络的模型基于Transformer的预训练模型BERTGPTT5大语言模型:参数大于10B, 如GPT-3等模型3.语言模型的评价指标BLEUBLEU 双语评估替补分数是评估一种语言翻译成另一种语言的文本质量的指标,它将“质量”的好坏定义为与人类翻译结果的一致性程度判断两个句子的相似程度,BLEU 的分数取值范围是 01分数越接近1说明翻译的质量越高ROUGEROUGE指标是在机器翻译、自动摘要、问答生成等领域常见的评估指标,ROUGE通过将模型生成的摘要或者回答与参考答案一般是人工生成的进行比较计算得到对应的得分ROUGE指标与BLEU指标非常类似均可用来衡量生成结果和标准结果的匹配程度不同的是ROUGE基于召回率BLEU更看重准确率PPLPPL用来度量一个概率分布或概率模型预测样本的好坏程度给测试集的句子赋予较高概率值的语言模型较好,当语言模型训练完之后测试集中的句子都是正常的句子那么训练好的模型就是在测试集上的概率越高越好精确率、召回率、F1值三.阶段知识二:大模型主要类型架构1. LLM分类Transformer:LLM本身基于transformer架构,自2017年attention is all you need诞生起原始的transformer模型为不同领域的模型提供了灵感和启发,基于原始的Transformer框架衍生出了一系列模型一些模型仅仅使用encoder或decoder有些模型同时使用encoderdecoderEncoder-only:自编码模型Decoder-only:自回归模型Encoder-Decoder:序列到序列模型2. Encoder-Only代表模型-BERT介绍: BERT是2018年10月由Google AI研究院提出的一种预训练模型模型架构:最底层黄色标记的Embedding模块中间层蓝色标记的Transformer模块最上层绿色标记的预微调模块预训练任务Masked LM (带mask的语言模型训练)Next Sentence Prediction (下一句话预测任务)基本模型参数12层768维12-head1.15亿参数适用场景NLU任务文本分类、信息抽取等3. Decoder-Only: GPT介绍: 2018年6月, OpenAI公司发表了论文“Improving Language Understanding by Generative Pre-training”《用生成式预训练提高模型的语言理解力》, 推出了具有1.17亿个参数的GPTGenerative Pre-training , 生成式预训练模型.模型架构预训练任务第一阶段: 无监督的预训练语言模型第二阶段:有监督的下游任务fine-tunning基本模型参数12层768维12-head1.17亿参数适用场景NLG任务文本生成、文本翻译等4. Encoder-Decoder:T5介绍: T5 由谷歌的 Raffel 等人于 2020年7月提出相关论文为“Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer”. 该模型的目的为构建任务统一框架将所有NLP任务都视为文本转换任务模型架构:Transformer模型架构预训练任务自监督预训练采用类似于BERT模型的MLM预训练任务多任务预训练除了使用大规模数据进行无监督预训练T5模型还可以利用不同任务的标注数据进行有监督的多任务预训练例如SQuAD问答和机器翻译等任务基本模型参数24层768维12-head2.2亿参数适用场景T5模型可以处理多种NLP任务并且可以通过微调来适应不同的应用场景具有良好的可扩展性四.阶段知识四:主流大模型介绍1. ChatGPT模型1.1 ChatGPT的应用1.2 GPT1模型介绍模型架构预训练过程训练数据集模型特点1.3 GPT2模型介绍模型架构预训练过程训练数据集模型特点1.4 GPT3模型介绍模型架构预训练过程训练数据集模型特点1.5 ChatGPT模型介绍原理介绍强化学习原理2. LLaMA模型2.1 定义LLaMA是 Meta 提出的大语言模型,训练数据是以英语为主的拉丁语系另外还包含了来自GitHub的代码数据。训练数据以英文为主不包含中韩日文所有训练数据都是开源的。从结果来看虽然LLaMA-13B模型参数量只有GPT3的不到1/10但在大部分任务上效果都超过了GPT32.2 模型架构基本与GPT相同LLaMA采用了Decoder-only 的Transformer模型结构改动细节:Layer Normalization(层规范化):为了提升训练的稳定性替代传统的 Post Layer Norm而是使用了Pre Layer Norm,具体地去除了 Layer Normalization 中的偏置项采用了 RMS Norm即均方根 Norm激活函数:将 ReLU 激活函数替换成了SwiGLU 激活函数位置编码: 去除了绝对位置编码采用了旋转位置编码 RoPE2.3 模型训练参数7B/13B/33B/65B关于tokenizer:LLaMA 的训练语料以英文为主使用了 Sentence Piece 作为 tokenizer词表大小只有 32000。词表里的中文 token 很少只有几百个LLaMA tokenizer 对中文分词的编码效率比较低2.4 模型预训练任务LLaMA 的训练目标是语言模型即根据已有的上文去预测下一个词2.5 基于LLAMA模型的开发工具Alpaca :斯坦福大学在52k条英文指令遵循数据集上微调了7B规模的 LLaMA是后续很多中文 LLM 的基础3. ChatGLM模型3.1 定义ChatGLM-6B 是清华大学提出的支持中英双语问答的对话语言模型基于 General Language Model (GLM) 架构ChatGLM-6B训练数据,多达 1T 的 tokens,训练语料只包含中文和英文中英文比例为 1:13.2 模型架构基本架构GLM模型架构-由Decoder模型修改而来1.对原始文本x[x1,x2,...,x6]随机进行连续 mask这里假设mask掉[x3]和[x5,x6]2.将[x3]和[x5,x6] 替换为 [M] 标志并打乱 Part B 的顺序。为了捕捉跨度之间的内在联系随机交换跨度的顺序。3.GLM 自回归地生成 Part B。每个片段在输入时前面加上 [S]在输出时后面加上 [E]。二维位置编码表示不同片段之间和片段内部的位置关系改动点ChatGLM-6B 是在GLM-Base模型基础上通过面向用户的对话反馈以及强化学习等技术演变而来Embedding 层梯度缩减:为了提升训练稳定性减小了 embedding 层的梯度。梯度缩减的效果相当于把 Embedding 层的梯度缩小了 10 倍减小了梯度的范数Layer Normalization:采用了基于 Deep Norm 的 Post Layer Norm激活函数:将 ReLU 激活函数替换成了GeGLU 激活函数位置编码:去除了绝对位置编码采用了旋转位置编码 RoPE3.3 模型训练参数具有 62 亿参数3.4 模型预训练任务ChatGLM-6B 的训练任务是自回归文本填空3.5 基于ChatGLM的应用LangChain-ChatGLM:基于 LangChain 的 ChatGLM 应用实现基于可扩展知识库的问答4. BLOOM模型4.1 定义BLOOM是由Hugging Face公司在46种自然语言其中包含了英语、中文、法语、西班牙语、葡萄牙语等共46种语言和13种编程语言上训练的4.2 模型架构模型结构 与 GPT 相同BLOOM 采用了 causal decoder-only 的transformer 模型结构改动的地方:embedding layer norm:在 embedding 层后添加了一个 layer normalization来使训练更加稳定layer normalization:为了提升训练的稳定性没有使用传统的 post layer norm而是使用了 pre layer Norm激活函数 :将 ReLU 激活函数替换成了GeLU 激活函数位置编码:去除了绝对位置编码采用了相对位置编码 ALiBi。相比于绝对位置编码ALiBi 的外推性更好即虽然训练阶段的最大序列长度为 2048模型在推理过程中可以处理更长的序列4.3 模型训练参数760亿参数语言模型4.4 模型预训练任务BLOOM 的训练目标是语言模型即根据已有的上文去预测下一个词4.5 基于BLOOM模型的应用轩辕:金融领域大模型度小满在 BLOOM-176B 的基础上针对中文通用领域和金融领域进行了针对性的预训练与微调五.阶段知识五:大模型应用方式微调知识库1.LLM的进阶历程四种范式1、非神经网络时代的完全监督学习特征工程: 利用特定的规则或数学、统计学的模型来对特征进行匹配和利用进而完成特定的NLP任务。常见的方法比如贝叶斯、veterbi算法、隐马尔可夫模型等等来进行序列分类、序列标注等任务。2、基于神经网络的完全监督学习架构工程: 这类方法不用手动设置特征和规则节省了大量的人力资源但仍然需要人工设计合适的神经网路架构来对数据集进行训练。常见的方法比如CNN、RNN、机器翻译中的Seq2Seq模型、Transformer模型等等。3、预训练精调范式目标工程: 先在大的无监督数据集上进行预训练学习到一些通用的语法和语义特征然后利用预训练好的模型在下游任务的特定数据集上进行fine-tuning使模型更适应下游任务。4、预训练提示预测范式Prompt工程: 将下游任务的建模方式重新定义通过合适的prompt来实现直接在预训练模型上解决下游任务这种模式需要极少量甚至不需要下游任务数据使得小样本、零样本学习成为可能2. 大模型应用的问题大模型能够回答较为普世的问题但是若要服务于垂直专业领域会存在知识深度、知识准确度和时效性不足的问题3.传统Fine-Tuning方式Fine-Tuning的基本思想是采用已经在大量文本上进行训练的预训练语言模型然后在小规模的任务特定文本上继续训练它全量参数微调传统大模型微调方法问题当前以ChatGPT为代表的预训练语言模型PLM规模变得越来越大在消费级硬件上进行全量微调Full Fine-Tuning变得不可行为每个下游任务单独存储和部署微调模型变得非常昂贵因为微调模型与原始预训练模型的大小相同4.Prompt-Tuning发展方式目的是将Fine-tuning的下游任务目标转换为Pre-training的任务4.1 In-context LearningPrompt前身通过从训练集挑选一些样本作为任务的提示来实现免参数更新的模型预测4.2 Prompt-Oriented Fine-Tuning将目标任务转换为适应预训练模型的预训练任务以适应预训练模型的学习体系4.3 Prompt Tuning为每一个输入文本假设一个固定前缀提示该提示表由神经网络参数化并在下游任务微调时进行更新整个过程中预训练的大模型参数被冻结4.4 P-TuningP-tuning是另一个具有代表性的连续提示方法主要针对的是NLU任务方法图如下所示图中的$P_i$等价于上文的$v_i$ 表示伪标记, 谷歌于2021年发表4.5 PPTPPT旨在通过先让这些连续提示在大量无标注的预训练语料进行预训练然后将其加载到对应下游任务的PLM上进行训练5.面向超大规模模型的Prompt-Tuning5.1 In-Context Learning(上下文学习)In-Context learningICL最早在GPT-3中提出 旨在从训练集中挑选少量的标注样本设计任务相关的指令形成提示模板用于指导测试样本生成相应的结果。主要方法zero-shot learningone-shot learningfew-shot learning5.2 Instruction-Tuning(指令学习)其实Prompt-Tuning本质上是对下游任务的指令简单的来说就是告诉模型需要做什么任务输出什么内容。5.3 Chain-of-Thought思维链思维链是一种离散式提示学习更具体地大模型下的上下文学习即不进行训练将例子添加到当前样本输入的前面让模型一次输入这些文本进行输出完成任务相比于之前传统的上下文学习即通过x1,y1,x2,y2,....xtest作为输入来让大模型补全输出ytest思维链多了中间的中间的推导提示5.4 大模型参数高效微调方法PEFT作用PEFT 可以使 PLM 高效适应各种下游应用任务而无需微调预训练模型的所有参数PEFT 方法仅微调少量或额外的模型参数固定大部分预训练参数大大降低了计算和存储成本同时最先进的 PEFT 技术也能实现了与全量微调相当的性能分类Adapter-Tuning定义:将较小的神经网络层或模块插入预训练模型的每一层这些新插入的神经模块称为 adapter适配器下游任务微调时也只训练这些适配器参数与 Prefix Tuning 和 Prompt Tuning 这类在输入前可训练添加 prompt embedding 参数来以少量参数适配下游任务Adapter Tuning 则是在预训练模型内部的网络层之间添加新的网络层或模块来适配下游任务假设预训练模型函数表示为 Tw(x),对于Adapter Tuning,添加适配器之后模型函数更新为Tw,wn(x),w是预训练模型的参数,wn是新添加的适配器的参数在训练过程中,w被固定,只有wn被更新。 |wn||w|这使得不同下游任务只需要添加少量可训练的参数即可节省计算和存储开销同时共享大规模预训练模型结构图串行方式:适配器模块被添加到每个 Transformer 层两次多头注意力映射之后和两层前馈神经网络之后。适配器是一个 bottleneck瓶颈结构的模块由一个两层的前馈神经网络由向下投影矩阵、非线性函数和向上投影矩阵构成和一个输出输出之间的残差连接组成并行方式:将适配器模块与每层 Transformer 的多头注意力和前馈层并行计算集成原理: Adapter设计为这样的结构首先是一个down-project层将高维度特征映射到低维特征然后过一个非线形层之后再用一个up-project结构将低维特征映射回原来的高维特征同时也设计了skip-connection结构确保了在最差的情况下能够退化为identity。优点:仅微调少量或额外的模型参数固定大部分预训练参数大大降低了计算和存储成本LoRA定义: 通过学习小参数的低秩矩阵来近似模型权重矩阵, W的参数更新训练时只优化低秩矩阵参数。结构图原理:Low-Rank Adaption(LoRA)设计了如图所示的结构在涉及到矩阵相乘的模块引入A、B这样两个低秩矩阵模块去模拟Full-finetune的过程相当于只对语言模型中起关键作用的低秩本质维度进行更新优点全量微调的一般化减少内存和存储资源消耗没有额外的推理延时Prefix-Tuning定义: 该方法是在输入token之前构造一段任务相关的virtual tokens作为Prefix然后训练的时候只更新Prefix部分的参数而Transformer中的其他部分参数固定。结构图原理 :具体的方法就是对于transformer的每一层注意不是只有输入层目的增加可训练参数都在真实的句子表征前面插入若干个可训练的virtual token embedding:对于自回归Autoregressive模型在句子前面添加前缀得到z[PREFIX;x;y]。这是因为合适的上文能够在fixed LM的情况下去引导生成下文比如GPT3的 in-context learning优点:显著减少训练时间和资源消耗6.LangChain 框架6.1 LangChain基本概念LangChain 是基于大模型的应用开发框架6.2 LangChain的主要组件模型prompt提示Chains(链)Agents (代理)Memory(记忆)Indexes (索引)6.3 LangChain的应用场景个人助手基于文档的问答系统聊天机器人API交互信息提取文档总结六.阶段知识六:基于Zero-shot方式的LLM应用实战1.Zero-Shot方式介绍2. 基于Zero-shot方式实现LLM文本分类3. 基于Zero-shot方式实现LLM关系抽取4. 基于Zero-shot方式实现LLM文本匹配主要收获掌握基于Zero-shot方式实现LLM应用的过程掌握基于Zero-shot方式实现ChatGLM模型进行文本分类掌握基于Zero-shot方式实现ChatGLM模型进行信息抽取掌握基于Zero-shot方式实现ChatGLM模型进行文本匹配七.阶段知识七:基于LangChainQwen实现本地知识库问答机器人实战1. 业务场景构建本地知识库实现智能问答2. LangChain开源框架介绍2.1 定义LangChain自身并不开发LLMs它的核心理念是为各种LLMs实现通用的接口把LLMs相关的组件“链接”在一起简化LLMs应用的开发难度方便开发者快速地开发复杂的LLMs应用,旨在帮助开发人员使用语言模型构建端到端的应用程序2.2 组件Models:模型模型各种类型的模型和模型集成比如GPT-4Prompts:提示包括提示管理、提示优化和提示序列化Memory:记忆用来保存和模型交互时的上下文状态Indexes:索引用来结构化文档以便和模型交互Chains:链一系列对各种组件的调用Agents:代理决定模型采取哪些行动执行并且观察流程直到完成为止3. 知识库技术原理基本流程3.1 加载文件3.2 读取文本3.3 文本分割3.4 文本向量化3.5 问句向量化3.6 匹配向量最相似的top k3.7 上下文和问题添加到prompt3.8 提交给LLM生成回答4. LangChianQwen的原理5. 实现LangChain-Qwen-Webui5.1 下载llm 模型5.2 下载embedding模型5.3 修改模型配置文件路径5.4 运行app.py文件5.5 打开web界面上传文件数据实现知识库问答主要收获掌握LangChain工具的基本使用方式理解向量知识库以及实现知识库的技术原理掌握LangChainChatGLM-6B实现基于本地知识库问答的机器人搭建方法八.阶段知识八:基于GPT2预训练模型搭建聊天机器人实战1. 数据准备主要针对医疗中文对话数据集2. 数据处理将中文文本数据处理成模型能够识别的张量形式3. 模型搭建4. 模型训练验证5. 模型预测人机交互九.阶段知识九:Prompt任务项目实战1.基于BERTPET方式实现小样本多分类任务项目背景数据预处理模型搭建与训练模型预测2.基于BERTP-Tuning方式实现小样本多分类任务数据预处理项目背景模型搭建与训练模型预测子主题 5十.阶段知识十:基于ChatGLM-6B微调实现信息抽取文本分类的多任务项目实战【上一篇】【NLP自然语言处理-投满分项目】5.模型剪枝【下一篇】