900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 语音识别 HMM和端到端Seq-to-Seq模型的异同

语音识别 HMM和端到端Seq-to-Seq模型的异同

时间:2023-12-24 01:40:28

相关推荐

语音识别 HMM和端到端Seq-to-Seq模型的异同

文章目录

前言1 Hidden Markov Model (HMM)1-1 传统HMM1-2 HMM+Deep Learning1-2-1 Tendam1-2-2 DNN-HMM混合模型2 Seq-to-Seq模型2-1 CTC2-2 RNN Transducer3 生成alignment时的异同3-1 如何穷举所有**alignment**3-2 如何对所有**alignment**求和3-3 如何训练3-4 如何解码(decoding, testing)

前言

本文主要是李宏毅老师语音识别公开课(4/7)的笔记,图片也是从PPT中截取,全部课程可以参考这里,很推荐这里面讲RNN-T的部分,原始论文因为篇幅有限所以有些晦涩。

近几年语音领域的顶会发表了很多关于端到端Seq-to-Seq模型的研究,并且根据实验数据,在大规模语音数据集的支持下,他们的WER或者是CER都已经超过了传统的HMM,或者是hybrid HMM-DNN模型。但是以HMM为核心的开源工具kaldi仍然被用在工业应用的一线,低延迟和流式(straming)识别的能力使其备受青睐。在这里我想整理一下HMM和Seq-to-Seq模型的异同之处,并且分析一下各自的利弊,其中Seq-to-Seq模型主要以CTCRNN-T模型最为代表,虽然课程中也讲到了LAS模型,这里就暂时不整理了。

1 Hidden Markov Model (HMM)

1-1 传统HMM

先是老生常谈的语音识别经典条件概率公式:

Y∗=argmaxYP(Y∣X)=argmaxYP(X∣Y)P(Y)P(X)=argmaxYP(X∣Y)P(Y)Y^*=\underset{Y}{argmax}P(Y|X)=\underset{Y}{argmax}\frac{P(X|Y)P(Y)}{P(X)}=\underset{Y}{argmax}P(X|Y)P(Y)Y∗=Yargmax​P(Y∣X)=Yargmax​P(X)P(X∣Y)P(Y)​=Yargmax​P(X∣Y)P(Y)

统计学的思想就是,给定一个序列的特征向量XXX,穷举出所有可能的token序列组合YYY,从这些token序列中找出使这个条件概率最大的序列作为识别结果Y∗Y^*Y∗,不管是HMM还是Seq-to-Seq模型他们不外乎都是在为P(X∣Y)P(X|Y)P(X∣Y)这个声学模型建模。

HMM中的序列单位既不是word也不是token,它比一个phoneme还要小,是一个state。我们首先说phoneme,或者音素,它是发音的最基本单位,以下图的waht do you think为例,他的phoneme可以拆解为hh w aa t d uw y uw th ih ng k,进一步phoneme还以拆解为triphone,比如上面的d可以拆解为t-d+uwth可以拆解为uw-th+ih,注意这不是三个phoneme连在一起,而是将一个phoneme细分为更小的考虑上下文发音的单位。triphone还可以进一步细分,每个triphone还可为分解为多个state,一般是3个或者5个,比如上面的t-d+uw可以拆分为t-d+uw1 t-d+uw2 t-d+uw3

在一个triphone中,从起始状态开始到终止状态结束,每个状态可以生成1个或多个特征向量,之后在跳转到下一个状态或者自跳转,在这里我们用状态序列S代替token序列Y,现在需要求解的就是P(X∣S)P(X|S)P(X∣S),即给定状态序列能生成什么样的特征向量序列。这里我们需要对转移概率(transition probability)和发射概率(emission probability)进行建模。对于转移概率,如果从状态a跳到状态b,用条件概率表示转移概率就是P(b∣a)P(b|a)P(b∣a),对于发射概率,我们需要知道给定一个state,这个state产生某一段特征向量的概率有多大,这里有一个前提条件,就是我们已经知道每个state产生的音频特征向量会遵循固定的概率分布P(X∣t−d+uw1)P(X|t-d+uw1)P(X∣t−d+uw1),这个分布我们用Gaussian Mixture Model (GMM)来表示。在HMM中之所以使用这么小的单位,是因为我们要确保每个状态都能对应不同的音频特征分布,只有这样我们的前提条件才能成立。

