序列数据一般可以通过概率图模型来建模序列中不同变量之间的依赖关系.本章主要介绍在序列数据上经常使用的一种模型:自回归生成模型( Au-toRegressive Generative Model ).
序列概率模型有两个基本问题.
序列数据有两个特点: 1 )样本是变长的; 2 )样本空间非常大.
每一步都需要将前面的输出作为当前步的输入,是一种自回归( AutoRegressive )的方式.因此这一类模型也称为自回归生成模型( AutoRegressive Generative Model ).
这里主要介绍两种比较主流的自回归生成模型: N 元统计模型和深度序列模型.
由于数据稀疏问题,当 t 比较大时,依然很难估计条件概率 .一个简化的方法是 N 元模型( N-Gram Model ),假设每个词 xt 只依赖于其前面的N − 1 个词( N 阶马尔可夫性质)
N 元模型的一个主要问题是数据稀疏问题.数据稀疏问题在基于统计的机器学习中是一个常见的问题,主要是由于训练样本不足而导致密度估计不准确.
大多数自然语言都服从 Zipf 定律( Zipf’s Law ):“在一个给定自然语言数据集中,一个单词出现的频率与它在频率表里的排名成反比.出现频率最高的单词的出现频率大约是出现频率第二位的单词的 2 倍,大约是出现频率第三位的单词的 3 倍.”因此,在自然语言中大部分的词都是低频词,很难通过增加数据集来避免数据稀疏问题.
数据稀疏问题的一种解决方法是平滑技术( Smoothing ),即给一些没有出现的词组合赋予一定先验概率.其基本思想都是增加低频词的频率,而降低高频词的频率.
深度序列模型( DeepSequenceModel )是指利用神经网络模型来估计条件概率 p (xt|x1∶(t−1) ) .
深度序列模型一般可以分为三个模块:嵌入层、特征层、输出层.
给定一个训练序列 x1∶t ,深度序列模型的训练目标是找到一组参数 使得对数似然函数最大.
构造一个序列生成模型后,需要有一个度量来评价其好坏.
困惑度( Perplexity )是信息论中的一个概念,可以用来衡量一个分布的不确定性.困惑度可以衡量模型分布与样本经验分布之间的契合程度.困惑度越低则两个分布越接近.因此,模型分布 p(x) 的好坏可以用困惑度来评价.
BLEU ( BiLingual Evaluation Understudy )算法是一种衡量模型生成序列和参考序列之间的 N 元词组( N-Gram )重合度的算法,最早用来评价机器翻译模型的质量,目前也广泛应用在各种序列生成任务中.
ROUGE ( Recall-Oriented Understudy for Gisting Evaluation )算法最早应用于文本摘要领域.和 BLEU 算法类似,但 ROUGE 算法计算的是召回率( Re-call ).
使用最大似然估计来学习自回归序列生成模型时,会存在以下三个主要问题:曝光偏差问题、训练目标不一致问题和计算效率问题.
在自回归生成模型中,第t步的输入为模型生成的前缀序.而在训练时,我们使用的前缀序列是训练集中的真实数据 ,而不是模型预测.这种学习方式也称为教师强制(Teacher Forcing )这种教师强制的学习方式存在协变量偏移问题.一旦在预测前缀的过程中存在错误,会导致错误传播,使得后续生成的序列也会偏离真实分布.这个问题称为曝光偏差( Exposure Bias )问题.
计划采样:为了缓解曝光偏差问题,我们可以在训练时混合使用真实数据和模型生成数据.
序列生成模型的好坏通常采用和任务相关的指标来进行评价,在训练时通常是使用最大似然估计来优化模型,这导致训练目标和评价方法不一致.
基于强化学习的序列生成:为了可以直接优化评价目标,我们可以将自回归序列生成看作一种马尔可夫决策过程,并使用强化学习的方法来进行训练.基于强化学习的序列生成模型不但可以解决训练和评价目标不一致问题,也可以有效地解决曝光偏差问题.
序列生成模型的输出层为词表中所有词的条件概率,需要 Softmax 归一化.当词表比较大时,计算效率比较低.
在实践中,我们通常采用一些近似估计的方法来加快训练速度.常用的方法可以分为两类:
三种加速训练速度的方法:
总结:基于采样的方法并不改变模型的结构,只是近似计算参数梯度.在训练时可以显著提高模型的训练速度,但是在测试阶段依然需要计算配分函数.而基于层次化 Softmax 的方法改变了模型的结构,在训练和测试时都可以加快计算速度.
序列到序列( Sequence-to-Sequence , Seq2Seq )是一种条件的序列生成问题,给定一个序列 x1∶ ,生成另一个序列 y 1∶t .
这里我们介绍三种主要的序列到序列模型:
实现序列到序列的最直接方法是使用两个循环神经网络来分别进行编码和解码,也称为编码器 - 解码器( Encoder-Decoder )模型.
编码器:首先使用一个循环神经网络 fenc 来编码输入序列 x1∶ 得到一个固定维数的向量 u ,u 一般为编码循环神经网络最后时刻的隐状态.
解码器:在生成目标序列时,使用另外一个循环神经网络 fenc 来进行解码.
缺点:
为了获取更丰富的输入序列信息,我们可以在每一步中通过注意力机制来从输入序列中选取有用的信息.
为了提高并行计算效率以及捕捉长距离的依赖关系,我们可以使用自注意力模型( Self-Attention Model )来建立一个全连接的网络结构.本节介绍一个目前非常成功的基于自注意力的序列到序列模型: Transformer
对于一个向量序列 ,首先用自注意力模型来对其进行编码.自注意力模型可以看作在一个线性投影空间中建立H中不同向量之间的交互关系.为了提取更多的交互信息,我们可以使用多头自注意力( Multi-HeadSelf-Attention ),在多个不同的投影空间中捕捉不同的交互信息.
对于一个序列 x1∶t ,我们可以构建一个含有多层多头自注意力模块的模型来对其进行编码.基于自注意力模型的序列编码可以看作一个全连接的前馈神经网络,第 l 层的每个位置都接受第 l − 1 层的所有位置的输出.不同的是,其连接权重是通过注意力机制动态计算得到.
Transformer 模型是一个基于多头自注意力的序列到序列模型,其整个网络结构可以分为两部分: