自然语言处理10——预训练模型
第三范式:预训练+微调模式(详见自然语言处理9);预训练时海量数据不需要标注,即无监督学习;由于数据量很大使得参数量也可以很大。
自然语言处理10——预训练模型
第三范式:预训练+微调模式(详见自然语言处理9);预训练时海量数据不需要标注,即无监督学习;由于数据量很大使得参数量也可以很大。
自注意力机制
传统的编码-解码器,信息单向传递,如何使得它用的到整个序列的上下文信息?
编码某个词时,如何让它能够关注到离得很远的词(也许是上文,也许是下文,但距离可能会很远)?传统的注意力机制做不到把输入的句子既当作Query又当作key、value。
解决方案:自注意力机制:生成这一句话的输出,用到这一句话其他很多重要的信息,来消除距离感,使得输出可以用到整个序列的上下文有用的信息,且多个输出可以并行计算。
基本思想:输入: a 1 , a 2 , a 3 , a 4 a_1,a_2,a_3,a_4 a1,a2,a3,a4,输出: b 1 , b 2 , b 3 , b 4 b_1,b_2,b_3,b_4 b1,b2,b3,b4,
-
特点:每个输出都用到整个句子的信息;最有用的输入信息权重更高。
-
如:输出 b 1 b_1 b1时, a 1 a_1 a1作为q, a 2 , a 3 , a 4 a_2,a_3,a_4 a2,a3,a4作为key和value,计算 a 1 a_1 a1和 a j a_j aj的相关度,找出其中最相关的,得出权值,可以用内积、夹角余弦或者神经网络计算,再经过Softmax进行归一化,得到了权值。
生成value:哪个value权值更高,它的影响力更大。
全过程:
为什么可以并行计算?
- 权值共享: q i = W q a i q_i = W^qa_i qi=Wqai, k i = W k a i k_i = W^ka_i ki=Wkai, v i = W v a i v_i = W^va_i vi=Wvai,其中的权重矩阵是相同的。
- 计算 q 1 , q 2 , q 3 . . . q i q_1,q_2,q_3...q_i q1,q2,q3...qi不存在先后顺序(k,v同理),只是单纯的矩阵乘法运算。
- W q , W k , W v W^q,W^k,W^v Wq,Wk,Wv是训练时得到的参数。
变种:多头自注意力机制(Multi-head Self-attention):从不同的角度来计算注意力机制。
缺点:并行计算的时候丢掉了输入词语的位置信息
解决方案:每个输入 a i a_i ai加上向量 e i e_i ei(位置向量)
- a i = W I x i a_i = W^Ix_i ai=WIxi, e i = W p p i e_i = W^pp_i ei=Wppi,构建one-hot向量 p i p_i pi:大小为整个句子长度,输入在第i个位置出现,则第i个位置为1,将两个权值矩阵 W I , W p W^I,W^p WI,Wp合在一起变为 W W W。
应用:语音识别:采用局部自注意力机制。图像处理:每个像素的三通道可以作为一个向量;Transformer;Bert。
自注意力和CNN的关系:自注意力模型包含了CNN。
- CNN:用一个点周围的点来表示中间的点。训练数据量少时,CNN表现好。
- 自注意力机制:用整个图片和这个点的相关度来表达这个点。训练量大时,自注意力机制效果好。
自注意力和RNN:
- RNN进行当前输出时需要把前面的输出计算完才可以,串行处理
- 自注意力:并行处理,便于获得远距离依赖,比RNN好
Transformer
带自注意力机制的Seq2seq模型(encoder-decoder)。
左侧:编码器端;核心:堆叠多头自注意力模型(重复n次)。
- 输入:可以是词向量/句向量,整合位置向量编码。
- 残差连接:输入不仅给到自注意力机制,还在这基础上用到了类似残差网络的结构,即输入本身连到自注意力机制输出。
- 层归一化(Norm):将一个样本中的每个值归一化到正态分布,和残差连接一样加速收敛,使得模型更容易学习。
- 输出:叠加非线性的前馈神经网络,提高模型的表示能力。后边跟着一层层归一化才是最终输出。
右侧(自回归Autoregressive注意力层):解码器端;decoder层也重复n次。从下往上描述
- 采用Masked的注意力机制(有遮挡的注意力机制):每一时刻的输出只用到它左边的信息。
- 为什么用Masked?推理阶段:因为后边的词还没有输出,还用不到。训练阶段为了保持和推理阶段的一致性。
- 交叉注意力层(多头的注意力层)接收encoder端的输出:即输入是一个key、value,quer由自己给出。即注意到输入特定的部分,结合本层的输入最终得到输出。
- 为什么叫做自回归注意力层:用上一层的输出作为下一层的输入query,乘上encoder层的key和value,进行输出。
n层encoder和n层decoder是怎么连接的?
encoder最后一层的输出作为decoder每一层的输入。层数取决于算力、调参能力等。
应用:提取多文档摘要来生成英文维基百科
缺点:本质上还是并行处理,对于需要循环迭代的简单任务表现很差
优化:universal Transformer,把几个Transformer迭代到一起做循环
预训练模型
只使用encoder端——分类问题、序列标注问题:GPT
只使用decoder端——文本生成问题:BERT
BERT
海量数据无监督双向预训练+自注意力机制 = Transformer的编码器
GPT、BERT、ELMo、Word2vec(CBOW)的关系:
- GPT:单向从左到右的transformer的decoder部分,用mask注意力模型,如果模型改成双向的就类似于BERT。
- ELMo:语言模型,将独立的前向和后向的LSTM拼接。输入一段话,输出这段话预期输出的句子,需要的是中间层的编码结果,看似是双向的,实际上正向和反向是独立完成的,将两部分输出整理到一起和标注答案对比,误差函数也是单独回传如果把特征抽取器换成Transformer就类似于BERT。
- BERT:双向的Transformer的encoder部分,更多借鉴的CBOW的思路,它的双向是这一遍同时用到上文信息和下文信息。
原理:
输入:包含三部分,三个向量的维度一样大,三个维度向量加到一起形成一个新的输入向量
- 词向量:通过词向量矩阵将输入文本转换为实值向量;
- 块向量:编码当前词属于哪一块;如:输入两句话,判断第二句化是否为第一句话的下文,每一个句子相当于一个块;
- 位置向量:编码当前词的绝对位置。
基本预训练任务:
- Masked Language Model(MLM):序列标注任务:将15%的输入文本序列的部分进行掩码,要求模型将它们进行还原,其中80%的概率会替换为[MASK]标记;10%概率替换为词表中任意一个随机词;10%的概率保持原词不变。
- 经过BERT后(输出标志[CLS]的输出结果)经过一个分类器来预测被掩码的词。
- 实际目的:训练模型的参数
- Next Sentence Prediction(NSP):学习两段文本之间的关系,即预测句子B是否为句子A的下一个句子,分类任务,正样本输出1,负样本输出0。
- 正样本:文本中相邻的两个句子。
- 负样本:将句子B替换为语料库中任意一个句子。
- 实际目的:训练模型的参数
通常这两个任务是同时来进行的。
变种:
-
WWM:整词掩码,中文缺哪个字,预测这个字对模型的挑战不大。随机选取一定比例的整词进行掩码。
-
N-gram掩码:对一个连续的n-gram单元进行掩码
-
ERNIE(百度):基于BERT模型,做的进一步优化,将一些语言知识加入到BERT中。使用先验知识来增强预训练语言模型,输入由三种等级的mask组成:词的一部分(word piece),盖住短语,盖住命名实体。不是直接添加知识嵌入,而是隐式地学习有关知识和较长语义依赖性的信息。
-
ERNIE2(百度):持续性地多任务的增量学习,每次都给模型增加一些下游任务的知识。
-
ERNIE(清华):显式地把知识图谱中命名实体中的知识加入BERT,在普通的BERT中增加了命名实体的输入:给抽取出的命名实体单独加一个注意力机制,将实体对齐,对齐后进行信息融合,在实体位置将两个输出加权求和等处理后再输出。
应用
如何应用于下游任务中
特征提取
将BERT与下游任务串联到一起,仅用于进行特征提取得到对应的上下文语义表示(特征向量),即BERT部分只进行解码
模型调优
将BERT与下游任务结合到一起,利用BERT作为下游任务模型基底,下游任务学习过程中将BERT与下游的参数一起调整。模型调优效果更好
单句文本分类:
输入:单一文本 输出:句子类别
将BERT与下游的分类模型合成一个大模型,BERT参数与下游模型的参数一起进行学习,BERT的参数进行微调。
类似的:句对文本分类(但后边可以接回归模型)
序列标注任务:
每一时刻都接一个分类器,每一个实际输入得到一个输出结果。
阅读理解任务:
抽取式问答系统,输入:问题+篇章,经过bert编码后,根据问题学习到的向量与后边篇章学习到的向量进行点乘,看哪个相关度高,下游模型输出两个位点,即篇章对应的输入中,哪里是答案起始位置,哪里是结束位置。
BERT解析
为什么BERT效果这么好?处理浅层的词义级时,BERT浅层的权值比较大,随着任务的深入,BERT后面层的权重增加。相当于BERT通过不同层将自然语言处理的不同层次都实现了一遍。
缺点:对于生成类的任务效果不是很好。
GPT模型(自回归模型)
transformer的decoder端,GPT的参数非常多。GPT对于文本生成任务很好。
GPT3:第四范式,效果比较好,但对于处理常识任务效果不是很好。
当前时刻能利用的信息只有前面的信息,后边的词只能由前面的信息来生成。
需要小样本进行微调的话叫:few-shot learning。但GPT训练结束后可以直接用来处理下游任务,即可以达到Zero-shot learning(零样本学习)。
往期文章:
自然语言处理1——NLP概述
自然语言处理2——语言学基础
自然语言处理3——语言学资源
自然语言处理4——统计语言模型
自然语言处理5——词法分析
自然语言处理6——HMM模型和词性标注
自然语言处理7——句法分析
自然语言处理8——语义分析
自然语言处理9——深度学习

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)