但此时出现了一个问题,那就是这么细分的话state数量会是指数级的,同时也就需要同样数量的GMM,但在我们的训练集中很可能某个state只出现几次,根本无法得知它对应的GMM长什么样子。为了解决这个问题便引入了Tied state技术,或者状态聚类,也就是将几个发音相似的state公用一个GMM,将极少出现的几个state并入到经常出现的state中,以大幅减少GMM的建模数量,人们很长一段时间都在研究将哪些state归为一类共用GMM,也就是决策树枝剪需要的规则,最终这种技术便发展为Subspace GMM

现在我们假设已经知道了每个state的发射概率和转移概率(具体计算推荐参考这个公开课),也就是Pθ(X∣S)P_{\theta}(X|S)Pθ​(X∣S)中的参数θ\thetaθ,但还是没法计算P(X∣S)P(X|S)P(X∣S),因为缺少关键的alignment,也就是说对于给定的特征向量序列,我们不知道哪些时刻的特征向量对应哪个state,很明显特征向量序列的长度是要大于state数量的,比如下图中的6个特征向量可以对应到aabbcc这样的state序列,即每个state按顺序产生2个特征向量,一旦有了alignment的信息,我们可以根据已知的发射概率P(x1∣a),P(x2∣a),...P(x6∣c)P(x^1|a),P(x^2|a),...P(x^6|c)P(x1∣a),P(x2∣a),...P(x6∣c)和转移概率P(a∣a),P(b∣a),...P(c∣c)P(a|a),P(b|a),...P(c|c)P(a∣a),P(b∣a),...P(c∣c)来计算P(X∣h1)P(X|h^1)P(X∣h1)。在不知道alignment的情况下,HMM的做法是穷举所有的alignment,也就是说

Pθ(X∣S)=∑h∈align(S)P(X∣h)P_{\theta}(X|S)=\sum_{h\in align(S)}P(X|h)Pθ​(X∣S)=∑h∈align(S)​P(X∣h),这里的hhh是所有有效的alignment

1-2 HMM+Deep Learning

1-2-1 Tendam

Tandem方法基本上与传统HMM是一致的,唯一区别就是它不直接读取特征向量序列,而是先把每个时刻的特征向量送入DNN中做一个优化,之后将DNN的输出向量作为特征向量使用,其他的都和HMM保持一致。这里DNN的输出是一个维度为state个数的向量,输出层用一个softmax函数将输出结果表示为该时刻特征值属于各个state的概率是多少,如下图所示的[p(a∣xi),p(b∣xi),p(xi∣c)...][p(a|x^i), p(b|x^i), p(x^i|c)...][p(a∣xi),p(b∣xi),p(xi∣c)...],这是最早的HMM和深度学习结合的方法。

1-2-2 DNN-HMM混合模型

也就是DNN-HMM Hybrid,在传统的HMM中,我们用GMM来拟合某个state生成特征向量的概率分布p(x∣a)p(x|a)p(x∣a),那么我们希望可以用DNN来取代GMM。DNN计算的是给定某个特征向量,该特征向量属于哪个state的概率分布即p(a∣x)p(a|x)p(a∣x),因此我们用贝叶斯公式把他们结合起来,即

P(x∣a)=P(x,a)P(a)=P(a∣x)P(x)P(a)P(x|a)=\frac{P(x,a)}{P(a)}=\frac{P(a|x)P(x)}{P(a)}P(x∣a)=P(a)P(x,a)​=P(a)P(a∣x)P(x)​

这里的P(a∣x)P(a|x)P(a∣x)就对应DNN的输出,P(a)P(a)P(a)是某个状态出现的概率,可以通过统计训练集得到,由此我们可以直接用DNN的输出来代替GMM。而DNN优于GMM的主要原因是,我们可以发现之前的每个state对应一个GMM,每个GMM都有自己的均值向量和协方差矩阵,但DNN确是被所有state共用的,可以理解为一个终极Tied state。但同时我们也会注意到一个问题,DNN的训练是区分式训练(discriminative),不像GMM是生成式训练可以通过最大似然估计来进行迭代,DNN的训练需要label,即哪个特征向量对应哪个state,也就是上面说到的alignment,很明显我们不知道这种信息。这里采用的方法是先训练一个HMM-GMM模型用来生成一个alignment,再根据这个alignment训练DNN,也就是在kaldi中从monophone的训练到tri4训练的阶段。这种混合模型是现在最广泛被应用到产品中的模型,虽然最新的论文都是关于Seq-to-Seq的,但还没有被广泛应用。

2 Seq-to-Seq模型

2-1 CTC

CTC我比较熟悉,这里就暂时不做笔记了,但RNN-T没怎么用过,所以只对RNN-T单独做一下笔记

2-2 RNN Transducer

在说明RNN-T之前有必要引入RNA(Recurrent Neural Aligner)模型和CTC进行对比,CTC最大的特点就是给定一个输入(encoder之后的特征向量)产生一个输出,并且前后完全独立互不影响。如果将CTC的输出层替换成一个上下文相关的RNN,就转换成了RNA模型,如下图所示:

我们接着对RNA进一步改进,不再是一个输入对应一个输出的结构,而是使其给一个输入能够产生多个token输出,直到输出1个空字符ϕ\phiϕ表示需要下一个输入,也就是说最后ϕ\phiϕ的数量一定是和输入的长度相同,因为每一帧输入一定会产生一个ϕ\phiϕ,这一点在RNN-T的原始论文Sequence Transduction with Recurrent Neural Networks中几乎没有说明,我也看得很迷,该示意图如下图所示:

到此还不是RNN-T的完全体,因为还没有出现论文中的Prediction Network,原文中的Transcription Network对应的应该是一个特征向量的encoder,但他这个课程里面的示意图有一点很奇怪,那就是他的RNN输入除了输入特征向量和hidden state,还有前一帧的output distribution,一般RNN的输出可以写成:

ht=H(Wihit+Whhht−1+bh)h_t=H(W_{ih}i_t+W_{hh}h_{t-1}+b_h)ht​=H(Wih​it​+Whh​ht−1​+bh​)

但这里是不是应该写成:

yt−1=softmax(F(ht−1))ht=H(Wih[it;yt−1]+Whhht−1+bh)y_{t-1}=softmax(F(h_{t-1}))\\h_t=H(W_{ih}[i_t;y_{t-1}]+W_{hh}h_{t-1}+b_h)yt−1​=softmax(F(ht−1​))ht​=H(Wih​[it​;yt−1​]+Whh​ht−1​+bh​)

这个问题先保留一下,回到上文,当前的模型还不是完全体的RNN-T,前面说的把CTC的ouptut layer直接替换成1个RNN,但实际上并不是直接替换,而是单独训练了一个RNN,也就是论文中的Prediction Network,他的输入序列长度就是所有非ϕ\phiϕtoken的序列长度,用(y1,y2,...,yU)(y_1, y_2, ..., y_U)(y1​,y2​,...,yU​)来表示,输出序列也是该长度用(g1,g2,...gU)(g_1, g_2, ... g_U)(g1​,g2​,...gU​)来表示,该输出序列通过下图中的红色箭头表示,可以看到它将上文的信息传递到当前时刻和当前时刻的输入hth_tht​共同组成当前时刻的decoder输入:

同时这个Prediction Network不会将ϕ\phiϕ作为输入而是直接跳过。

3 生成alignment时的异同

CTC和RNN-T模型也需要alignment,因为输入和输出长度不同,所以要在输出的token中插入一些空字符nullnullnull,最后解码时再删掉空字符并且去重就得到最后的输出。和HMM一样,同一个输出token序列的alignment有很多种,也需要把所有可能的alignment概率加起来,

即P(Y∣X)=∑h∈align(Y)P(h∣X)P(Y|X)=\sum_{h\in align(Y)}P(h|X)P(Y∣X)=∑h∈align(Y)​P(h∣X),其中解码和训练分别用下式表示,Y^\widehat{Y}Y表示标注的token序列:

Decoding:Y∗=argmaxYlogP(Y∣X)Training:θ∗=argmaxθlogPθ(Y^∣X)Decoding: Y^*=\underset{Y}{argmax} \space logP(Y|X) \\ Training: \theta^*=\underset{\theta}{argmax} \space log P_{\theta}(\widehat{Y}|X)Decoding:Y∗=Yargmax​logP(Y∣X)Training:θ∗=θargmax​logPθ​(Y∣X)

注意一下,这里区别已经出来了,Seq-to-Seq模型中可以直接求P(Y∣X)P(Y|X)P(Y∣X),不需要用贝叶斯公式转换,所以在对alignment求和时式子也就不一样:

HMM:Pθ(X∣S)=∑h∈align(S)P(X∣h)CTC,RNN−T:Pθ(Y∣X)=∑h∈align(Y)P(h∣X)HMM: P_{\theta}(X|S)=\sum_{h\in align(S)}P(X|h)\\ CTC,RNN-T: P_{\theta}(Y|X)=\sum_{h\in align(Y)}P(h|X)HMM:Pθ​(X∣S)=h∈align(S)∑​P(X∣h)CTC,RNN−T:Pθ​(Y∣X)=h∈align(Y)∑​P(h∣X)

下面主要针对这几个问题来讲解HMM和Seq-to-Seq模型的异同,问题设定是如下图所示的6帧输入特征向量,输出3个token。

3-1 如何穷举所有alignment

HMM

HMM的做法是重复token,让token的长度和输入一致,比如ccaaat,或者caaaat… 直到穷举出所有有效的alignment。从第1帧开始可以选择重复当前token,或者输出下一个token,将这个过程用如下的表格表示的话,就是这个箭头只能往右走或者往右下走,终点一定是最后一帧的最后1个token, 不同颜色对应不同alignment,对于HMM,一般这个转态转换图的纵坐标应该是不同的state,这里用token是为了说明HMM和Seq-to-Seq模型的异同。

CTC:

CTC的做法是加入空字符ϕ\phiϕ,或者重复token让token的长度和输出保持一致,比如cϕ\phiϕaatt,或者ϕ\phiϕcaϕ\phiϕtϕ\phiϕ…。用graph表示的话如下图所示:

不同于HMM在每一点都可以向右或者向右下走,CTC中如果当前帧的token不是ϕ\phiϕ,那么下一步可以选择重复当前token,插入ϕ\phiϕ或者跳过ϕ\phiϕ输出下一个非ϕ\phiϕ的token,如果当前帧的token是ϕ\phiϕ,就不能跳过下一个token,否则输出就会少一个关键的token,这就是CTC在生成alignment时与HMM不同的地方,并且终点可以是以t为终点,也可以是以ϕ\phiϕ为终点。注意CTC中有一个特殊情况,那就是如果当前token(非ϕ\phiϕ)和下一个token(非ϕ\phiϕ)一样,那么就不能跳过下一个ϕ\phiϕ,否则输出里面就会把这两个token当做重复的token合并起来,必须通过ϕ\phiϕ把他们分开。

RNN-T:

在输出token中插入6个ϕ\phiϕ,也就是说每读取1帧特征向量都会生成1个ϕ\phiϕ,不同的插入方式会导致不同的alignment,比如cϕ\phiϕϕ\phiϕϕ\phiϕaϕ\phiϕϕ\phiϕtϕ\phiϕ…。RNN-T中插入算法如下图所示:

非ϕ\phiϕtoken只输出一次,任意token之间可以插入任意数量个ϕ\phiϕ,但最后一个token之后一定要插入ϕ\phiϕ,表示当前特征向量读取结束。用graph表示的话如下图所示:

向右表示插入1个ϕ\phiϕ,向下表示输出下1个token,最后一步必须至少插入1个ϕ\phiϕ,所以会向右多出来一块。注意这里和HMM,CTC不太一样,向右不是重复,而是插入一个ϕ\phiϕ。

总结

用下图总结一下,虽然我们都画成一种像HMM那样的状态转移图,但实际上HMM是生成模型,而CTC和RNN-T是判别模型,在HMM中是通过3个state来生成特征向量,而CTC是给定特征向量输出特定的alignment,并且额外引入了ϕ\phiϕ。最后是RNN-T,很明显可以注意到他没有self-loop,进去某个token的state之后下一帧必须出来。

3-2 如何对所有alignment求和

实际上对所有alignment求和时,3个模型用的算法都是一样的,我们在这里用RNN-T举例,需要注意一下就是在RNN-T和CTC中输入的特征向量不是原始的MFCC或者filter bank,而是经过encoder之后的结果,一般用h1,h2..,hTh_1,h_2..,h_Th1​,h2​..,hT​来表示。

RNN-T

首先我们对一条路径计算score,或者概率,该路径如下图所示:

该路径可以表示为 h=ϕcϕϕaϕtϕϕh=\phi c\phi\phi a\phi t\phi\phih=ϕcϕϕaϕtϕϕ,在给定特征向量时该路径的score用下式计算:

P(h∣X)=P(ϕ∣X)P(c∣X,ϕ)P(ϕ∣X,ϕc)...P(h|X)=P(\phi|X)P(c|X,\phi)P(\phi|X,\phi c)...P(h∣X)=P(ϕ∣X)P(c∣X,ϕ)P(ϕ∣X,ϕc)...

如下图所示,我们给出第1个时刻的输入h1h_1h1​,此时还没有任何token输出,因此我们用一个开始符号<BOS><BOS><BOS>作为Prediction Network的输入,把它的输出l0l_0l0​和当前输入h1h_1h1​一起送到decoder中产生1个output distribution的输出p1,0(ϕ)p_{1,0}(\phi)p1,0​(ϕ),从这个distribution中我们可以得到第1个tokenϕ\phiϕ的输出概率。

因为第一帧的输出是ϕ\phiϕ,所以对于下一时刻的decoder输入,l0l_0l0​保持不变,输入特征向量变成h2h_2h2​,同样可以输出一个output distribution表示为p2,0p_{2,0}p2,0​,可以得到输出token ccc的概率p2,0(c)p_{2,0}(c)p2,0​(c)。直到最后输入h6h^6h6可以得到ϕ\phiϕ在最后一帧的概率p6,3(ϕ)p_{6,3}(\phi)p6,3​(ϕ),将他们相乘就是这个alignment的概率:

h(h∣X)=p1,0(ϕ)p2,0(c)p2,1(ϕ)...p6,3(ϕ)h(h|X)=p_{1,0}(\phi)p_{2,0}(c)p_{2,1}(\phi)...p_{6,3}(\phi)h(h∣X)=p1,0​(ϕ)p2,0​(c)p2,1​(ϕ)...p6,3​(ϕ)

下面我们来讨论一下RNN-T中比较特别的地方,或者说为什么要单独训练一个RNN,如下图所示:

l0,l1,l2,l3l_0,l_1,l_2,l_3l0​,l1​,l2​,l3​分别表示Prediction Network对应<BOS>,c,a,t<BOS>, c, a, t<BOS>,c,a,t的输出,表格中的任意一

格都对应一个概率分布,比如这里的p4,2p_{4,2}p4,2​,表示decoder将h4h_4h4​和l2l_2l2​作为输入是产生的token概率分布,同时很关键的一点是,每一格的概率分布和走到这一点的路径没有关系,不管怎么走,每一格的概率分布都是一定的,这个其实很好想,因为Prediction Network不接受ϕ\phiϕ作为输入,只看token,l0...l3l_0...l_3l0​...l3​都是固定的,自然而然每一格的概率分布也是固定的。

最后我们来计算所有alignment概率之和,用的方法和HMM是一样的,即前向后向算法,核心是动态规划,这里我们引入一个重要的参数 αi,j\alpha_{i,j}αi,j​ 来表示当走到第iii个输入特征向量hih_ihi​并且输出第jjj个token时所有路径(alignment)的概率和。以下图为例:

为了计算α4,2\alpha_{4,2}α4,2​,我们要先计算α4,1\alpha_{4,1}α4,1​和α3,2\alpha_{3,2}α3,2​,从α4,1\alpha_{4,1}α4,1​到α4,2\alpha_{4,2}α4,2​需要生成1个token a,而从α3,2\alpha_{3,2}α3,2​到α4,2\alpha_{4,2}α4,2​ 需要生成1个ϕ\phiϕ,即 α4,2=α4,1p4,1(a)+α3,2p3,2(ϕ)\alpha_{4,2}=\alpha_{4,1}p_{4,1}(a)+\alpha_{3,2}p_{3,2}(\phi)α4,2​=α4,1​p4,1​(a)+α3,2​p3,2​(ϕ)。那么通过动态规划算法就可以计算出最右下角的αi,j\alpha_{i,j}αi,j​,

即αi,j=∑h∈align(Y)P(h∣X)\alpha_{i,j}=\sum_{h\in align(Y)}P(h|X)αi,j​=∑h∈align(Y)​P(h∣X)。

3-3 如何训练

到目前为止,我们得到的是 Pθ(Y∣X)=∑h∈align(Y)P(h∣X)P_{\theta}(Y|X)=\sum_{h\in align(Y)}P(h|X)Pθ​(Y∣X)=∑h∈align(Y)​P(h∣X),实际上我们并不知道θ\thetaθ,也就是说不先对模型进行训练是无法计算alignment概率之和的,训练的目的是更新参数θ\thetaθ,用下式表示就是:

θ∗=argmaxθlogPθ(Y^∣X)\theta^*=\underset{\theta}{argmax} log P_{\theta}(\widehat{Y}|X) θ∗=θargmax​logPθ​(Y∣X)

Y^\widehat{Y}Y是标注的token序列,希望能够训练出的参数使得在给定特征向量的条件下,输出的Y^\widehat{Y}Y的概率最大。HMM用的训练方法是EM迭代,RNN-T和CTC都用梯度下降,即计算∂P(Y^∣X)∂θ\frac{\partial{P(\widehat{Y}|X)}}{\partial{\theta}}∂θ∂P(Y∣X)​。

下面我们来计算这个偏微分

前面讲过,P(Y^∣X)=∑hP(h∣X)P(\widehat{Y}|X)=\sum_hP(h|X)P(Y∣X)=∑h​P(h∣X),而其中每个alignment的概率都是由若干概率相乘得到的,如下图所示:

我们以这样一个alignment为例:ϕcϕϕaϕtϕϕ\phi c\phi\phi a\phi t\phi\phiϕcϕϕaϕtϕϕ,P(h∣X)=p1,0(ϕ)p2,0(c)...p6,3(ϕ)P(h|X)=p_{1,0}(\phi)p_{2,0}(c)...p_{6,3}(\phi)P(h∣X)=p1,0​(ϕ)p2,0​(c)...p6,3​(ϕ),而pi,j(token)p_{i,j}(token)pi,j​(token)又是由模型计算出来的,因此我们用链式求导公式可以得到:

∂P(Y^∣X)∂θ=∂p1,0(ϕ)∂θ∂P(Y^∣X)∂p1,0(ϕ)+...+∂p4,1(a)∂θ∂P(Y^∣X)∂p4,1(a)+...\frac{\partial{P(\widehat{Y}|X)}}{\partial{\theta}}=\frac{\partial{p_{1,0}(\phi)}}{\partial{\theta}}\frac{\partial{P(\widehat{Y}|X)}}{\partial{p_{1,0}(\phi)}}+...+\frac{\partial{p_{4,1}(a)}}{\partial{\theta}}\frac{\partial{P(\widehat{Y}|X)}}{\partial{p_{4,1}(a)}}+...∂θ∂P(Y∣X)​=∂θ∂p1,0​(ϕ)​∂p1,0​(ϕ)∂P(Y∣X)​+...+∂θ∂p4,1​(a)​∂p4,1​(a)∂P(Y∣X)​+...

以p4,1(a)p_{4,1}(a)p4,1​(a)为例,∂p4,1(a)∂θ\frac{\partial{p_{4,1}(a)}}{\partial{\theta}}∂θ∂p4,1​(a)​实际上就是对模型用BP求梯度,这里主要记一下链式求导的后一项∂P(Y^∣X)∂p4,1(a)\frac{\partial{P(\widehat{Y}|X)}}{\partial{p_{4,1}(a)}}∂p4,1​(a)∂P(Y∣X)​,为了求这一项,我们可以将P(Y^∣X)P(\widehat{Y}|X)P(Y∣X)分成两个部分,一部分是包含p4,1(a)p_{4,1}(a)p4,1​(a)的所有路径,另一部分是不包含p4,1(a)p_{4,1}(a)p4,1​(a)的所有路径,即:

P(Y^∣X)=∑hwithp4,1(a)P(h∣X)+∑hwithoutp4,1(a)P(h∣X)P(\widehat{Y}|X)=\sum_{h\space with \space p_{4,1}(a)}P(h|X)+\sum_{h\space without \space p_{4,1}(a)}P(h|X)P(Y∣X)=hwithp4,1​(a)∑​P(h∣X)+hwithoutp4,1​(a)∑​P(h∣X)

求偏微分时很明显后面一项直接为0,同时前一项的P(h∣X)P(h|X)P(h∣X)也可以写成P(h∣X)=p4,1(a)×otherP(h|X)=p_{4,1}(a) \times otherP(h∣X)=p4,1​(a)×other,我们可以得到:

∂P(Y^∣X)∂p4,1(a)=∑hwithp4,1(a)other=∑hwithp4,1(a)P(h∣X)p4,1(a)=1p4,1(a)∑hwithp4,1(a)P(h∣X)\frac{\partial{P(\widehat{Y}|X)}}{\partial{p_{4,1}(a)}}=\sum_{h\space with p_{4,1}(a)}other=\sum_{h\space with \space p_{4,1}(a)}\frac{P(h|X)}{p_{4,1}(a)}=\frac{1}{p_{4,1}(a)}\sum_{h\space with \space p_{4,1}(a)}P(h|X)∂p4,1​(a)∂P(Y∣X)​=hwithp4,1​(a)∑​other=hwithp4,1​(a)∑​p4,1​(a)P(h∣X)​=p4,1​(a)1​hwithp4,1​(a)∑​P(h∣X)

最后一项实际上就是所有通过p4,1(a)p_{4,1}(a)p4,1​(a)的路径概率值和,为了计算这个我们再引入一个参数βi,.j\beta_{i,.j}βi,.j​,和αi,j\alpha_{i,j}αi,j​相反,表示从第iii个特征向量,以及已经产生jjj个token开始,走到终点所有的路径概率总和,如下图所示:

比如图中的β4,2\beta_{4,2}β4,2​就是从已经经过444个特征向量,并且产生222个token这一点开始,不管怎么走,走到终点所有alignment概率之和,同样地为了计算β4,2\beta_{4,2}β4,2​,需要知道β5,2\beta_{5,2}β5,2​和β4,3\beta_{4,3}β4,3​,即β4,2=β4,3p4,2(t)+β5,2p4,2(a)\beta_{4,2}=\beta_{4,3}p_{4,2}(t)+\beta_{5,2}p_{4,2}(a)β4,2​=β4,3​p4,2​(t)+β5,2​p4,2​(a),表格中所有点的β\betaβ都可以用动态规划计算出来,有了所有点的αi,j\alpha_{i,j}αi,j​和βi,j\beta_{i,j}βi,j​,就可以计算出所有包含p4,1(a)p_{4,1}(a)p4,1​(a)的所有路径概率之和,如下图所示 (熟悉HMM中的前向后向算法的话这个图一看就能明白):

∑hwithp4,1(a)P(h∣X)=α4,1p4,1(a)β4,2\sum_{h\space with \space p_{4,1}(a)}P(h|X)=\alpha_{4,1}p_{4,1}(a)\beta_{4,2}hwithp4,1​(a)∑​P(h∣X)=α4,1​p4,1​(a)β4,2​

进一步可以得到偏微分:

∂P(Y^∣X)∂θ=∂p1,0(ϕ)∂θ∂P(Y^∣X)∂p1,0(ϕ)+...+∂p4,1(a)∂θα4,1β4,2+...\frac{\partial{P(\widehat{Y}|X)}}{\partial{\theta}}=\frac{\partial{p_{1,0}(\phi)}}{\partial{\theta}}\frac{\partial{P(\widehat{Y}|X)}}{\partial{p_{1,0}(\phi)}}+...+\frac{\partial{p_{4,1}(a)}}{\partial{\theta}}\alpha_{4,1}\beta_{4,2}+...∂θ∂P(Y∣X)​=∂θ∂p1,0​(ϕ)​∂p1,0​(ϕ)∂P(Y∣X)​+...+∂θ∂p4,1​(a)​α4,1​β4,2​+...

3-4 如何解码(decoding, testing)

模型训练好之后就需要解码,即输出1个最优的token序列:Y∗=argmaxYlogP(Y∣X)Y^*=\underset{Y}{argmax}\space log P(Y|X)Y∗=Yargmax​logP(Y∣X),但这里的P(Y∣X)P(Y|X)P(Y∣X)还是要写成∑h∈align(Y)P(h∣X)\sum_{h\in align(Y)}P(h|X)∑h∈align(Y)​P(h∣X),也就是说还要找到所有的alignment再对其概率求和才行,这样的得到的token序列肯定是最优解,但实际上这样做成本很高,一般的做法是把上面的式子简化为下式:

Y∗=argmaxYmaxh∈align(Y)logP(h∣X)Y^*=\underset{Y}{argmax}\space \underset{h \in align(Y)}{max}log P(h|X)Y∗=Yargmax​h∈align(Y)max​logP(h∣X)

解释一下就是用概率最大的一个alignment去代替所有alignment之和,也就是认为除了概率最大的alignment,其他的概率之和都很小,不用考虑。那么现在的任务就转换为找到1个概率最大的alignment,即

h∗=argmaxhlogP(h∣X)h^*=\underset{h}{argmax}\space logP(h|X)h∗=hargmax​logP(h∣X),这就又回到了beam search和greedy search的问题。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。