NLP--基础知识

25 年 12 月 25 日 星期四 (已编辑)
11244 字
57 分钟

传统知识

自动分词

  • 词是自然语言处理的基本单位
  • 通过空格或者词形变化来进行分割
  • 不同的分词方法可能语意不同

自动分词方法一: 最大匹配法

  • FMM(正向): 从左往右
  • BMM(逆向): 从右往左 核心思路:
  1. 选择字符序列
  2. 在词典中进行查找 3.1 找到了: 切割(加上分词符),继续扫描文本 3.2 没找到: 去掉最右边的词语

自动分词方法二:基于语言模型的分词方法

[!NOTE] 马尔科夫链的思路,第 K 个词只跟前 K-1 个词有关

核心思路:

  1. 建立 n 元语言模型,计算每一个词在给定上下文出现的条件概率
  2. 构建 n 元的切分词图,图中的节点表示可能的词候选,边表示路径,计算词在当前位置的前 n-1 个词的下的条件概率为边的权重
  3. 利用相关搜索算法(要求动态规划,因为这个词与前 n-1 个词都有关)找出 图中代价最小的路径 作为分词结果

自动分词方法三:基于最短路径的分词方法

与 "基于语言模型的分词方法" 不同的就是,节点之间的权重并非基于条件概率,其实要不就是权重为1找最短路,就是不满足于"因为这个词与前 n-1 个词都有关"这条件,每一次相对独立。

[!NOTE] 相关一些指标:

召回率(R): 系统认为的正确结果 / 所有正确的答案个数 准确率(P): 系统输出的正确结果 / 系统所有输出结果个数 测度值F1: 2 * PR / (P+R)

命名实体识别(NER)

其实就是句子中一些特定的实体名词:人名,地名,组织机构,数字日期

BIO 标注

B 表示实体的开头,I表示实体的中后部分,O表示不属于实体的词 核心思路: 给定一个字符序列,预测每一个字符的BIO标签

词性标注

词性是词汇基本的语法属性 相关标注方法:

  • 基于规则的方法: 相关语法规则
  • 基于统计模型的方法: 从大量数据中学习得到的结果
  • 基于规则与统计的结合

句法分析

分析句子的语法结构,来确定句子中每个词语之间的语法关系 有两种类型:

  • 短语结构分析
  • 依存句法分析

上下文无关文法

常见的短语类型:

  • NP 名词短语
  • VP 动词短语
  • PP 介词短语
  • ADJP 形容词短语
  • ADVP 副词短语
  • S/IP 句子
  • Det 限定词 常见的 VP 还可以分成 V NP(所以可以通过这样不断拆分,从 S 开始,形成一个句法树)

句法分析方法

分析句子中的词语的依存关系: 支配者为发出端,被支配者为箭头端 其实就是画一个二维表格,观察先给每一个词定性,然后再观察他能不能和前面或者后面连接变成新的,比如: Det + N = NP, V + N = VP 可以将 这个二维表格 理解成一个 动态规划表格DP[i][j],表示 i 到 j 能构成一个什么。

语义分析

其实就是再分析句子的结构的基础上,去推理句子的意思,比如

Love You and I don't like your swear。 可以变成 Love(I,You) ^ ~Love(I,your swear)

词义消歧算法:

  • 简单最近邻算法: 找意思最相近的句子中的词义
  • 基于特征的WSD算法:将上下文拆成很多线索,学习这些线序和词义之间的关系
  • Lesk算法:选择词义(字典注释)和上下文交集更大的意思

词向量

概述

将文本元素转化为数值数据,我们将这些表示称为词向量,词嵌入,词表示,其实就是将文本转化为向量形式

文本的表示方法

  1. 独热表示(One-hot) 将每一个词汇都变成一个唯一的向量,相当于有多少个词就有多少维度,每一个词仅有一个地方是1,其他都是 0 1.1 存在的问题:
  • 维度灾难: 随着特征空间的维度增加,数据的分布变得更为稀疏,需要更长维度的向量去表示词汇
  • 无法度量语义的相关性: 任意两个词之间的距离都是 2 \sqrt{2} 
  1. 分布式表示 通过训练将语言中的每个词汇都映射到一个固定长度的实数向量上 2.1 存在的问题:
  • 不能体现句子的语义结构信息:在不同的句子中,词向量都是一样的

补充背景知识: MLP

相关的参数计算: 每一层的参数: Parameters=(Nin×Nout)+NoutParameters = (N_{in} \times N_{out}) + N_{out}

Word2Vec模型

Word2Vec 模型中包括了 CBOW模型 和 Skip-gram 模型

CBOW 模型(多词上下文模型)

其目标是根据 Wt(Wt1,Wt2,Wt+1,Wt+2)W_t(W_{t-1},W_{t-2},W_{t+1},W_{t+2}) 来预测W_t 其中应用的 Softmax 函数,是一个归一化取平均的函数

σ(zi)=eziezj\sigma(z_i) = \frac{e^{z_i}}{\sum e^{z_j}}

模型架构

  1. 输入层 以 wtw_t 作为中心词的上下文作为输入,每个词通过独热编码向量 X(K)X^{(K)} 来表示

  2. 投影层 上下文中的每个词 X(K)X^{(K)} 经过相同的词向量矩阵W( d×Vd \times V )[这个很重要,W 表示预选词矩阵],得到 向量vKv_K, 然后将词向量累加平均(聚合上下文信息):

    V=12MvkV = \frac{1}{2*M} \sum v_k
  3. 输出层 然后将聚合的VV 通过参数矩阵 W'变化,再经过 softmax 得到 概率向量,得到每一个预选词的概率

    Y=softmax(VTW)Y = softmax(V^{T}W)
  4. 损失函数 常用的度量方式为 交叉熵

    H(y,y^)=yjlog(y^j)H(y, \hat y) = - \sum y_j \log(\hat y_j)
  5. CBOW 的优化目标:

    minJ=logP(wTcontext)min J = - \sum logP(w_T|context)
  6. CBOW 的时间复杂度为:

    O(N×D+D×V)O(N \times D + D \times V)

