【AI大模型应用开发】【基础】1.大模型知识学习图谱

一.背景

随着ChatGPT等大型语言模型的出现,自然语言处理领域掀起了新一轮的研究和应用浪潮,尤其是在ChatGLM、LLaMA等开源较小规模的LLM模型后,业界出现了许多基于LLM的二次微调或应用案例,现阶段,经过市场调研,更多的企业致力于基于大模型的应用来实现业务的开发和迭代, 下面就是关于大模型理论+实践应用的完整知识体系,其中主要包括:大模型基础知识主流开源模型介绍及应用大模型主流微调方法大模型微调实战LangChain工具的应用等,进而全面掌握大模型的知识并加以企业应用

二.阶段知识:一大模型基础知识

1.什么是LLM

LM概念

  • 语言模型****就是用来计算一个句子的概率的模型,也就是判断一句话是否是人话的概率
  • 语言建模的目的就是构建该自然语言中词序列的分布,然后用于评估某个词序列的概率,如果给定的词序列符合语用习惯,则给出高概率,否则给出低概率

LLM的概念

  • LLM是指包含千亿(或更多)参数的语言模型,这些参数是基于大量文本数据上训练的,例如模型GPT-3、ChatGPT、PaLM、ChatGLM以及LLaMA
  • LLM本质是建立在**Transformer架构** 上,其中多头注意力层堆叠在一个非常深的神经网络

2.语言模型的主要方法

  • 基于规则和统计的语言模型 : N-Gram模型
  • 神经网络语言模型 :基于循环神经网络的模型
  • 基于Transformer的预训练模型
  • **大语言模型:**参数大于10B, 如GPT-3等模型

3.语言模型的评价指标

  • BLEU
    • BLEU (双语评估替补)分数是评估一种语言翻译成另一种语言的文本质量的指标,它将"质量"的好坏定义为与人类翻译结果的一致性程度
    • 判断两个句子的相似程度, BLEU 的分数取值范围是 0~1,分数越接近1,说明翻译的质量越高
  • ROUGE
    • ROUGE指标是在机器翻译、自动摘要、问答生成等领域常见的评估指标,ROUGE通过将模型生成的摘要或者回答与参考答案(一般是人工生成的)进行比较计算,得到对应的得分
    • ROUGE指标与BLEU指标非常类似,均可用来衡量生成结果和标准结果的匹配程度,不同的是ROUGE基于召回率,BLEU更看重准确率
  • PPL
    • PPL用来度量一个概率分布概率模型预测样本的好坏程度
    • 给测试集的句子赋予较高概率值的语言模型较好,当语言模型训练完之后,测试集中的句子都是正常的句子,那么训练好的模型就是在测试集上的概率越高越好
  • 精确率、召回率、F1值

三.阶段知识二:大模型主要类型架构

1. LLM分类

  • Transformer: LLM本身基于transformer架构,自2017年,attention is all you need诞生起,原始的transformer模型为不同领域的模型提供了灵感和启发,基于原始的Transformer框架,衍生出了一系列模型,一些模型仅仅使用encoder或decoder,有些模型同时使用encoder+decoder
  • **Encoder-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-head
    • 1.15亿参数
  • 适用场景
    • NLU任务
      • 文本分类、信息抽取

3. Decoder-Only: GPT

  • 介绍: 2018年6月, OpenAI公司发表了论文"Improving Language Understanding by Generative Pre-training"《用生成式预训练提高模型的语言理解力》, 推出了具有1.17亿个参数的GPT(Generative Pre-training , 生成式预训练)模型.
  • 模型架构
  • 预训练任务
    • 第一阶段: 无监督的预训练语言模型
    • 第二阶段: 有监督的下游任务 fine-tunning
  • 基本模型参数
    • 12层
    • 768维
    • 12-head
    • 1.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-head
    • 2.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,但在大部分任务上效果都超过了GPT3

2.2 模型架构

基本与GPT相同, LLaMA采用了Decoder-only 的Transformer模型结构

改动细节:

  • Layer Normalization(层规范化):为了提升训练的稳定性,替代传统的 Post Layer Norm,而是使用了 Pre Layer Norm,具体地,去除了 Layer Normalization 中的偏置项,采用了 RMS Norm(即均方根 Norm)
  • 激活函数:将 ReLU 激活函数替换成了SwiGLU 激活函数
  • 位置编码: 去除了绝对位置编码,采用了旋转位置编码 RoPE

