目录
第 3 章 深度学习基础
第 4 章 语言模型+词向量
第 5 章 NLP中的注意力机制
第 6 章 NLP基础任务
第 7 章 预训练语言模型
1. 人工神经网络
2. 激活函数
(1)激活函数的作用
为了增强网络的表达能力,需要引入连续的非线性激活函数
(2)激活函数的性质
(3)常用的激活函数
ReLU函数:,值域[0,正无穷)
3. 前馈神经网络DNN
(1)参数:层间连线权重W1,W2,...,WL;各层偏置b1,b2,...,bL
(3)梯度下降法:
步骤:
1. 定义目标函数(损失函数):用真实值和预测值的误差来定义损失函数,将问题转化为求极值的问题
2. 优化目标函数(损失函数):将参数作为变量,通过求极值来确定
常用损失函数:
0-1损失、平方损失、绝对值损失、对数损失、交叉熵损失、Hinge损失、指数损失
交叉熵损失:
问题:
1. 参数初值:尽量随机
2. 学习率:不能太大也不能太小
3. 梯度消失问题:
(1)选择合适的激活函数
(2)用复杂的门结构代替激活函数
(3)残差结构
4. 过拟合问题:
(1)选择合适的正则方法
(2)Dropout
分类:
1. 梯度下降法:每更新一次参数,就需要计算一次全体数据相应参数的偏导数,这个计算量是很大的,函数的收敛速度会在数据量很大的时候会很慢。与SGD不同,每一次参数的改变,都能保证损失函数是朝着全局最小方向移动的。
2. 随机梯度下降法:每更新一次参数,只计算了1个batch的梯度,大大加快了函数的收敛速度。SGD每一次更新参数只考虑了一个数据,可能不会每一次都是朝着全局最优的方向移动,最终可能无法收敛到最小,但是会解决陷入局部最优的问题。
3. mini-batch梯度下降法
复合函数求导:链式法则,反向传播算法
4. 卷积神经网络CNN
局部连接+参数共享(模型参数变少)
(1)参数:卷积核的权值、卷积核的偏置、全连接的权值
(2)卷积层的作用:卷积层用来提取特征。其中局部连接+参数共享,可大大减少参数的个数
(3)池化层的作用:池化层用来特征选择,降低特征数量,并从而减少参数数量。
- Max Pooling
- Mean Pooling
(4)卷积神经网络结构上的特性:
- 局部连接
- 权重共享
- 空间或时间上的次采样
这些特性使得卷积神经网络具有一定程度上的平移、缩放和扭曲不变性
(5)卷积神经网络形状变换公式:
参数个数:
5. 图卷积神经网络GNN
6. 循环神经网络RNN
(1)循环神经网络核心思想:将处理问题在时序上分解为一系列相同的“单元”,单元的神经网络可以在时序上展开,且能将上一时刻的结果传递给下一时刻,整个网络按时间轴展开。即可变长。
(2)信息传播:
(3)输入输出结构:
(4)参数学习
BPTT:用反向传播不同的是,循环神经网络存在参数共享问题,从时间步上展开的每层的权重W都应该相同,因此每次都需要同时调整参数。
(5)问题:
1. 梯度消失/爆炸问题:在训练循环神经网络时,更经常出现的是梯度消失问题,训练较难
2. 长期依赖问题:距当前节点越远的节点对当前节点处理影响越小,无法建模长时间的依赖
(6)LSTM:LSTM 通过设计“门”结构实现保留信息和选择信息功能(输入门、遗忘门、输出门)
(7)GRU:输入门和遗忘门合并为更新门(更新门决定隐状态保留放弃部分)(更新门、重置门)
(8)RNN的改进
1. 统计语言模型
(1)模型
二元模型:
(2)参数学习的方法
最大似然估计方法:
(3)数据平滑
数据匮乏导致的零概率问题。
数据平滑的基本思想:调整最大似然估计的概率值,使零概率增值,使非零概率下调,“劫富济 贫”,消除零概率,改进模型的整体正确率。
数据平滑的方法:加1法、减值法/折扣法、删除减值法
(4)语言模型性能评价
1. 实用方法:根据模型的表现来评价
2. 理论方法:用模型的困惑度来衡量
2. 神经语言模型
(1)基于DNN的模型:NNLM模型
(2)基于RNN的模型:RNNLM模型
随着模型逐个读入语料中的词w1 ;w2 ….隐藏层不断地更新为h(1),h(2)….. ,通过这种迭代推进方式,每个隐藏层实际上包含了此前所有上文的信息,相比NNLM 只能采用上文n元短语作为近似,RNNLM包含了更丰富的上文信息,也有潜力达到更好的效果。
RNNLM优点:
- RNNLM 模型可以保留每个词的全部历史信息,不需简化为n-gram
- 引入词向量作为输入后不需要数据平滑
3. 词向量(浅层)
(1)词表示
- 符号表示
- 离散表示
one-hot表示
词袋模型:用该词在文档中出现的频数表示该词
TF-IDF:用该词在文档中的占比来表示该词
- 分布式表示:用一个词的附近的其他词来表示该词
基于计算的分布式表示:如SVD分解;耗空间过大,稀疏等问题
基于预测的分布式表示
(2)词向量
NNLM模型词向量
方法:采用低维稠密向量降维,|D|为定义的词向量的维度,|V|为词表大小
NNLM模型的作用: 在训练语言模型同时也训练了词向量
RNNLM模型词向量
方法:采用低维稠密向量降维,|D|为定义的词向量的维度,|V|为词表大小
RNNLM 模型的作用:在训练语言模型同时也训练了词向量
C&W模型词向量
核心思想:采用直接对n元短语打分的方式替代语言模型中求解条件概率的方法:对于语料中出现过的n元短语,对其打高分;对于语料中没有出现的随机短语,对其打低分。通过这种方式,C&W模型可以更直接地学习得到符合分布假说的词向量。
特点:C&W 模型的目标函数是求目标词w与其上下文c的联合打分,而其他模型均为根据上下文c,预测目标词w。
C&W 模型在运算速度上优于NNLM模型,但在许多语言学任务上,效果不如其它模型
CBOW模型词向量
Skip-gram模型词向量
(3)经典模型总结
(4)词向量的特点
语义相似的词,其词向量空间距离更相近
相似关系词对的词向量之差也相似:如
4. 神经语言模型相比统计语言模型的优势
统计语言模型:
1. 由于参数数量问题需要对词 i 的历史简化 n-gram
2. 需要数据平衡
神经语言模型:RNNLM可以解决所有上述问题
1. 注意力机制概述
注意力机制就是加权求和机制,是神经网络中的一个组件,可以单独使用,但更多地用作网络中的一部分。对于集合Key,求相对于Query各个元素的权重,然后按权重相加形成Query要的结果
2. 传统注意力机制
(1)模块结构
输入:Query(Q)、Key(K)
输出:Attention-Value(Att-V)
步骤:
1. 计算(注意力打分函数):
2. 计算对于Q各个Ki的权重,
3. 计算输出,各Ki乘以自己的权重,然后求和
(2)模块训练
将模块放到整体模型中,不需要额外的训练数据权重可以由模块中 的参数学到
(3)模块评价
放到各个任务中检验,通过任务指标的提升证明模块的效果
(4)模块应用
网络中有“求和”的地方都可以用,如 图卷积, 机器翻译等
(5)注意力模块的优点
- 让任务处理系统找到与当前任务相关的显著的输入信息,并按重要性进行处理,从而提高输出的质量。
- 不需要监督信号,可推理多种不同模态数据之间的难以解释、隐蔽性强、复杂映射关系,对于先验认知少的问题,极为有效。
- 解决长距离依赖问题 ,提升任务性能
(6)注意力模块的作用
等权处理 - > 加权处理 -> 提升任务效果
软注意力soft attention:在求注意力分配概率分布的时候,对于输入句子X中任意一 个单词都给出个概率,是个概率分布。
硬注意力hard attention:直接从输入句子里面找到某个特定的单词,然后把目标句子单词和这个单词对齐,而其它输入句子中的单词硬性地认为对齐概率为0
全局注意力global attention:Decode端Attention计算时要考虑输入Encoder端序列中所有的词
局部注意力local attention:Local Attention Model本质上是Soft AM和 Hard AM的一个混合或折衷。 一般首先预估一个对齐位置Pt,然后在Pt左右大小为D的窗口范围来取类似于Soft AM的概率分布。
3. 注意力编码机制
通过建立序列各元素之间的关联关系形成一种序列表示(按元素之间关系对序列进行编码);或通过不同序列元素之间的关联关系形成不同序列间的融合表示。
(1)单一向量编码
将输入序列按规则编码成单一向量表示。如,句表示/篇章表示 ,某词的上下文表示等
(2)不同序列间编码
将2个序列编码成二者的融合的表示序列, 如,匹配任务和阅读理解任务常用的融合层表示
(3)同一序列自编码
利用多头自注意力编码对一个句子编码可以起到类似句法分析器的作用。如Transformer的编码端
1. 文本分类
文本分类是NLP中的常见的重要任务之一,应用广泛,在很多领域发挥着重要作用,例如垃圾邮件过滤、舆情分析以及新闻分类等。
神经网络分类方法:
- 基于词袋的文本分类
简单对文本序列中每个词嵌入进行平均/加总,作为整个序列的表示。 这种方法的缺点是丢失了词序信息。对于长文本,神经词袋模型比较 有效。但是对于短文本,神经词袋模型很难捕获语义组合信息
- 基于卷积神经网络文本分类(TextCNN/DPCNN/Char-CNN/VDCNN)
通过多个卷积层和子采样层,抽取序列的 n-gram特征信息,最终将得到特征信息合并成一个固定长度的向量作为整个序列表示。
- 基于循环神经网络文本分类(TextRNN/TextRCNN)
将文本序列看作时间序列,不断更新,最后得到整个序列的表示。这种表示中包含的是序列的顺序信息。RNN属于“biased model”,一个句子中越往后的词重要性越高,这有可能影响最后的分类结果,因为对句子分类影响最大的词可能处在句子任何位置。
- 基于attention机制文本分类
通过注意力机制对序列进行编码,最后得序列的表示,这种表示包含 的是词与词之间的关联关系
- 基于预训练模型的文本分类
通过预训练模型形成句表示,然后将该句表示作为分类的输入
- 基于图卷积神经网络文本分类
根据任务对原文本加入附加信息并构建原文本与附加信息的关系图(将附加 的结构信息融入文本),然后利用图卷积的方法提取文本有效的特征表示
2. 文本匹配
(1)复述识别
又称释义识别,是判断两段文本是不是表达了同样的语义,这一类场景一般建模成分类问题。
(2)文本蕴含识别
给定一个前提文本(text),根据这个前提去推断假说文本(hypothesis)与 文本的关系,关系有:蕴含关系(entailment),矛盾关系(contradiction), 中立关系(entailment)。这一类场景一般建模成多分类问题。
(3)问答
根据Question在段落或文档中查找Answer,这类场景常常会被建模成分类问题; 还有一类是根据Question从若干候选中找出正确答案,这类场景常常会被建模成排位( ranking )问题。
(4)对话
与QA 类似,但是比QA更复杂,由于引入了历史轮对话,需要考虑在历史轮的限制下回复是否合理。一般建模为分类或排位问题。
(5)信息检索
信息检索是一个更为复杂的任务,往往会有Query—Tittle,Query—Document的形 式(Query可能是一个Document)检索需要计算相似度和排序一般建模为排位问题。
深度学习文本匹配方法:自动提取出词语之间的关系特征并结合短语匹配中的结构信息和文本匹配 的层次化特性,更精细地描述文本匹配问题。
3. 序列标注
(1)序列标注问题概述
序列标注方法:“将输入的语言序列转化为标注序列”,通过标注序列标签含义来解决问题。
命名实体识别:将给定的输入序列中的的命名实体(如人名、地名等)识别出来
信息抽取(实体识别):将给定的输入序列中的特定信息抽取出来
词性序列标注:将给定的输入序列中词的词性标出来
(2)马尔可夫模型
马尔可夫链:
马尔可夫模型:
马尔可夫模型三元组:,S为模型中状态的有限集合,A为与时间无关的状态转义概率矩阵,为初始状态空间的概率分布
例如:
(3)隐马尔可夫模型HMM
该模型是一个双重随机过程,我们不知道具体的状态序列(即不知道S),只知道状态转移的概率(即只知道A),即模型的状态转换过程是不可观察的(隐蔽的) ,而可观察事件的随机过程是隐蔽状态转换过程的随机函数。
隐马尔可夫模型五元组:,其中S为状态集合,O为每个状态可能的观察值,A为状态转移矩阵,B为给定状态下观察值的概率分布,为初始状态
HMM的特点:
- HMM的状态是不确定或不可见的,只有通过观测序列的随机过程才能表现出来
- 观察到的事件与状态并不是一 一对应,而是通过一组概率分布相联系
- HMM是一个双重随机过程,两个组成部分:
马尔可夫链:描述状态的转移,用转移概率描述。
一般随机函数:描述状态与观察序列间的关系, 用观察值概率描述。
HMM的三个假设:
- 马尔可夫性假设(状态构成一阶马尔可夫链)
- 不动性假设(状态与具体时间无关)
- 输出独立性假设(输出仅与当前状态有关)
HMM的结构:
HMM的评估问题:
序列概率的定义:
计算:
(1)前向算法:利用动态规划使用递归来降低计算复杂度
时间复杂度:
HMM的解码问题:
viterbi搜索算法:利用动态规划使用递归来降低计算复杂度
HMM在序列标注中的应用:
例1:
例2:
(4)神经网络序列标注模型
双向RNN+softmax模型存在的问题:输出之间彼此独立。
双向RNN+softmax改进:双向RNN+CRF
4. 序列生成
序列生成任务是NLP中的常见的重要任务之一,应用非常广泛,例如机器翻 译‚自动文摘、机器阅读理解、对话生成 、自动生成字幕等多项任务。
(1)Seq2Seq模型的输出产生方式
- 生成式模型Decoder
根据编码端形成的输入表示和先前时刻产生成的输出tokens,生成当前输出 token ( 编码端和解码端有各自词表,二者可相同或不同 。解码端需处理 集外词OOV,一般用UNK 代替)
分类:基本RNN架构生成框架、RNN+Attention架构生成框架、Transformer架构生成模型
- 选择式模型Decoder
根据编码端形成的输入表示和先前时刻产生成的输出tokens,从输入端选择 一个token作为输出 token ( 解码端和编码端词表相同)
- 选择-生成式模型Decoder
根据编码端形成的输入表示和先前时刻产生成的输出tokens,生成或从输入 端选择当前输出token ( 编码端和解码端有各自词表,二者可相同或不同 。 解码端需处理集外词OOV,一般用UNK 代替,该方法可有效的处理输出端 的OOV 问题)
(2)生成式模型Decoder
transformer模型特点:
- 全部采用Attention机制
- 克服了RNN无法并行计算的缺点,可以高度并行,训练速度快;
- 具有捕捉长距离依赖的能力,有较高的建模能力
transformer模型结构:
- 编码端:6层Attention堆叠,包含2个子层(Multi-head attention 和Feed Forward Network)
- 解码端:6层Attention堆叠,包含3个子层(Multi-head attention ,cross-attention和 Feed Forward Network)
- 交叉注意力部分:解码端的每一层与编码端的最后输出层做 cross-attention
transformer模型的encoder的输入:
词向量的embedding + positional encoding
transformer模型的encoder的输出:
词向量的深层表示,作为decoder里每一层中多头注意力层的K和V
transformer模型的decoder的输入:
词向量的embedding + positional encoding
transformer模型的decoder的输出:
输出结果
transformer模型的训练:
transformer模型的预测:
(3)选择式模型Decoder
生成式模型Decoder的缺点:输出词表是固定的,无法解决输出词表需按输入情况动态变化的问题
- 指针网络:
- 指针网络的应用:指针网络在 NLP 领域有广泛的用途,如文本摘要,阅读理解等从输入序列选 输出序列的一系列复制类型的任务。指针网络也适合用于解决OOV(out of vocabulary)类问题
(4)选择-生成式模型Decoder
指针网络的缺点:输出直接从输入中选择,输出词表与输入词表相同,无法处理输出需要产生输入词表以外词的情况。
生成网络的缺点:高度的依赖词的的表征,当遇到OOV(Out-of-vocabulary)会出现 表达不准确。而实际应用中,有些场合仅仅需对该生僻词逐字保留即可
(5)序列生成模型评价指标
(6)序列生成模型存在问题
曝光偏差问题(Exposure Bias):一旦在预测前缀的过程中存在错误,会导致错误传播,使得后续生成的序列也会偏离真实分布。
解决方法:Scheduled Sampling:在训练过程中,混合使用真实数据和模型生成数据 。
训练-评价目标不一致的问题:序列生成模型一般采用和任务相关的指标来进行评价,比如BLEU、GOUGE等,而训练时使用最大似然估计,这导致训练目标和评价方法不一致。
解决方法:可采用强化学习的策略进行模型训练
预训练语言模型是采用迁移学习的方法(归纳迁移学习)通过自监督学习从大规模数据中获得与具体任务无关的预训练模型 ,然后用训练好的预训练 模型提高下游任务的性能的一种数据增强法。
1. 预训练,精调范式(pre-train, fine-tune)
训练过程:
- 第一个阶段Pre-training:利用大型语料库完成预训练模型非监督学习
- 第二个阶段fine-tuning:针对特定任务在相应数据集中进行监督学习,通过 Fine-tuning 技术来适配具体任务。
(1)EMLO模型
(2)GPT
GPT 采用了 Transformer 的 Decoder 部分,并且每个子层只有一个 Masked Multi Self-Attention(768 维向量和 12 个 Attention Head)和一个 Feed Forward (无普通transformer解码器层的编码器-解码器注意力子层) ,模型共叠加使用了 12 层的 Decoder
训练过程:
- 第一个阶段 Pre-training :主要利用大型语料库完成非监督学习;
- 第二个阶段 Fine-tuning:针对特定任务在相应数据集中进行监督学习,通过 Fine-tuning 技术来适配具体任务。
上图是对不同任务进行微调的输入转换。
- 将所有的结构化输入转换为 Token 序列,
- 然后使用预训练模型(Transformer)进行处理,
- 最后使用线性和 Softmax 层完 成特定的监督学习任务。
微调调参方式:
(3)BERT
BERT是多任务学习:
- 语言模型任务
- 判断两个文本谁在前谁在后
使用堆叠的双向Transformer Encoder,在所有层中共同依赖于左右上下文基 础版是12个Encoder (12层 );高级版24个Encoder (24层 )
训练过程:
- 第一个阶段 Pre-training:主要利用大型语料库完成非监督学习
(1)基于MLM的训练方法
随机遮住15%的单词作为训练样本。其中:80%用 masked token 来代替, 10%用随机的一个词来替换,10%保持这个词不变。
(2)基于NSP的训练方法
正样本和负样本比例是1:1,50%的句子是正样本,即给定句子A和B,B是A的实际语境下一句;负样本:在语料库中随机选择的句子作为B。通过两个特定的 token[CLS]和[SEP]来串接两个句子,该任务在[CLS]位置输出预测
优化目标:Total loss = Masked Language Model loss + Next Sentence Prediction loss
- 第二个阶段 Fine-tuning:针对特定任务在相应数据集中进行监督学习,通过 Fine-tuning 技术来适配具体任务。
- 分类任务和匹配任务利用[CLS]位置的embedding
- 序列标注任务利用每个 token 的输出 embedding
- 序列生成任务(选择式生成)第二句 token 输出 embedding
(4)BART
BERT的缺点:具备双向语言理解能力的却不具备做生成任务的能力。
GPT的缺点:拥有自回归特性的却不能更好的从双向理解语言。
BART:采用标准Transformer结构
训练方法:
- Pre - Training
五种加噪音的方法:
- Token Masking:与BERT的[Mask]策略相同
- Token Deletion:随机删除某些ToKen,相比较于Token Masking 模型必须决定哪个位置是遗漏的。
- Text Infilling:同时选中连续的 Token 替换为一个[MASK], 或在原始数据种随机插入MASK Token (没有数据缺失情况下)模型不知道[Mask]对应多少 Token,也不知道Token 是否有效(让模型学习能力强大)
- Sentence Permutation:将一个文档种的句子之间顺序打乱。
- Document Rotation:从文档中随机选一个Token作为整个文档的起始Token, 对文档轮换,此任务训练模型以识别文档的开始Token。
- Fine-tuning
(5)T5
给整个 NLP 预训练模型领域提供了一个通用框架,把所有NLP任务都转化成一种形 式(Text-to-Text),通过这样的方式可以用同样的模型,同样的损失函数,同样的训练过程,同样的解码过程来完成所有 NLP 任务。
T5的输入输出格式:
训练过程:
- Pre - Training
获得了完整的 T5 模型,还有它的训练方法。
- Transformer Encoder-Decoder 模型;
- BERT-style 式的破坏方法;
- Replace Span 的破坏策略;
- 15 %的破坏比;
- 3 的破坏时小段长度。
- Fine - tuning
2. 预训练,提示,预测范式(pre-train, Prompt, Predict)
不通过目标工程使预训练的语言模型(LM)适应下游任务,而是将下游任务建模的方式重新定义(Reformulate),通过利用合适prompt 实现不对预训练语言模型改动太多,尽量在原始 LM上解决任务的问题
Prompt主要问题:
- 输入端:怎么样选取合适的Prompt,适配不同任务,同时把模型潜能激发 出来(怎么 把Prompt结合输入的句子构成模型的输入)
两种形式:
1. 完形填空:「这个饼不错 ],太 [Z],
2. 前缀提示:「好好学习」,翻译成英文:[Z]
- 输出端:模型的输出( Answer)可能与标签不同,拿到answer后如何往 标准化的Y(标签空间)映射
常见answer形式:
1. Token:预训练 LM 词汇表中的一个 token,或者词汇子集;
2. Span:短的 multi-token span,这些通常与 cloze prompt 一起使用;
3. 句子或文档:这些通常与前缀 prompt 一起使用。
- Prompting训练策略:怎样利用Prompt机制精调模型(第四范式的微调)
1. Promptless Fine-tuning:直接使用下游任务进行训练,不用prompt,更新预训练参 数;优点-简单,不需要设计prompt;缺点-小数据集上容易过拟合或者不稳定
2. Tuning-free Prompting:基于prompt直接生成答案,无需调参。优点-简单高效;缺 点-需要较重的prompt设计
3. Fixed-LM Prompt Tuning:固定预训练参数,调整prompt参数,使下游任务更好作 用于prompt的产生;优点-适合小样本学习;缺点-不适合零样本学习,prompt模版 通常不再是人工设计的
4. Fixed-Prompt LM Tunin:固定prompt参数,调整预训练参数
5. Prompt+LM Fine-tuning:调整prompt参数,调整预训练参数。适合大数据集,小数 据集易过拟合
第三范式和第四范式的区别:
第三范式指的是先在大的无监督数据集上进行预训练,学习到一些通用的语法和语义特征,然后利用预训练好的模型在下游任务的特定数据集上进行fine-tuning,使模型更适应下游任务。GPT、Bert、XLNet等模型都属于第三范式,其特点是不需要大量的有监督下游任务数据,模型主要在大型无监督数据上训练,只需要少量下游任务数据来微调少量网络层即可。
第四范式指的是将下游任务的建模方式重新定义,通过合适的prompt来实现直接在预训练模型上解决下游任务,这种模式需要极少量(甚至不需要)下游任务数据,使得小样本、零样本学习成为可能。
第三范式的fine-tuning过程是调整预训练模型,使其更加匹配下游任务,那么第四范式就正好相反,prompt过程则是调整下游任务,使其更加匹配预训练模型。也就是第三范式是预训练模型迁就下游任务,而第四范式是下游任务迁就预训练模型。