层次Softmax

将所以预选词汇作为叶子节点构建一颗二叉树(决策树)-- 哈夫曼树 每一个预选词的概率是 P(studyC)=Pn0(leftC)Pn1(rightC)P(study|C) = P_{n_0}(left|C)P_{n_1}(right|C) 并且使用 sigmod 进行建模: Pn(leftC)=sigmod(θV)P_n(left|C) = sigmod(\theta V)

sigmod 函数:

Skip-gram模型

以单个单词作为输入,以预测其上下文环境出现的多个词

模型架构

  1. 输入层: 输入X是单词WtW_t的独热表示

  2. 投影层: Vt=W×XV_t = W \times X

  3. 输出层: 通过 VtTWV_t^TW' 得到 2m 个输出向量,并且通过 softmax 的得到真是输出的概率分布

  4. 训练复杂度: 2m×(d+d×logV)2m \times (d + d \times \log|V|)

  5. 优化目标:

    minJ=logP(Wtm.....,Wt+mwt)min J = -\sum logP(W_{t-m}.....,W_{t+m} | w_t)

GloVe模型

结合了Word2Vec模型的Skip-gram优势,同时利用了全局词频统计信息,通过矩阵分解技术可以有效地获取单词向量表示。它可以把一个单词表达成一个由实数组成的向量,用于捕捉单词之间的语义特性,比如相似性、类比性。

比如 官人 - 文人 + 武功 \rightarrow 武将 实现步骤:

  1. 构建共现矩阵 XX XijX_{ij} 表示 i 和 j 再一定的上下文窗口内共同出现的次数

  2. 构建词向量与共现矩阵的关系

    wiTwj+bi+bj=log(Xij)w_i^Tw_j + b_i + b_j = log(X_{ij})
  3. 构建损失函数: 一般的损失函数构建都有一个原则,就是最小化预测值和实际值之间的误差来学习词向量

ELMo模型

特点:生成的词向量是 上下文相关的综合前向和后向信息

  • 预训练: 无监督预训练,结合双向长短时记忆网络的神经网络结构
  • 微调: 特定的监督学习任务

统计语言模型

语言模型: 用于计算词序列概率分布的模型,用于评估词序列的合理性

N-gram 模型(N 元文法模型)

当前词的出现概率与其前 N-1 个连续的词相关,其实就是这个词的概率与前 N - 1个词相关,形成条件概率分布 缺陷: 数据稀疏问题: 训练数据中某些词从未出现,导致上下文信息不足,导致模型在估计这些词概率的时候出现 0 概率

平滑技术

  • 加一平滑: 避免概率为1,每一种情况出现次数 加1
  • 加 K 平滑: 给每一个统计单元的频数增加一个常数 K
  • 插值平滑: 利用不同阶数的 N-gram 模型来估算概率,取线数平均(每一个阶加一个参数控制)
  • 绝对值平滑: 给每一个频数 减去固定的 d 取平均值

神经语言模型(参数计算[Important])

[!NOTE] 解决了 N-gram 什么问题?

  1. 泛化能力差 2. 性能依赖语料库 3. 处理相似上下文信息表现不佳 (维度灾难)

神经概率语言模型

基于神经网络的参数化建模方式 需要满足的条件是:

概率约束条件

为了确保模型输出是一个有效的概率分布,需要满足如下要求:

  1. 概率归一性约束: 所以条件概率和为1
  2. 非零概率约束: 每个可能的词的条件概率大于0

模型架构

  1. 词向量学习(词嵌入层): 将离散的词转化为 连续的向量(能够不中词之间的语义关系) ,将词汇表V中的每个词映射成 m 维度的向量

  2. 隐藏层: 利用神经网络将词向量进行非线性变化,最终输出一个 符合条件的分布,常见隐藏层框架:

    xh=tanh(bh+Hxh)x_h = tanh(b_h + Hx_{h})

    其中 H 是参数矩阵

  3. 输出层:

    yt=bo+Wxt+Uxhy_t = b_o + Wx_t + Ux_h
  4. 总架构:

    y=b+Utanh(d+Hx)+Wxy = b + Utanh(d + Hx) +Wx

    注意其中的 x 是拼接后的 X (1×(n1)m1 \times (n - 1)m),为什么有一个维度是1,因为这个词向量是从 C 中选取出词向量的

  5. 参数规模

    C:V×m+b:V+W:V×(n1)m+V×h+d:h+H:h×(n1)mC:|V| \times m + b:|V| + W:|V|\times (n-1)m +|V| \times h + d:h + H:h \times (n-1)m

具体实现过程

目标函数

L=1TlogF(wt,wt1...,wtn+1;θ)+R(θ)L = \frac{1}{T}\sum log F(w_t,w_{t-1}...,w_{t-n+1};\theta) + R(\theta)

梯度更新规则

采用随机梯度上升法

θθ+σ(dao)\theta \leftarrow \theta + \sigma(dao)

基于循环神经网络的语言模型(RNNLM)

解决了全连接神经网络的什么问题?

  1. 缺乏时序结构 2. 缺乏记忆能力

通俗来说,就是语言预测,由于窗口有限,有可能这句话跟很前面的话有关,加入循环神经网络,让模型有了记忆力 优点:

  1. 具有层间反馈连接
  2. 可维护隐状态序列来捕捉上下文依赖
  3. 输入序列长度可变(处理任意长序列)

我可以理解的就是如果预测 hth_t,我可以加入ht1h_{t-1}的信息,用来保存过去信息

循环神经网络

网络结构

  1. 输入:一段时序数据{ xt1,xt,xt+1x_{t-1}, x_t, x_{t+1} }

  2. 隐藏状态

    ht=σ(zt)=σ(Uxt+Wht1+b)h_t = \sigma(z_t) = \sigma(Ux_t + Wh_{t-1} + b)
  3. 网络输出: yt=σ(Vht+c)y_t = \sigma(Vh_t + c)

  4. 常见架构

  • 多对一结构:用于情感分析,文档分类,总结类工作
  • 一对多结构: 文本生成,图像生成
  • 多对多结构: 词性标注,机器翻译,视频帧预测

