一.大模型(LLM)基础知识

1. 大语言模型 (LLM) 背景

大语言模型 (英文:Large Language Model,缩写LLM) 是一种人工智能模型,旨在理解和生成人类语言,大语言模型可以处理多种自然语言任务,如文本分类、 问答、翻译、对话等等

  • 大模型核心运行机制:
    • 大模型的核心运行机制基于深度学习,尤其是Transformer架构。其核心是自注意力机制,能够捕捉输入序列中不同部分的关系。模型通过预训练在大规模数据上学习语言规律,再通过微调适应特定任务。训练过程中,使用反向传播和优化算法(如Adam)调整数百万甚至数十亿的参数。依赖GPU/TPU等高性能硬件和分布式训练加速计算。输入文本经过分词与嵌入转换为向量表示,模型通过推理生成输出,并采用生成策略(如束搜索)确保输出质量。整个过程依赖大规模数据和计算资源,实现复杂的语言理解和生成能力。核心架构图如下:

通常, 大语言模型 (LLM) 是指包含数千亿 (或更多) 参数的语言模型(目前定义参数量超过10B的模型为大语言模 型),这些参数是在大量文本数据上训练的,例如模型 GPT-3、ChatGPT、GLM、BLOOM和 LLaMA等

大模型是怎么演进的?

  • Encoder Only: 对应粉色分支,即BERT派,典型模型: BERT
    • 自编码模型(Autoencoder Model):通过重建句子来进行预训练,通常用于理解任务,如文本分类和阅读理解
    • 模型像一个善于分析故事的专家,输入一段文本,能拆解的头头是道,本质上是把高维数据压缩到低维空间。
  • Decoder Only: 对应蓝色分支,GPT派, 典型模型: GPT4,LLaMA,DeepSeek,QWen
    • 自回归模型(Autoregressive Model):通过预测序列中的下一个词来进行预训练,通常用于文本生成任务。
    • 模型像一个会讲故事的专家,给点提示,就能流畅的接着自说自话。
  • Encoder-Decoder: 对应绿色分支,T5派, 典型模型: T5, ChatGLM
    • 序列到序列模型(Sequence to Sequence Model):结合了编码器和解码器,通常用于机器翻译和文本摘要等任务。
    • 模型像一个“完型填空专家”,是因为它特别擅长处理这种类型的任务。通过将各种NLP任务统一转换为填空问题,T5派能够利用其强大的语言理解和生成能力来预测缺失的文本。这种方法简化了不同任务之间的差异,使得同一个模型可以灵活地应用于多种不同的NLP任务,并且通常能够在多个任务上取得很好的性能

截止目前,语言模型发展走过了三个阶段:

2. 语言模型 (Language Model, LM)

2.1 语言模型简介

语言模型(Language Model) 旨建模词汇序列的生成概率,提升机器的语言智能水平,使机器 能够模拟人类说话、写作的模式进行自动文本输出

举例说明 :

  • 问题描述: 假设我们中文创建一个语言模型,V表示词典={我、爱、学习、编程},W_i属于V. 语言  模型描述:给定词典V, 能够计算出任意单词序列S={W1,…,Wn}是一句话的概率P(S), 其中P >= 0.
  • 概率计算: 那么如何P(S)呢? 最简单的方法就是计数, 假设数据集中共有N个句子, 我们可以统计一下数据集中 S={W1,…,Wn}每个句子出现的次数, 如果为n, 则P(S)=n/N. 但是, 这个模型的预测能力几乎为0,因 为一旦单词序列没在之前数据集中出现过, 模型的输出概率就是0, 显然相当不合理.
  • 求解原则:

  • 模型定义: 如果能计算出P(Wn |W1,…Wn-1),那么就能轻松得到P(W1,W2,…,Wn), 所以在某些文献中,语言模型的 另外一种定义:能够计算出P(W1,W2,…,Wn)的模型就是语言模型

从文本生成角度,也可以这样定义语言模型:给定一个短语(一个词组或者一句话)语言模型可以生成(预测) 接下来的一个词

语言模型技术的发展可以总结为四个阶段:

2.2 基于规则和统计的语言模型

