语音识别中的CTC算法的基本原理解释 (3)

这6条路径中,\(\pi^1\)可以被认为是“今夜无人入睡”, \(\pi^2\)可以被认为是在说“你好”,\(\pi^3\)可以被认为是在说“好你”,\(\pi4,\pi5,\pi6\)都可以认为是在说“你好”。

定义B变换,表示简单的压缩,例如:
\(B(a,a,a,b,b,b,c,c,d) = (a,b,c,d)\)

以上6条路径为例:
\(B(\pi^1) = (j,i,n,y,e,w,u,r,e,n,r,u,s,h,u,i)\)
\(B(\pi^2) = (n,i,h,a,)\)
\(B(\pi^3) = (h,a,o,n,i)\)
\(B(\pi^4) = (n,i,h,a,o)\)
\(B(\pi^5) = (n,i,h,a,o)\)
\(B(\pi^6) = (n,i,h,a,o)\)

因此,如果有一条路径\(\pi\)\(B(\pi)=(n,i,h,a,o)\),则可以认为\(\pi\)是在说“你好”。即使它是如\(\pi^4\)所示,有很多“o”的音素,而其他音素很少。路径\(\pi = (\pi^1,\pi^2,...,\pi^T)\)的概率为它所经过的矩阵y上的元素相乘:

\(p(\pi|x) = p(\pi| y = N_w(x)) = p(\pi| y)=\prod_{t=1}^{T} y^t_{\pi_t}\)

因此在没有对齐的情况下,目标函数应该为\(\lbrace \pi | B(\pi) = z \rbrace\)中所有元素概率之和。 即:
\(max_w p(z|y=N_w(x)) = p(z|x)= \sum_{B(\pi)=z}p(\pi|x)\) \(\qquad\qquad\qquad\) (4)

在T=30,音素为\([n,i,h,a,o]\)的情况下,共有\(C^5_{29}\approx120000\)条路径可以被压缩为\([n,i,h,a,o]\)。 路径数目的计算公式为\(C^{音素个数}_{T-1}\),量级大约为\((T-1)^{音素个数}\)。一段30秒包含50个汉字的语音,其可能的路径数目可以高达\(10^8\),显然这么大的路径数目是无法直接计算的。因此CTC方法中借用了HMM中的向前向后算法来计算。

训练实施方法

CTC的训练过程是通过$\frac {\partial p(z|x)}{\partial w} $调整w的值使得4中的目标值最大,而计算的过程如下:

这里写图片描述

因此,只要得到$\frac {\partial p(z|x)}{\partial y^t_k} \(,即可根据反向传播,得到\)\frac {\partial p(z|x)}{\partial w} $。下面以“你好”为例,介绍该值的计算方法。

首先,根据前面的例子,找到所有可能被压缩为\(z=[n,i,h,a,o]\)的路径,记为\(\lbrace \pi|B(\pi) = z \rbrace\)。 可知所有\(\pi\)均有\([n,n,n,....,n,i,.....,i,h,.....h,a,....a,o,...,o]\)的形式,即目标函数只与后验概率矩阵y中表示\(n,i,h,a,o\)的5行相关,因此为了简便,我们将这5行提取出来,如下图所示。

这里写图片描述

在每一个点上,路径只能向右或者向下转移,画出两条路径,分别用q和r表示,这两条路径都经过\(y^{14}_h\)这点,表示这两点路径均在第14帧的时候在发“h”音。因为在目标函数4的连加项中,有的项与\(y^{14}_h\)无关,因此可以剔除这一部分,只留下与\(y^{14}_h\)有关的部分,记为\(\lbrace \pi|B(\pi) = z, \pi_{14}=h \rbrace\)

$\frac {\partial p(z|y)}{\partial y^{14}_h} $

= $\frac {\partial \sum_{B(\pi)=z}p(\pi|y)}{\partial y^{14}_h} $

= $\frac {\partial \sum_{B(\pi)=z}\prod_{t=1}^T y^t_{\pi_t}}{\partial y^{14}_h} $
=\(\frac {\overbrace{\partial \sum_{B(\pi)=z,\pi_{14}=h}\prod_{t=1}^T y^t_{\pi_t}}^{和y^{14}_h有关的项} + \overbrace{\partial \sum_{B(\pi)=z,\pi_{14} \neq h}\prod_{t=1}^T y^t_{\pi_t}}^{和y^{14}_h无关的项}}{\partial y^{14}_h}\)

=\(\frac {\partial \sum_{B(\pi)=z,\pi_{14}=h}\prod_{t=1}^T y^t_{\pi_t}}{\partial y^{14}_h}\)

这里的q和r就是与\(y^{14}_h\)相关的两条路径。用\(q_{1:13}\)\(q_{15:30}\)分别表示\(q\)\(y^{14}_h\)之前和之后的部分,同样的,用\(r_{1:13}\)\(r_{15:30}\)分别表示\(r\)\(y^{14}_h\)之前和之后的部分.。可以发现,\(q_{1:13} + h + r_{15:30}\)\(r_{1:13} + h + q_{15:30}\)同样也是两条可行的路径。\(q_{1:13} + h + r_{15:30}\)\(r_{1:13} + h + q_{15:30}\)\(q\)\(r\)这四条路径的概率之和为:
\(\underbrace{y^1_{q1}..y^{13}_{q13}.y^{14}_{h}.y^{15}_{q15}....y^{30}_{q30}}_{路径q的概率}\)

+\(\underbrace{y^1_{q1}..y^{13}_{q13}.y^{14}_{h}.y^{15}_{r15}....y^{30}_{r30}}_{路径q_{1:14}+r_{14:30}的概率}\)

+\(\underbrace{y^1_{r1}..y^{13}_{r13}.y^{14}_{h}.y^{15}_{q15}....y^{30}_{q30}}_{路径r_{1:14}+q_{14:30}的概率}\)

+\(\underbrace{y^1_{r1}..y^{13}_{r13}.y^{14}_{h}.y^{15}_{r15}....y^{30}_{r30}}_{路径r的概率}\)

=\((y^1_{q1}....y^{13}_{q13} + y^1_{r1}.....y^{13}_{r13}).y^{14}_h.(y^{15}_{q15}....y^{30}_{q15}+y^{15}_{r15}....y^{30}_{r30})\)

可以发现,该值可以总结为:(前置项)\(.y^{14}_h.\)(后置项)。由此,对于所有的经过\(y^{14}_h\)的路径,有:

\(\sum_{B(\pi)=z,\pi_{14}=h}\prod_{t=1}^T y^t_{\pi_t}= (前置项).y^{14}_h.\)(后置项)$

定义:
$\alpha_(14)(h)=(前置项).y^{14}h = \sum{B(\pi_{1:14})=[n,i,h] }\prod_{t\prime=1}^t y^{t\prime}{\pi{t\prime}} $

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzsjs.html