本文关键字: Seq2Seq,Attention
注意:如果看不到本文图片或者图片未能完全加载,请链接VPN翻墙或者更改HOST文件切换代理。
NLG,即为文本生成领域,英文全称为Natural Language Generation。该领域常见于机器翻译、对话系统、阅读理解、序列标注等任务。本文将尽可能对该领域常用技术理论进行总结。此外,由于从模型结构角度理解seq2seq并不全面,本文将从模型具体应用过程进行理论阐述,以便于读者更好的了解该领域常规方法。
1、seq2seq模型目标函数
NLG中常规方法即为Seq2Seq模型。该模型是一种端到端的模型结构,模型结构如下图所示,
其包含要素为起始序列(Source Sequence)、Encoder-Decoder模型结构、目标序列(Target Sequence)。其中Encoder(编码器)端作为模型重要的特征提取器,作用是将起始序列编码成相应的语义向量c(Context Vector),Decoder(解码器)端主要利用Encoder端的语义向量和解码器本身的隐层向量完成序列预测过程。
其训练的目标数学原理也较为直观,假设存在X={x1,x2,x3,x4,…,xn}作为起始序列,Y={y1,y2,y3,y4,…,yn}作为目标序列,同时训练过程中存在多组训练句子构成的数据集(X,Y)={(X1,Y1),(X2,Y2),…,(X3,Y3)},则对于每一个句子的训练与预测过程而言,将是追求概率P(Y|X)达到最优解的过程。具体目标函数表达式如下所示:
对两边取对数log运算,并通过极大似然处理以后,便得到了最终目标函数:
式子中θ即为训练参数,n表示句子数目。此时对于单个句子预测条件概率P(Y|X)而言,将通过贝叶斯乘法公式与句子中字词分布概率产生联系。若以(X,Y)某一个句子对举例而言,数学过程如下所示:
以上过程便将句子层级的概率求解与文本内部字词概率分布产生了关联,从而对模型训练过程提供了数学指引。
2、初始seq2seq训练过程
Seq2Seq模型运用过程主要包含训练阶段(Training)与推断阶段(Inference)。其中,Seq2Seq模型刚提出来的时候,其训练过程如下所示:
图中,以机器翻译任务为例,在模型训练过程中首先将目标序列(Target Seq)进行数据预处理,添加序列起始符号
该模型训练方法较为直接,但也存在一个很大的问题。如果模型decoder阶段在进行预测时,中间某一步出现错误,则会导致后续预测过程全部产生错误,最终导致整个模型由于错误预测序列信息从而学习到偏差较大的权重,从而影响模型效果。鉴于此模型将引入teacher forcing机制进行训练过程改革。Teacher forcing机制如下所示:
Teacher Forcing机制是在训练过程中,在decoder端将第T时刻的目标序列作为输入,将第T+1时刻的目标序列作为标签进行训练。在模型结构中,将引入softmax层将decoder获得的句子隐层状态量转化为字词分布概率,从而与T+1时刻的序列值对齐。最后,该过程将仅仅存在于训练阶段,在推断阶段并不存在此机制。
此外,在该机制训练过程中,可能存在decoder端模型输出预测序列字符与真实字符不一致情况,扩大训练误差。鉴于此将可以采取Scheduled Sampling策略。在该策略中,若某一个时间步模型输出序列字符和真实字符不相等时,便将从真实的字符与模型输出字符中,通过掷硬币的方式(或者一种50%几率的随机决策过程),选取一个字符作为下一个时间步的输入。该策略过程如下图所示。
3、初始seq2seq推断预测过程
在seq2seq模型推断过程中,由于缺少目标序列作为输入,因此teacher forcing机制将无法使用。该模型推断步骤包含GreedySeqrch、BeamSearch、Random Sample三种方式。其中Greedy Search方法如下图所示:
在解码过程中,decoder端输入encoder端编码的到的隐层向量(图中未画出此部分)
和目标序列初始时刻的起始编码
图中每一层树表示一个时间步解析过程,而红色的解析方向即为模型最优解,即红色解析路线能使得模型产生的目标序列概率达到最大。但该方法也存在较大问题,即在每一步解析过程需要选择满足最大概率分配的词进行输出,这种通过局部最优解产生全局最优解的贪心策略,其本质上并未能从整体最优上考虑,因此很难确保结果是全局最优状态。比如若某几个时间步预测概率较大,接近于1,而其他几步概率较小,则此方法解析过程得到的最优解很可能并不是接近于真实值的预测结果,将会存在较大误差。最终导致产生的序列缺乏语义连贯性。
鉴于此,是时候让BeamSearch机制上了!BeamSearch机制如下图所示:
BeamSeach机制需要设置一个参数Beam size值,设为K(或者B),其物理意义表示每个时间步中条件概率较大的TOP K个结果。如上图所示,对于为”ABC”的目标序列而言,第一个时间步挑选3个最优概率值参与下一步decoder解析过程,当时间步T=2
时,此时从9种解析情况中选取条件概率排名前3(图中标红色的项)的继续参与后续过程,待最后输出K个最优解。最终预测得到的序列将从这K个最优解中进行选择。从检索过程而言,当K=1时,BeamSearch过程也就是Greedy过程。但当K!=1时,其检索空间大于Greedy Search方法,从而易于寻找全局最优解。
除此以外还有一种解码策略Random Sampling。该策略与Greedy search类似,唯一的区别在于decoder每一个时间步解码生成字词分布概率时,将不在选择概率最大的单词输出,而是随机采样输出某一个字词作为预测序列字词。具体流程如下图所示:
4、带注意力机制的seq2seq模型
伴随着注意力机制发展,将seq2seq模型与注意力机制结合起来也逐步拥有了良好的理论基础。Seq2Seq与注意力机制结合的方案类别较多,本文将选取几个常见的进行阐述。首先,对于内部注意力机制而言,seq2seq模型中可以在Encoder端加入自注意力机制,从而提升encoder端文本特征提取能力,本文将不在详述,模型结构如Transformer一样。但有一点需要注意,当时用自注意力机制时,需要加入位置特征向量来记录原始序列中每一个分词的位置。此外在decoder端使用自注意力机制时,为了避免序列解码过程中受到后面时间步的文本信息影响,则需要加入MASK机制,具体如下图所示:
以序列“ABC
注意力机制计算过程如下:
1、假设模型从Encoder端输出hidden State向量为=(X(0),X(1),X(2),…,X(T)),假设当前decoder端解析得到的hidden state 为S0。
2、首先将S0与每一个时间步的Encoder端hidden staten向量进行相似度匹配,计算相似性分数,从而得到向量Score(S0,X(t))=((S0,X0),(S0,X1),(S0,X2),…,(S0,XT))
相似性分数计算方法如下所示:( 式子中V、W1、W2为模型训练过程中待学习参数。)
- 3、通过softmax计算将分数转化为具体相似性权值矩阵a。
- 4、利用注意力权值矩阵a进行加权求和,得到句子层级的context vector(C)。数学计算过程如下:
- 5、最后得到decoder下一个时刻隐藏状态值S1=F(S0,Y0,C),该位置输出为G(Y0,S0,C),其中G,F为激活函数
最后以机器翻译为例,附上一副全局的带注意力机制的seq2seq模型过程图:
5、模型评估指标
在文本生成任务中,常用模型评价指标为BLEU、Rouge系列。则假设在某个文本生成项目中,模型生成序列为G,真实序列为S,则此部分内容将以上述例子进行阐述。对于BlEU指标而言,首先根据下列公式计算S序列与G序列n-gram词组彼此匹配(Match)的准确率。(此处匹配的定义为模型生成序列S中的N-Gram词组出现在真实序列G中的情况):
此外若生成序列G长度远远小于S,则将会产生如下惩罚因子:
则最终BLEU指标计算方法如下:
BLEU是站在Precision角度来计算N-gram词组准确率,而另一种站在Recall角度来计算N-gram词组找回来吧的常用评估标准为Rouge,由于成稿时间限制,细节不在阐述,待后面补全。
本文到此就暂时结束了,NLG领域最具有灵魂的当属对话系统,这期间还涉及到强化学习应用过程,期待后面能够掌握更多的技术来完善本文!