由人工设计特征并使用统计方法对固定长度的文本窗口序列进行建模分析,这种建模方式也被称为N-gram 语言模型。在上述例子中计算句子序列概率使用链式法则计算, 该方法存在两个缺陷:

  • 参数空间过大:条 件 概 率 P ( W n | W 1 , W2, ….W n)的可能性太 多 ,无法估算 , 也不 一定有用
  • 数据稀疏严重: 许多词对的组合 ,在 语料库中都没有出现, 依据最大似然估计得 到的概率为0

 2.3 N-gram语言模型

为了解决上述问题,引入马尔科夫假设:随意一个词出现的概率只与它前面出现的有限的一个或者几个词有关

一般来说,N元模型就是假设当前词的出现概率只与它前面的N-1个词有关,而这些概率参数都是可以通过大规 模语料库来计算, 比如三元概率:

 N-gram语言模型 在实践中用的最多的就是bigram和trigram, 接下来以bigram语言模型为例, 理解其工作原理:     

  • 首先准备一个语料库(简单理解让模型学习的数据集), 为了计算对应的二元模型的参数, 即P(W_i|W_ {i- 1}),我们要先计数即 C(Wi-1,Wi),然后计数 C(Wi-1) , 再用除法可得到概率    
  • C(Wi-1, Wi) 计数结果如下:

  • C(Wi-1) 的计数结果如下:

N-gram语言模型的特点:

  • 优点:
  • 缺点:
    • 只能建模到前n-1个词
    •  随着n的增大,参数空间呈指数增长
    • 数据稀疏,难免会出现OOV问题(只能预测词典里面的词,超出词典就会出问题)
    • 泛化能力差

2.4 神经网络语言模型

基于N-gram语言模型以上的问题, 以及随着神经网络技术的发展,人们开始尝试使用神经网络来建立语言模型

神经网络特点:

  • 优点:
    • 相比 n-gram 具有更好的泛化能力
    • 降低了数据稀疏带来的问题
  • 缺点:
    • 长序列的建模能有限
    • 可能会出现梯度消失等问题

2.5 基于Transformer的预训练语言模型

基于Transformer的预训练模型:包括GPT、BERT、T5等.这些模型能够从大规模通用文本数据中学习大量的语言表示,并将这些知识运用到下游任务中,获得较好的效果

预训练语言模型的使用方式:

  • 预训练:在大规模数据集上事先训练神经网络模型,使其学习到通用的特征表示和知识
  • 微调:在具体的下游任务中使用预训练好的模型进行迁移学习, 以获取更好的泛化效果

预训练语言模型的特点:

  • 优点:更强大的泛化能力,丰富的语义表示,可以有效防止过拟合
  • 缺点:计算资源需求大,可解释性差

思考总结:

  • 1.什么是大语言模型?
    • 答案:指包含数千亿 (或更多) 参数的语言模型
  • 2.语言模型的主要类别是什么?
    • 答案:N-Gram、神经网络、预训练模型、大语言模型
  • 3.常用的N-Gram语言模型是什么?
    • 答案:bigram、trigram

3. 语言模型的评估指标

3.1 常用指标

  • Accuracy (准确率): 模型预测正确的样本数量占总样本量的比重
  • Precision(精确率): 在被识别为正类别的样本中,为正类别的比例
  • Recall(召回率): 在所有正类别样本中,被正确识别为正类别的比例

上面参考: 混淆矩阵

  • BLEU分数:是评估一种语言翻译成另一种语言的文本质量的指标. 它将“质量 ”的好坏定义为与 人类翻译结果的一致性程度. 取值范围是[0, 1], 越接近1, 表明翻译质量越好
  • ROUGE 指标: 是在机器翻译、 自动摘要、问答生成等领域常见的评估指标. ROUGE 通过将模型生 成的摘要或者回答与参考答案(一般是人工生成的)进行比较计算,得到对应的得分
  • PPL: 用来度量一个概率分布或概率模型预测样本的好坏程度. PPL越小,标明模型越好.

3.2 BLEU

BLEU 根据`n-gram`可以划分成多种评价指标,其中`n-gram`指的是连续的单词个数为n,实践中,通常是取N=1~4, 然后对进行加权平均.

BLEU: 从文本生成方面看的精确率

下面举例说计算过程(基本步骤):

  • 1.分别计算candidate句和reference句的N-grams模型,然后统计其匹配的个数,计算匹配度
  • 2. 公式:candidate和reference中匹配的 n-gram 的个数 /candidate中n-gram的个数 ,大白话: 预测值与真实值匹配的个数 / 预测值的个数