RNNLM 模型原理结构

  1. 输入层 在 t 时刻的输入向量 x(t) 是由 t 时刻的词向量 w(t) 和 t-1时刻的隐藏状态s(t-1)进行计算

    x(t)=w(t)+s(t1)x(t) = w(t) + s(t-1)
  2. 隐藏层

    s(t)=σ(Uxt+Wht1+b)s(t) = \sigma(Ux_t + Wh_{t-1} + b)
  3. 输出层

    y=softmax(Vs(t)+c)y = softmax(Vs(t) + c )
  4. 罕见词处理 如果出现次数小于阈值,会引入一个 罕见词类别,将所有罕见词的概率归为一类

  5. 训练方式

  • 截断的时间反向传播:在固定长度的时间窗口内进行梯度计算和反向传播
  • 批量梯度下降法: 使用一小批训练样本来计算梯度和更新权重: (1) 加速训练 (2) 梯度更平稳,避免陷入局部最优解
  • 梯度裁剪: 当梯度范数超过阈值,对梯度进行裁剪,保证模型训练的稳定性

预训练语言模型

通过在大规模未标记文本数据上自监督学习,训练通用的语言表示

Seq2Seq 模型

[!NOTE] RNN: 存在的限制,由于输入输出的长度固定,不适用处理输入和输出长度不固定的任务

Seq2Seq由**编码器(Encoder) 和 解码器(Decoder)**两个部分组成,适用于 NMN \rightarrow M 的模型输出 结构: EncoderCdecoderEncoder \rightarrow C \rightarrow decoder​ 将输入序列转化为一个 固定长度的上下文向量 C

编码器(Encoder)

核心公式为:

ht=g(Uht1+Wxt)h_t = g(Uh_{t-1} + Wx_t)
  1. 接受长度为 N 的输入序列 x1,...,xNx_1,...,x_N
  2. 通过 RNN生成一系列隐藏状态 h1,h2,...,hNh_1,h_2,...,h_N
  3. 生成上下文向量 C
  4. 常用的C选择:
  • C=hNC = h_N
  • C=q(hN)C = q(h_N)
  • C=q(h1,h2,...,hN)C = q(h_1,h_2,...,h_N)

解码器(Decoder)

核心公式为:

  1. 更新状态 初始状态: s0=snes_0 = s^e_n st=F(st1,yt1,C)s_t = F(s_{t-1},y_{t-1},C) 其中的 yt1y_{t-1} 是上一个时间步的输出(这里引出了 Free-running 的缺陷)
  2. 计算概率: P(yt)=Softmax(Woutst)P(y_t) = Softmax(W_{out} s_t)

模型训练与使用技巧

  1. Free-running Free-runing 是 RNN 等模型的常见训练方法,将上个时间步的输出作为下个时间步的输入 问题: 训练初期,参数没有充分优化,可能将错误的输出作为后续时间步的输入,进而影响后续的参数调整,导致模型难以正确学习序列的长距离依赖

  2. Teacher Forcing 思想 在训练过程中,模型中的每一步输入使用真实的目标序列,就是 Free-running 是将上一步预测的输出作为下一步的输入,但是 Teacher Forcing 是将上一步的真实标签(不是预测的,预测的可能不正确)作为下一步的输入

  3. 束搜索(Beam Search) 推理阶段无法使用 Teaching Forcing 在每一个时间步保留多个概率大的输出选项,然后基于这些输出再去进行扩展(下一步的输出与上一步有关),时间复杂度O(kyT)O(|k||y|T|)

  4. 穷举搜索 穷举所有可能的输出序列,时间复杂度O(yT)O(|y|T)

  5. 贪心搜索 在每个时间步 t 选择概率最高的单词作为输出

注意力机制

其实就是 编码器将输入序列编码成一个固定长度的向量,将信息取平均这个想法不合理,会存在重要信息丢失,所以能不能只关注输入序列中最重要的信息?

定义

输入不是被编码成单一的上下文向量,根据输出的每个时间步,根据"注意力"重新计算关于输入序列的上下文向量C

核心思想: 从全局信息中筛选出局部且关键的信息

核心公式

每一个时间步的上下文向量cic_i

ci=(aijsj)c_i = \sum(a_{ij}s_j)

其中 aija_{ij} 表示注意力系数,解码器中sjs_j 前面时间步的隐藏层向量,yty_t 表示输出

si=G(yi1,si1,ci)s_i = G(y_{i-1}, s_{i-1}, c_i) yi=F(yi1,si,ci)y_i = F(y_{i-1}, s_{i}, c_{i})

Transformer 模型

前置知识

  1. 上下文嵌入 词向量不是一成不变的,会结合当前词向量的上下文中向量(注意力机制)进行聚合

  2. 因果自注意力机制 就是 我在当前时间步的时候,我看不到我后面时间步的输入信息,只能看到前面的

注意力头(Q,K,V) -- 单个向量

  1. 相关计算

    qi=xiWQ,kj=xjWK,vj=xjWVq_i = x_iW^Q , k_j = x_jW^K , v_j = x_jW^V

    我的理解: Q 表示 我的特征,K 表示他的特征, V 表示他的核心特征(这个 WQ,WK,WVW^Q, W^K, W^V 都有特征提取的功能,一般会进行降维操作)

  2. 核心(i, j)向量的关联程度

score(xi,xj)=qi,kjdkscore(x_i,x_j) = \frac{q_i, k_j}{\sqrt{d_k}}

其中 dkd_k 是向量维度

  1. 算权重

    aij=softmax(score(xi,xj)),allji(Mask)a_{ij} = softmax(score(x_i, x_j)), all j \leq i(Mask)
  2. 加权求和

    headi=jiaijvjhead_i = \sum_{j \leq i} a_{ij}v_j
  3. 输出投影 调整维度

    ai=headiWOa_i = head_i W^O

多头注意力机制

认为单个自注意力被认为是关注输入数据的某个方面,所以叠加实现多个头并行

  1. 输入 将文本通过分词算法得到长度为 N 的词元,再进一步得到向量序列(Embedding): 由两部分组成: 词元嵌入 + 位置嵌入(相加计算),维度为

    RN×d\mathbb{R}^{N \times d}
  2. 位置嵌入: 位置嵌入是用来表示词元再序列中的绝对/相对位置,赋予模型有顺序感知的能力 位置向量的第i个特征维度:

PE(pos,2i)=sin(pos10002i/d)PE_{(pos, 2i)} = sin(\frac{pos}{1000^{2i/d}}) PE(pos,2i+1)=cos(pos10002i/d)PE_{(pos, 2i+1)} = cos(\frac{pos}{1000^{2i/d}})

d 是特征维度

  1. 编码 通过 编码(Encoder) 操作得到编码矩阵 C

  2. 解码 解码过程有一个重要的特色,就是为了防止模型看到"未来的信息",所以使用了 掩码机制来遮盖当前位置之后的信息

模型细节

其中的 Inputs(原始数据), Output(答案) 是 Teaching Forcing的体现

单头注意力

首先我们先计算 Q,K,VQ, K, V 矩阵

Q=XWQ,K=XWK,V=XWVQ = X W_Q, K = X W_K, V = X W_V

其中的 Q 我可以理解成自己的特征,K表示他的特征,V 表示他的核心特征 Q表示查询,K表示教材中的索引(标签),V 表示教材中的实际内容 然后:

Attention(Q,K,V)=softmax(QKTdk)VAttention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})V

其中的 Softmax: 是针对于 一个词向量来进行的 Softmax 归一化

softmax(xi)=exiexjsoftmax(x_i) = \frac{e^{x_i}}{\sum{e^{x_j}}}

多头注意力

其实就是 将单头注意力的矩阵进行 拼接,然后通过一个 WOW^O 的矩阵输出 Rn×d\mathbb{R}^{n \times d} 其中的参数矩阵:

WQi:Rn×dv,WKi:Rn×dv,Wki:Rn×dvW^i_Q: \mathbb{R}^{n \times d_v}, W^i_K: \mathbb{R}^{n \times d_v}, W^i_k: \mathbb{R}^{n \times d_v}

其中的 dv=dheadsd_v = \frac{d}{heads}

相加 & 归一化

层归一化是一种正则化技术,XiX_i被映射成 Xiuσ\frac{X_i - u}{\sigma} ,以及存在残差连接的形式:

LayerNorm(X+MultiHeadAttention(X))LayerNorm(X + MultiHeadAttention(X))

关于层归一化的标准实现:

y=xE[X]Var[x]+θα+βy = \frac{x - E[X]}{\sqrt{Var[x] + \theta}}* \alpha + \beta

但是我们还是根据XiX_i映射成 Xiuσ\frac{X_i - u}{\sigma},所以我们要学会计算 u 和 σ\sigma

u=xiNu = \frac{\sum x_i}{N}

以及,

σ=(xiu)2N\sigma = \sqrt{\frac{\sum(x_i - u)^2}{N}}

前馈神经网络

其实就是卷积神经网络的架构,

Xl+1=σ(XW+b),σ=RELU(X):max(0,x)X_{l + 1} = \sigma(XW + b), \sigma = RELU(X):max(0, x)

这个 b 是 XW 的每一层都需要加的

解码过程

编码中的输出作为 解码器中的第二个多头注意力中的 K,V(前面我说过这个是作为别人的特征),然后 Q(我的特征) 来自解码器模块中的第一个(掩码)多头注意力机制的输出

  1. 掩码多头注意力机制: 为了生成任务只能关于当前位置以及其之前的词元,采用了因果自注意力 简单的理解就是:

    Attention(Q,K,V)=softmax(QKTdk+M)VAttention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}} + M)V

    其中 M 就是掩码矩阵要将矩阵的右上角盖住,一般采用的是一个右上角全部为负无穷的矩阵

  2. 交叉注意力机制 其实就是 第二次多头注意力模块前面的输入有一部分是 编码器中的(K, V [ n×dn \times d] ), 有一部分是掩码多注意力机制的(Q[m×dm \times d]),但是经过这个 多注意力模块的输出维度是 Rm×d\mathbb{R}^{m \times d}

  3. 预测: 通过 Softmax 进行概率预测

训练推理

Decoder 的输入序列是将正确答案放入其中的(采用 Teacher Forcing),他并不依赖于前面的结构,所以可以进行并行计算

训练复杂度

针对于 RNN 结构: 时间复杂度是 O(nd2)O(nd^2),不能够并行 针对于自注意力结构: 时间复杂度是 O(n2d)O(n^2d),能够并行,不适合 长序列

预训练语言模型

Bert模型(Encoder-Only)

其中设计了两个预训练任务:

  • 掩码语言模型(MLM):将词元遮盖住,猜遮盖住的部分是什么?(被Mask的就是训练的标签)
  • 下一句预测(NSP):推理句子之间的关联性

GPT 模型(Decoder-only)

GPT—1 是 由 12层的 Transformer 解码器构建而成(decoder-only)

GPT Vs BERT

  1. GPT 是单向语境, BERT 是考虑了上下文信息
  2. GPT 是根据给定的上下文预测下一个值(因果语言模型),BERT 是类似填空

BERT:

  • 双向
  • 仅编码器
  • 掩码语言模型(自编码)
  • 面向理解任务

GPT:

  • 单向(仅关注上文)
  • 仅解码器
  • 因果语言模型(自回归:根据已经说过的话去预测下一个字)
  • 面向生成任务

大语言模型架构

基于 Transformer 的模型架构

首先Transformer 的核心部分有编码器解码器 所以主流架构有:

编码(Encoder)大语言模型

基本特征:

  • 也被称作表示模型(句子分类, Token 分类,问答任务)
  • 使用 编码器提取文本特征和语义信息,使用掩码技术进行训练

ALBERT 模型

参数矩阵大小从 O(V×H)O(V \times H) 降低到 O(V×E+E×H)O(V \times E + E \times H) 其中 VV 是词汇表大小,H 是隐藏层维度

  1. 做法: 将单词映射到一个小的 E,然后在通过全连接映射到一个 大的H
  2. 跨层参数共享: BERT 有12个自注意力层,每一层的参数不同,ALBERT 的12层采用相同的参数进行训练(参数共享)
  3. SOP(句子顺序预测),让模型真正读懂句子之间的因果关系

RoBERTa

  • 移除 NSP(句子关联性) 任务
  • 引入动态掩码机制: 将训练数据复制多份,随机改变 训练数据中的 Mask 位置
  • 调整数据规模,调整训练batch
  • 字节对编码

解码(Decoder)大语言模型

基本特征:

  • 也被称为生成模型
  • 解码器处理输入的上下文信息,采用自回归生成方式逐步生成输出序列

典型模型1 GPT:

  1. GPT-1: 生成式预训练(无监督) + 判别式任务精调(有监督)
  2. GPT-2
  • 核心思想: 当模型规模足够大,数据充分,可以直接用模型学习完成其他任务,无需进行微调
  • 单向 Transformer(GPT-1 也用)
  • 零样本学习:预训练的模型可以直接应用于多种下游任务没无需进行训练微调
  • 多任务学习框架: 设计了一个多任务学习框架,减少对特定任务的依赖
  1. GPT-3
  • 增加词向量长度
  • 增加上下文窗口
  • 引入新的注意力机制(局部带状稀疏注意力: 将注意力限制在一个局部区域内)
  • 使用局部敏感哈希技术

典型模型2 LLaMA 模型

  • 基于公开数据集进行训练
  • 引入 RMSNorm 归一化处理: 增强训练稳定性
  • 采用 ROPE策略: 有效处理不同长度的文本序列
  • 使用 SwiGLU 激活函数: 提升模型的表达能力

编解码大语言模型

使用编码器对输入序列进行编码,提供文本序列中的特征和语义信息,然后在通过解码器,生成相应的输出序列 缺陷: 模型复杂度高,训练时间和计算资源消耗大

典型模型1: GLM 模型

非 Transformer 的模型架构

FAT模型

Transformer的弊端: 注意力机制的时间复杂度为 O(N2)O(N^2) 其实就是

Attention(Q,K,V)=softmax(QKTd)VAttention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d}})V

以前是:(Q×KT)×V(Q \times K^T) \times V 现在改成了 Q×(KT×V)Q \times (K^T \times V) 但是这样不能直接用 softmax,所以引入了 核函数来近似Softmax(替代 Softmax)

AFT模型

不再计算 Q,K 的相似度了,直接对 V 进行加权处理,加入了一个 可学习的位置偏差矩阵 w来弥补空间信息的缺失

RWKV模型

训练的时候是 类似于 AFT 的并行形式(可以并行计算) 推理的时候是 类似于 RNN 的递归形式,显存恒定,速度很快(不需要去回头看所有词,只需要上一个状态)

大模型架构配置

层归一化技术

  1. 典型技术
  • 层后归一化: 加速神经网络的训练收敛速度
  • 层前归一化: 防止梯度爆炸或梯度小时
  • 夹心归一化: 有时候不能稳定大语言模型训练
  1. 相关计算:
  • 计算均值:u=1Nxiu = \frac{1}{N} \sum x_i
  • 计算方差: σ=1N(xiu)2\sigma = \frac{1}{N} \sum (x_i - u)^2
  • 归一化: xnorm=xuσ2+θx_{norm} = \frac{x-u}{\sqrt{\sigma ^2 + \theta}}

RMSNorm 归一化

  • 计算均方根: RMS(x)=1Hxi2RMS(x) = \sqrt{\frac{1}{H}\sum x_i^2}
  • 归一化: x˙i=xiRMS(x)\dot x_i = \frac{x_i}{RMS(x)}

激活函数

  • RELU: max(0,x)\max(0, x)
  • GELU: 0.5x(1+erf(x2))0.5x \left(1 + \text{erf}\left(\frac{x}{\sqrt{2}}\right)\right)
  • GLU: σ(xW)(xV)\sigma(xW) \otimes (xV)
  • Swish: xσ(βx)x \cdot \sigma(\beta x)
  • SwiGLU: Swishβ(xW)(xV)\text{Swish}_{\beta}(xW) \otimes (xV)

[!TIP] 符号说明: σ\sigma: Sigmoid 函数 erf\text{erf}: 高斯误差函数 \otimes: 逐元素相乘 (Hadamard product) W,VW, V: 可学习的权重矩阵

位置编码

  1. 绝对位置编码
  • 缺乏动态性
  • 处理长距离依赖和长序列的能力有限
  1. 旋转位置编码:

注意力与偏置

  1. 双向注意力机制 结合正向和反向的上下文信息(BERT)
  2. 单向注意力机制 只考虑一个方向上的上下文信息(GPT)

控制模型输出随机性的两个方法:

  1. top-p(控制候选词,既要保证模型语言丰富性,又要保证逻辑性)
  2. 温度(温度高,概率压缩,所以选择的变化大)

多模态大模型架构

处理和整合多种模型和数据类型(文本,图像,音频等)

ViT(Vision Transformer)模型

利用Transformer 架构处理图像识别问题的深度学习模型

核心架构

  1. 图像嵌入模块 其实就是将图像分成图像块(可以理解成是字),然后再拼接(Concat)成一行 然后再通过 线性映射层 转化成 N(分成了多少个词) ×\times D 的矩阵,即图块嵌入

    [!WARNING] 注意: 再图块嵌入的开头加入了一个 D 维嵌入 xclassx_{class} 用来总结图像的整体信息 然后再加入位置编码: 图块嵌入 + 位置编码 \rightarrow 图特征向量

  2. 编码 Vit 堆叠了若干个 Transformer 编码器来进行图像中的特征提取

  3. 分类 将 xclassx_{class} 的编码器输出 zL0z_L^0​ 作为图像表示,这个向量包含了图像的全局信息,实现图像分类, 其中: 在预训练阶段,使用具有一层隐藏层的多层感知机作为分类头, 在微调过程中,使用单层线性映射作为分类。

CLIP模型

基于 对比学习的多模态模型(通过对比正反两方面的实例来提取有意义的表征) 目标: 通过对比学习,模型学习到 文本-图像的匹配关系

  • 可以实现零样本分类: CLIP 通过对比学习,学习到图像和文本之间的丰富语义关系(利用在训练过程中学到的通用知识和类别来描述)

模型架构

  1. 文本编码器 提取文本特征,常用面向文本的 Transformer 模型,一般是 隐藏状态为512维度,有 12层网络结构,每层配8个注意力头
  2. 图像编码器 提取图像特征,用于CNN模型或者 Vit 模型

训练过程

  1. 数据特征提取
  • 文本编码器对N个文本进行编码,得到的训练批次文本数据输出的特征矩阵为: T = [T1,...,TNT_1,...,T_N],其中 T:RN×d\mathbb{R}^{N \times d}, Tj:RdT_j: \mathbb{R}^d

  • 图像编码器对这 N 个图像进行编码,特征维度和文本的特征维度一致

  1. 相似度计算 将每一个图像特征向量和文本特征进行组合(二维矩阵,构成 N2N^2 个特征对)
  • N2N^2个特征对中,将 N个完成匹配的图像-文本对记作正样本,其他是负样本
  • 使用余弦相似度来计算每对特征之间的相似度
  1. 对比学习 得到正负样本之间的相似度之后,在使用对比损失函数(如 InfoNCE) 来计算损失 优化目标: 最大化对角线(正确匹配)的数值,最小化其他的数值,目标函数写作 min[othertrue]min[\sum other - \sum true]

核心特点

  • 图像检索: 通过相似性计算,来找到最配的图像
  • 将文本和图像转化到统一嵌入空间,实现了无需训练新类别的零样本检测

BLIP模型

既能理解图像和文字,又能解释图片(用文本解释) 反复从样本集中抽取(有放回的),产生大量虚拟的数据集

  • 数据清晰功能(CapFilt)(训练了一个 基础模型,用来给网络上的模型打标签和过滤)
  • 多模态编码器-解码器混合(MED):图像文本对比学习,图像文本匹配(ITM 二分类任务),基于图像的语言建模(LM,训练模型以自回归的方式来生成相应的文本描述)

主要组件

视觉编码器 \rightarrow 文本编码器 \rightarrow 视觉文本编码器 \rightarrow 视觉文本解码器

  1. ITC 图文对比目标函数:图文对比学习
  2. ITM 图文匹配目标函数: 预测图像文本匹配
  3. LM: 训练模型通过自回归来生成相应的文本描述

CapFilt 算法

Web数据 \Rightarrow MED(多模态编解混合) \Rightarrow Filter(根据 ITC 和 ITM 进行微调) 和 Captioner(LM微调) \Rightarrow Captioner的文本和Filter 的图像进行匹配

BLIP-2模型概述

BLIP:

  • 大量的数据和复杂的模型,导致重新端到端训练成本高
  • 单模态模型并入多模态模型联合训练,可能会导致灾难性遗忘

BLIP2: 预训练阶段冻结 单模态模型参数(视觉编码和文本编码)

  • 显著降低训练成本
  • 避免了单模态模型的遗忘问题。

大模型预训练

预训练数据工程

预训练数据源

大模型预训练性能高度依赖:

  • 预训练语料库质量与规模
  • 数据预处理的策略和方法

多模态数据可以存进大模型预训练,让模型具备更强的泛化能力

数据处理

主要剔除数据集中的噪声,冗余信息,无关数据,以及有害内容

  1. 质量过滤
  • 分类器法:训练一个小型分类器来判断文本质量
  • 规则判断:认为设置规则过滤
  • 指标阈值:设置特定指标筛选
  • 聚类方法:筛选指定类别数据
  1. 去重效果
  • 提高训练效率
  • 减少训练集和测试集的重叠
  • 防止数据导致过拟合
  1. 隐私删除
  • 分类器法
  • 规则判断
  1. 分词化
  • 基于单词,字符,字词

数据与模型性能的关系

  • 噪声数据:对模型训练和性能产生负面影响
  • 有毒内容:识别毒性能力提高,影响模型
  • 重复内容: 影响模型对有效信息的抽取能力

预训练方法

只要学到的知识足够多,任何有监督任务都可以通过无监督的方式来完成,即任何任务都能视作生成任务4

  1. 去噪自编码: 加入噪声,提高模型的鲁棒性

优化参数设计

  1. 批量训练 大批量可以减少梯度噪声,训练过程更为稳定,加速收敛
  2. 学习率 采用动态学习率调整策略,平衡训练速度和稳定性
  3. 优化器
  • SGD计算效率高,收敛速度较慢
  • RMSprop: 收敛速度快,稳定性高
  • Adam: 动态调整每个参数的学习率
  • AdamW: 收敛快,对超参数不敏感
  1. 稳定训练
  • 权重衰减 通过在损失函数中添加与模型权重平方成正比的项,减少模型复杂度并防止过拟合,鼓励模型在训练过程中保持较小的权重
  • 梯度裁剪 由于训练过程中的梯度累积,设计一个阈值来限制梯度大小,防止训练中的不稳定线性

可扩展训练技术

  1. 3D 并行
  2. 数据并行
  3. ZeRO-1: 训练过程中需要维护的大量中间变量,这些状态通常会占用大量内存 方案:通过将优化器参数分布式存储在多个设备, 使得单设备只保存一部分参数,从而显著减少了内存的使用
  4. ZeRO-2 梯度计算作为反向传播算法的核心,其数据规模非常庞大,会占用大量内存 方案:梯度也进行拆分,并将其分布到多个 GPU 上。每个 GPU 只需存储和处理一部分梯度
  5. ZeRO-3 拆分模型参数来优化内存效率
  6. 混合精度训练