2.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:1

3.2 模型架构

  • 基本架构

GLM模型架构-由Decoder模型修改而来

  • 1.对原始文本x=x1,x2,...,x6随机进行连续 mask,这里假设mask掉x3x5,x6
  • 2.将x3x5,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 激活函数
    • 位置编码:去除了绝对位置编码,采用了旋转位置编码 RoPE

3.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 Learning

Prompt前身,通过从训练集挑选一些样本作为任务的提示,来实现免参数更新的模型预测

4.2 Prompt-Oriented Fine-Tuning

将目标任务转换为适应预训练模型的预训练任务,以适应预训练模型的学习体系

4.3 Prompt Tuning

为每一个输入文本假设一个固定前缀提示,该提示表由神经网络参数化,并在下游任务微调时进行更新,整个过程中预训练的大模型参数被冻结

4.4 P-Tuning

P-tuning是另一个具有代表性的连续提示方法,主要针对的是NLU任务,方法图如下所示(图中的P_i等价于上文的v_i ,表示伪标记), 谷歌于2021年发表

4.5 PPT

PPT旨在通过先让这些连续提示在大量无标注的预训练语料进行预训练,然后将其加载到对应下游任务的PLM上进行训练

5.面向超大规模模型的Prompt-Tuning

5.1 In-Context Learning(上下文学习)

**In-Context learning(ICL)**最早在GPT-3中提出, 旨在从训练集中挑选少量的标注样本,设计任务相关的指令形成提示模板,用于指导测试样本生成相应的结果。

  • 主要方法
    • zero-shot learning
    • one-shot learning
    • few-shot learning

5.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模型进行文本匹配

七.阶段知识七:基于LangChain+Qwen实现本地知识库问答机器人实战

1. 业务场景

构建本地知识库实现智能问答

2. LangChain开源框架介绍

2.1 定义

LangChain自身并不开发LLMs,它的核心理念是为各种LLMs实现通用的接口,把LLMs相关的组件"链接"在一起,简化LLMs应用的开发难度,方便开发者快速地开发复杂的LLMs应用,旨在帮助开发人员使用语言模型构建端到端的应用程序

2.2 组件

  • **Models:**模型,模型,各种类型的模型和模型集成,比如GPT-4
  • Prompts: 提示,包括提示管理、提示优化和提示序列化
  • **Memory:**记忆,用来保存和模型交互时的上下文状态
  • **Indexes:**索引,用来结构化文档,以便和模型交互
  • Chains: 链,一系列对各种组件的调用
  • **Agents:**代理,决定模型采取哪些行动,执行并且观察流程,直到完成为止

3. 知识库技术原理

基本流程

3.1 加载文件

3.2 读取文本
3.3 文本分割
3.4 文本向量化
3.5 问句向量化
3.6 匹配向量最相似的top k
3.7 上下文和问题添加到prompt
3.8 提交给LLM生成回答

4. LangChian+Qwen的原理

5. 实现LangChain-Qwen-Webui

5.1 下载llm 模型

5.2 下载embedding模型

5.3 修改模型配置文件路径

5.4 运行app.py文件

5.5 打开web界面,上传文件数据,实现知识库问答

主要收获

掌握LangChain工具的基本使用方式

理解向量知识库以及实现知识库的技术原理

掌握LangChain+ChatGLM-6B实现基于本地知识库问答的机器人搭建方法

八.阶段知识八:基于GPT2预训练模型搭建聊天机器人实战

1. 数据准备

主要针对医疗中文对话数据集

2. 数据处理

将中文文本数据处理成模型能够识别的张量形式

3. 模型搭建

4. 模型训练验证

5. 模型预测(人机交互)

九.阶段知识九:Prompt任务项目实战

1.基于BERT+PET方式实现小样本多分类任务

  • 项目背景
  • 数据预处理
  • 模型搭建与训练
  • 模型预测

2.基于BERT+P-Tuning方式实现小样本多分类任务

  • 数据预处理
  • 项目背景
  • 模型搭建与训练
  • 模型预测
  • 子主题 5

十.阶段知识十:基于ChatGLM-6B微调实现信息抽取+文本分类的多任务项目实战

【上一篇】【NLP自然语言处理-投满分项目】5.模型剪枝

【下一篇】