一般计算BLEU是通过上面的 1-gram, 2-gram, 3-gram, 4-gram进行加权得来的

代码实现举例:

# # 第一步安装nltk的包-->pip install nltk
import torch
from nltk.translate.bleu_score import sentence_bleu
import math

def cumulative_bleu(reference, candidate):
    # 指标计算:p1^w1*p2^w2 =0.6^0.5*0.25^0.5 = 0.387
    # math.exp(0.5 * math.log(0.6) + 0.5 * math.log(0.25)) =
    # math.exp(0.5*math.log(0.15)) = math.exp(math.log(0.15)^0.5) = 0.15^0.5 = 0.387
    # # 0.3872983346207417
    bleu_1_gram = sentence_bleu(reference, candidate, weights=(1, 0, 0, 0))
    # exp ** (0.5*log(0.6)=-0.22+0.5*log(0.25)=-0.6)
    bleu_2_gram = sentence_bleu(reference, candidate, weights=(0.5, 0.5, 0, 0))
    bleu_3_gram = sentence_bleu(reference, candidate, weights=(0.33, 0.33, 0.33, 0))
    bleu_4_gram = sentence_bleu(reference, candidate, weights=(0.25, 0.25, 0.25, 0.25))

    return bleu_1_gram, bleu_2_gram, bleu_3_gram, bleu_4_gram
    # return bleu_1_gram, bleu_2_gram


# 生成文本
candidate_text = ["This", "is", "some", "generated", "text"]

# 参考文本列表
reference_texts = [["This", "is", "a", "reference", "text"]]

# 计算 Bleu 指标
c_bleu = cumulative_bleu(reference_texts, candidate_text)

# 打印结果
print("The Bleu score is:", c_bleu)
The Bleu score is: (0.6, 0.3872983346207417, 1.5949011744633917e-102, 9.283142785759642e-155)

3.3 ROUGE

ROUGE指标与BLEU指标非常类似,均可用来衡量生成结果和标准结果的匹配程度,不同的是ROUGE基于召回率,BLEU更看重准确率。 ROUGE也分为四种方法:ROUGE-N, ROUGE-L, ROUGE-W, ROUGE-S.

下面举例说计算过程(这里只介绍ROUGE_N):

  •  基本步骤:Rouge-N实际上是将模型生成的结果和标准结果按N-gram拆分后,计算召回率

代码如下:

# 第一步:安装rouge-->pip install rouge
from rouge import Rouge

# 生成文本
generated_text = "This is some generated text."

# 参考文本列表
reference_texts = ["This is another generated reference text."]

# 计算 ROUGE 指标
rouge = Rouge()
scores = rouge.get_scores(generated_text, reference_texts[0])
print(f'scores-->{scores}')

# 打印结果
print("ROUGE-1 precision:", scores[0]["rouge-1"]["p"])
print("ROUGE-1 recall:", scores[0]["rouge-1"]["r"])
print("ROUGE-1 F1 score:", scores[0]["rouge-1"]["f"])
# ROUGE-1 precision: 0.8
# ROUGE-1 recall: 0.6666666666666666
# ROUGE-1 F1 score: 0.7272727223140496
scores-->[{'rouge-1': {'r': 0.6666666666666666, 'p': 0.8, 'f': 0.7272727223140496}, 'rouge-2': {'r': 0.2, 'p': 0.25, 'f': 0.22222221728395072}, 'rouge-l': {'r': 0.6666666666666666, 'p': 0.8, 'f': 0.7272727223140496}}]
ROUGE-1 precision: 0.8
ROUGE-1 recall: 0.6666666666666666
ROUGE-1 F1 score: 0.7272727223140496

3.4 困惑度PPL(perplexity)

PPL用来度量一个概率分布概率模型预测样本的好坏程度

基本思想:

  • 概率值: 给测试集的句子赋予较高概率值的语言模型较好,当语言模型训练 完之后,测试集中的句子都是正常的句子,那么训练好的模型就  是在测试集上的概率越高越好

  • 结论: 由公式可知,句子概率越大,语言模型越好,迷惑度越小

代码如下:

import math