大模型微调

指令微调

构建方法:

  1. 手动创建
  2. 模型生成
  3. 基于开源数据集扩展

关键点:

  • 平衡数据分布: 确保个任务相关数据之间均衡
  • 融合指令微调和预训练: 两个功能相互结合,促进微调过程稳健性和效率

对LLMSs的影响:

  • 解锁LLMs的性能潜力(小模型经过微调性能也能很好)
  • 提升任务泛化能力

核心架构

  1. 模态编码器 是对多种模态(图片、音频、视频)的数据进行特征提取和编码,将原始输入转换为高维特征表示 作用: 特征提取:不同模态数据使用不同网络架构进行特征提取。 嵌入层:每种模态的特征经过处理后,都会被映射到一个统一的嵌入空间中,这样不同模态的特征可以在同一空间内进行比较和融合

  2. 模态连接器 将模态编码器转换的中间表达,通过模态连接器模块,将中间表达转换为与大语言模型相同的表达

  3. 模态生成器 可选组件,它可以附加到LLM上,用于生成除文本之外的其他模态,如:图片、音频、视频等

对齐微调

要求数据要: 有用,诚实,无害,将大语言模型的行为与人类的价值观或者偏好对齐

RLHF算法

基于人类反馈对语言模型进行强化学习训练(奖励惩罚机制)

微调算法

  1. LoRA: 大模型加速微调和训练算法

  2. LISA 分层重要性采样微调算法

提示工程

提示词组成:角色,指令/任务,问题,上下文,实例

提示工程方法

  1. 零样本提示(Zero-Shot)
  2. 少样本提示(Few-Shot Prompting)
  3. 思维链提示(Chain-of-Thought)

RAG(检索增强生成): 给大模型加一个知识库

涌现

涌现是指系统中简单个体通过相互作用,产生出超出单个个体能力和行为的新属性或复杂模式的现象。 如果一个能力在较小的模型中不存在但在较大的语言模型中存在,则该能力即为“涌现能力”大语言模型一些典型的涌现能力:

  1. 上下文学习
  2. 指令遵循
  3. 多步推理
  4. 知识获取
  5. 自然语言理解
  • 小模型在某些下游任务中具备随机性能,到达临界规模时才具备涌现能力,且涌现能力似乎是瞬间出现的。
  • 涌现能力无法简单地通过推断较小模型的性能来预测大模型的性能。
  • 涌现能力产生时的临界阈值无法确定,甚至在不同的语言模型或数据集上存在极大差异。

缩放法则

缩放法则利用幂律关系来描述大语言模型的性能随模型规模(参数数量、训练数据量和计算资源)的变化规律。

相关问题解答:

  1. 为什么使用 哈夫曼树
  • 高频词路径短
  • 期望高度为 log(V)
  1. 为什么不用平衡二叉树,用哈夫曼树 二叉树结构: 强制树的左右深度平衡。 哈夫曼: 基于词频构建。频率高的词靠近根节点,频率低的词远离根节点。

  2. 如何简化 P(S) 的计算 马尔可夫假设: 假设当前词的出现的概率与其前 N − 1 个连续的词相关

  3. 回退平滑,绝对值平滑应用场景

  • 回退: 数据量相对充分,上下文敏感性
  • 绝对值: 处理稀疏数据,更好的长尾处理
  1. 神经网络语言模型 (NNLM) 的作用与优势
  • 解决稀疏性问题:遇到没有出现过的词,通过向量空间的相似性
  • 泛化能力强:语义相似的词在向量空间中距离相近,模型能自动捕捉这种相似性,从而更好地泛化
  • 参数更高效: 参数量不随上下文长度呈指数级增长
  1. RNN 及其与前馈神经网络的区别
  • 信息流向:前馈网络的信号是单向流动的,各输入样本之间是独立的。RNN在隐藏层之间存在循环连接,当前时刻的输出不仅取决于当前输入,还取决于上一时刻的隐藏状态。
  • 处理序列的能力: 前馈网络难以处理变长的序列数据且无法捕捉时间依赖性;RNN 天生适合捕捉序列中的上下文信息和时序依赖
  1. RNN 中的权重共享及其作用
  • 减少参数量
  • 处理变长序列
  • 特征的平移不变性
  1. RNN 的基本更新公式 核心公式: ht=σ(WxXt+Whht1+bh)h_t = \sigma(W_xX_t + W_hh_{t-1} + b_h)

输出:

yt=softmax(Whht+by)y_t = softmax(W_hh_t + b_y)
  1. 推理阶段无法使用Teacher Forcing,如何避免错误传递? 束搜索(选择概率最高的词,采用相关递归搜索策略)

  2. 解码器在训练和推理时区别?

  • 训练阶段是 Teaching Forcing 机制(使用真实答案作为 Output 输入),推理阶段是 自回归(用自己的输出作为 Output输入)
  • 训练阶段是 并行计算,推理阶段是 串行计算,但是可以缓存(K,V 编码部分可以并行得到 K,V)
  • 训练阶段采用 Causal Mask,推理阶段天生 Mask
  1. BERT模型在输入时如何区分两个句子? 有 [CLS] 和 [SEP] 分割符

  2. 位置编码的必要性

  • 位置编码的必要性在于弥补模型对“顺序”感知的缺失。
  • 增强序列处理能力
  1. 请比较 Transformer 模型中的多头自注意力机制与多头编码器-解码器注意力机制

多头自注意力机制

  • 应用与来源:位于编码器和解码器内部。Q、K、V 全部来自同一个序列(即自己关注自己)。
  • 效果:旨在捕捉序列内部的依赖关系。例如,在处理代词“it”时,模型通过自注意力机制将其与上下文中的名词关联起来。
  • 多头的作用:允许模型同时从不同的“子空间”关注信息,丰富了特征表示。