# 定义语料库
sentences = [
    ['I', 'have', 'a', 'pen'],
    ['He', 'has', 'a', 'book'],
    ['She', 'has', 'a', 'cat']
]
# 定义语言模型
unigram = {'I': 1 / 12, 'have': 1 / 12, 'a': 3 / 12, 'pen': 1 / 12,
           'He': 1 / 12, 'has': 2 / 12, 'book': 1 / 12, 'She': 1 / 12, 'cat': 1 / 12}

perplexity = 0
for sentence in sentences:
    sentence_prob = 1
    for word in sentence:
        sentence_prob *= unigram[word]
    temp = -math.log(sentence_prob, 2) / len(sentence)
    perplexity += 2 ** temp
perplexity = perplexity / len(sentences)
print('困惑度为:', perplexity)
# 困惑度为: 8.15

总结:

  • 1.语言模型的评估指标是什么?
    • 答案:Accuracy、Precision、Recall、BLEU、ROUGE、PPL
  • 2.怎么理解BLEU指标?
    • 答案:评估一种语言翻译成另一种语言的文本质量的指标.. 取值范围是[0, 1], 越接近1, 表明翻译质量越好
  • 3.怎么理解ROUGE指标?
    • 答案:ROUGE指标用来衡量生成结果和标准结果的匹配程度, 不同的是ROUGE基于召回率,BLEU更看重准确率
  • 4.怎么理解PPL指标?
    • 答案:PPL用来度量一个概率分布或概率模型预测样本的好  坏程度

二.LLM主要类别架构介绍

1. LLM主要类别

LLM本身基于transformer架构. 自2017年,attention is all you need诞生起,原始的transformer模型为不同 领域的模型提供了灵感和启发. 基于原始的Transformer框架,衍生出了一系列模型,一些模型仅仅使用encoder decoder,有些模型同时使用encoder+decoder

LLM分类一般分为三种: 自编码模型(encoder) 自回归模型(decoder)和序 列到序列模型(encoder-decoder)

2.  自编码模型(AutoEncoder  model,AE)

    代表模型 BERT

  • AE模型,代表作BERT,其特点为:Encoder-Only
  • 基本原理:是在输入中随机MASK掉一部分单词,根据上下文预测这个词
  • AE模型通常用于内容理解任务, 比如自然语言理解(NLU) 中的分类任务:情感分析、提取式问答
  • BERT是2018年10月由Google AI研究院提出的一种预训练模型.
  • BERT的全称是Bidirectional Encoder Representation from Transformers.
  • BERT在机器阅读理解顶级水平测试SQuAD1.1中表现出惊人的成绩 : 全部两个衡量指标上全面超越人类, 并且在11 种不同NLP测试中创出SOTA表现. 包括将GLUE基准推高至80.4% (绝对改进7.6%), MultiNLI准确度达到86.7% (绝 对改进5.6%). 成为NLP发展史上的里程碑式的模型成就.

总体架构 : 如下图所示, 最左边的就是BERT的架构图, 一个典型的双向编码模型

从上面的架构图中可以看到, 宏观上BERT分三个主要模块 :

  • 最底层黄色标记的Embedding模块
  • 中间层蓝色标记的Transformer模块
  • 最上层绿色标记的预微调模块

 Embedding模块 BERT中的该模块是由三种Embedding共同组成而成, 如下图:

双向Transformer 模块

BERT中只使用了经典Transformer架构中的Encoder部分, 完全舍弃了Decoder部分. 而两大预训练任务也集中体现在训练Transformer模块中

BERT的预训练任务:见BERT的预训练任务

AE模型总结:

  • 优点
    • BERT使用双向transformer, 在语言理解相关的任务中表 现很好.
  • 缺点
    • 输入噪声:预训练-微调存在 差异
    • 更适合NLU任务, 不适合用   NLG任务

3.  自回归模型(Autoregressive model,AR)

代表模型GPT

  • AR模型,代表作GPT其特点为:Decoder-Only
  • 基本原理:从左往右学习的模型,只能利用上文或者下文的信息
  • AR模型通常用于生成式任务,在长文本的生成能力很强, 比如自然语言生成(NLG)领域的任务:摘要、翻译或抽象问答

2018年6月, OpenAI公司发表了论文“Improving Language Understanding by Generative Pre-training ”《用生 成式预训练提高模型的语言理解力》, 推出了具有1.17亿个参数的GPT(Generative Pre-training , 生成式预训练) 模型

AR模型总结:

  • 优点
    • AR模型擅长生成式任务
    • AR模型生成数据较容易
  • 缺点
    • AR模型不能完全捕捉token的内在联系.

总结:

  • 1. 什么是自回归模型?
    • 答案:从左往右学习的模型,只能利用上文或者下文的信息
  • 2.GPT模型的核心架构?
    • 答案:transformer的Decoder模块(去除中间的第二个子层)
  •  3.GPT的预训练任务?
    • 答案:无监督的预训练 和 有监督任务的微调

4. 序列到序列模型(Sequence to Sequence Model- Seq2Seq)

代表模型T5

encoder-decoder模型同时使用编码器和解码器,它将每个task视作序列到序列的转换/生成(比如,文本到文本,文本 到图像或者图像到文本的多模态任务),Encoder-decoder模型通常用于需要内容理解生成的任务, 比如机器翻译

T5 由谷歌提出,该模型的目的为构建任务统一框架:将所有NLP任务都视为文本转换任务

通过这样的方式就能将 NLP 任务都转换成 Text-to-Text 形式,也就可以用同样的模型,同样的损失函数,同样的训练过程,同样的解码过程来完成所有 NLP 任务

T5模型架构与训练过程:

        T5模型结构与原始的Transformer基本一致,除了做了以下几点改动:

  • 采用了一种简化版的Layer Normalization,去除了Layer Norm 的bias;将Layer Norm放在残差连接外面
  • 位置编码:T5使用了一种简化版的相对位置编码,即每个位置编码都是一个标量,被加到 logits 上用于计算注意力权重。各层共享位置编码,但是在同一层内,不同的注意力头的位置编码都是独立学习的
  • 自监督预训练
    • T5 在预训练阶段采用了类似于 BERT 和 GPT 的大规模自监督学习策略,但与这两个模型的设计不同的是,T5 使用了 “文本到文本 ”的格式来处理任务。 预训练任务包括两种类型:Causal Language Modeling(因果语言建模) 填空任务(Masked Language Modeling - MLM
  • 多任务微调
    • 除了使用大规模数据进行无监督预训练,T5模型还可以利用不同任务的标注数据进行有监督的多任务预训练,例如    SQuAD问答机器翻译等任务

T5数据集与模型的特点

 encoder-decoder模型总结:

  • 优点
    • 处理多种NLP任务, 具有良好的可扩展性
    • 相比GPT-2、GPT3等模型, T5参数量相对较少,训练速度更快
  • 缺点
    • 训练时间较长、需要更大的算力
    • 模型的可解释性不足

总结:

  • 1. 什么是序列到序列模型?
    • 答案: 同时使用编码器和解码器,它将每个task视作序列到序列的转换 /生成
  • 2.T5模型的核心架构?
    • 答案:transformer架构
  • 3.T5的预训练任务?
    • 答案:采用了类似于 BERT 和 GPT 的大规模自监督学习策略,预训    练任务包括两种类型:Causal Language Modeling(因果语言建模)和 填空任务(Masked Language Modeling)

5. 大模型主流架构-Decoder-only

  •  LLM之所以主要都用Decoder-only架构,除了训练效率和工程实现上的优势外,在理 论上是因为Encoder的双向注意力会存在低秩问题,这可能会削弱模型表达能力就生成任务而言,引入双向注意力并无实质好处
  • 而Encoder-Decoder架构之所以能够在某些场景下表现更好,大概只是因为它多了一 倍参数,所以,在同等参数量、同等推理成本下,Decoder-only架构就是最优选择了

总结:

  • 1.LLM主要类别架构?
    • 答案:Encoder-Only、Decoder-Only、Encoder-Decoder
  • 2. 自编码模型的基本原理
    • 答案:是在输入中随机MASK掉一部分单词,根据上下文预测这个词
  • 3. 自回归模型的基本原理
    • 答案:从左往右学习的模型,只能利用上文或者下文的信息
  • 4.序列到序列模型的基本原理
    • 答案: 同时使用编码器和解码器. 它将每个task视作序列 到序列的转换/生成

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

【下一篇】【AI大模型应用开发】【基础】3.ChatGPT模型原理介绍

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