多头编码器-解码器注意力机制

  • 应用与来源: 位于解码器中间层。Q 来自解码器(当前生成的内容),K 和 V 来自编码器(源输入序列)。
  • 效果: 旨在实现对齐(Alignment)。它让解码器在生成每一个词时,能够“回头看”源输入中最相关的部分
  • 对性能的影响: 它是连接输入与输出的桥梁,直接决定了生成内容是否忠实于源输入。
  1. 比较Transformer框架 和 非 Transformer框架的语言模型 Transformer: 适用场景: 通用任务(翻译、问答、摘要)、需要快速落地、依赖现有开源生态(成熟生态)。

非 Transformer: 超长文本处理(如整本书分析、基因序列)、端侧设备部署、对推理延迟极其敏感的场景,计算复杂度更优,推理效率高

  1. 解释为什么目前的主流大模型是解码大语言模型?
  • 训练效率与工程实现的简洁性:结构简单
  • 推理阶段的缓存优化(KV Cache)
  • 零样本泛化(少样本环境下的泛化能力强)
  1. CLIP 模型非常适合用于零样本分类任务的原因? 它将图像分类问题降维打击成了一个图文匹配问题,

  2. ViT 模型中 Patch 到 Token 的转化过程

在 Vision Transformer (ViT) 中,将二维图像转化为 Transformer 可处理的 Token 序列主要经历以下四个步骤:

  1. 图像分块:将输入图像 H×W×CH \times W \times C 切分成 NN 个固定大小的图块(Patch)
  2. 展平:将每个 2D 图块展平成一个 1D 向量
  3. 线性投影:通过一个可学习的线性层,将展平后的 Patch 向量映射到模型的固定维度 DD。此时,每个 Patch 正式变为一个 Token Embedding。
  4. 添加位置与类别标记:
  • [CLS] Token:在序列头部插入一个可学习的分类 Token,用于汇总全局图像信息。
  • 位置编码:将可学习的位置向量加到每个 Token 上,以保留图像的空间位置信息。
  1. CLIP 模型相对于传统图像分类模型的创新特点

CLIP 的核心创新在于打破了固定类别的限制,具体体现在:

  1. 监督方式变革:

    • 传统模型:依赖人工标注的离散标签(如 "类别 ID: 345"),信息量有限且难以扩展。
    • CLIP:直接从互联网上爬取的 4 亿对(图像-文本)数据中学习,利用自然语言作为监督信号,学习到的语义更丰富、更连贯。
  2. 学习范式创新(对比学习): CLIP 不进行分类预测,而是学习将图像和对应的文本描述映射到同一个特征空间,并拉近匹配对的距离,推远不匹配对的距离。

  3. 零样本迁移能力:

    • 传统模型:只能识别训练集中固定的 NN 个类别,遇到新类别需重新训练。
    • CLIP:支持开放词汇分类。推理时,只需将类别名称填入提示模板,模型即可计算图像与文本的相似度,无需微调即可识别从未见过的类别。
  4. BLIP 与 CLIP 模型的异同对比 模型架构

  • CLIP:单纯的双塔结构。一个图像编码器和一个文本编码器,两者独立,仅在最后计算余弦相似度。
  • BLIP:混合编码器-解码器结构。它包含三个部分:
    1. 单模态编码器。
    2. 基于图像的文本编码器。
    3. 基于图像的文本解码器。

训练目标

  • CLIP:仅使用图文对比损失 (ITC),关注全局对齐。
  • BLIP:联合优化三个目标:
    1. ITC:图文对齐。
    2. ITM:二分类任务,判断图文是否匹配,学习更细粒度的交互。
    3. LM:生成任务,给定图片生成文本描述。

数据处理(模型优化)

  • CLIP:直接使用网络爬取的噪声数据,依靠巨大的数据量(4亿)弥补噪音影响。
  • BLIP:引入 CapFilt 策略。利用一个微调后的 Captioner 生成合成字幕,再用 Filter 过滤掉噪声数据。

实际应用

  • CLIP:擅长检索(以文搜图、以图搜文)和分类任务,但不具备文本生成能力。
  • BLIP:是全能型选手。既擅长理解任务(检索、VQA),也擅长生成任务(图像描述生成),应用范围更广。
  1. 如何以较小的代价修正大语言模型存储的知识?
  • 检索增强生成(RAG)
  • 参数高效微调
  • 提示工程
  1. 讨论在大规模语言模型预训练中常用的优化技巧
  • 学习率调度
  • 混合精度训练
  • 分布式训练
  • 梯度裁剪
  • 梯度累积
  1. 指令微调的作用 预训练侧重于知识注入(学习世界是什么样的);指令微调侧重于能力激发(学习如何按照特定格式和要求回答问题)。

  2. PPO 和 DPO 的缺陷

  • PPO (近端策略优化): 训练极不稳定,对超参数敏感,且需要同时维护多个模型,显存开销巨大,训练慢。
  • DPO (直接偏好优化): 虽然去掉了奖励模型更简单,但容易对偏好数据过拟合,且对数据质量极其敏感(如果数据中有噪音,效果下降明显)
  1. RLHF 的其他应用领域
  • 机器人控制: 通过人类反馈教机器人做动作。
  • 代码生成: 优化代码的可编译性和执行效率。
  • AI 智能体 (Agents): 训练游戏中的NPC或自动驾驶决策系统。
  • 生物化学: 如优化蛋白质结构预测。
  1. 如何优化减小大语言模型的训练成本
  • 随机尝试
  • 穷举搜索
  • 查找最佳的超参数规则
  1. 提示工程与提示学习的区别
  • 提示工程本质: 是人工设计的“硬提示”(Hard Prompt)。
  • 提示学习本质:是机器自动优化的“软提示”(Soft Prompt)。

文章标题:NLP--基础知识

文章作者:jiely

文章链接:https://whalefall.top/posts/2025-12-25-nlp[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。