如何理解语音识别中的CTC算法?

  • 回答 (6)
  • 关注 (0)
  • 查看 (487)

小白一枚,能否解释一下CTC算法的基本概念,可能应用的领域,以及在结合神经网络进行CTC算法的计算细节呀?

仁传联仁传联提问于
蓝蓝天上vzh怪兽工程师回答于

路径π和B变换:

在实际训练中并不知道每一帧对应的音素,因此进行训练比较困难。可以先考虑一种简单的情况,已知每一帧的音素的标签z′, 即训练样本为x和z′,其中z′不再是简单的[n,i,h,a,o]标签,而是:

在我们的例子中, z′=[n,n,n,n,n,n,n,i,i,i,i,i,i,h,h,h,h,h,h,h,a,a,a,a,a,a,o,o,o,o,o,o,o], z′包含了每一帧的标签。在这种情况下有:

(1)

该值即为后验概率图中用黑线圈起来的部分相乘。我们希望相乘的值越大越好,因此,数学规划可以写为:

(2)

(3)

目标函数对于后验概率矩阵y中的每个元素

的偏导数为:

也就是说,在每个时刻t(对应矩阵的一列),目标只与

是相关的,在这个例子中是与被框起来的元素相关。

其中Nw可以看做是RNN模型,如果训练数据的每一帧都标记了正确的音素,那么训练过程就很简单了,但实际上这样的标记过的数据非常稀少,而没有逐帧标记的数据很多,CTC可以做到用未逐帧标记的数据做训练。

首先定义几个符号:

表示所有音素的集合

表示一条由L中元素组成的长度为T的路径,比如z′就是一条路径,以下为几个路径的例子:

这6条路径中,

π1可以被认为是“今夜无人入睡”, π2可以被认为是在说“你好”,π3可以被认为是在说“好你”,π4,π5,π6都可以认为是在说“你好”。

定义B变换,表示简单的压缩,例如:

B(a,a,a,b,b,b,c,c,d)=(a,b,c,d)

以上6条路径为例:

B(π1)=(j,i,n,y,e,w,u,r,e,n,r,u,s,h,u,i)

B(π2)=(n,i,h,a,)

B(π3)=(h,a,o,n,i)

B(π4)=(n,i,h,a,o)

B(π5)=(n,i,h,a,o)

B(π6)=(n,i,h,a,o)

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

因此在没有对齐的情况下,目标函数应该为{π|B(π)=z}中所有元素概率之和。 即:

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

驿徽IT攻城师回答于

CTC的训练过程是通过

调整w的值使得4中的目标值最大,而计算的过程如下:

因此,只要得到

,即可根据反向传播,得到

。下面以“你好”为例,介绍该值的计算方法。

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

在每一个点上,路径只能向右或者向下转移,画出两条路径,分别用q和r表示,这两条路径都经过

这点,表示这两点路径均在第14帧的时候在发“h”音。因为在目标函数4的连加项中,有的项与

无关,因此可以剔除这一部分,只留下与

有关的部分,记为

这里的q和r就是与

相关的两条路径。用

分别表示q在

之前和之后的部分,同样的,用

分别表示r在

之前和之后的部分.。可以发现,

同样也是两条可行的路径。

这四条路径的概率之和为:

可以发现,该值可以总结为:

。由此,对于所有的经过

的路径,有:

该值可以理解为从初始到y14h这一段里,所有正向路径的概率之和。并且发现,α14(h)可以由α13(h)和α13(i)递推得到,即:

该递推公式的含义是,只是在t=13时发音是“h”或“i”,在t=14时才有可能发音是“h”。那么在t=14时刻发音是“h”的所有正向路径概率α14(h)就等于在t=13时刻,发音为“h”的正向概率α13(h)加上发音为“i”的正向概率α13(i),再乘以当前音素被判断为“h”的概率y14h。由此可知,每个αt(s)都可以由αt−1(s)和αt−1(s−1)两个值得到。α的递推流程如下图所示:

即每个值都由上一个时刻的一个或者两个值得到,总计算量大约为2.T.音素个数。类似的,定义

, 递推公式为:

因此有:

然后:

得到此值后,就可以根据反向传播算法进行训练了。

可以看到,这里总的计算量非常小,计算α和β的计算量均大约为(2.T.音素个数),(加法乘法各一次),得到α和β之后,在计算对每个

的偏导值的计算量为(3.T.音素个数),因此总计算量大约为(7.T.音素个数),这是非常小的,便于计算。

jyayfpvrHELLBOY回答于

到底RNN+CTC是如何不用事先对齐数据来训练序列数据的?

首先,CTC是一种损失函数,它用来衡量输入的序列数据经过神经网络之后,和真实的输出相差有多少。

比如输入一个200帧的音频数据,真实的输出是长度为5的结果。 经过神经网络处理之后,出来的还是序列长度是200的数据。比如有两个人都说了一句nihao这句话,他们的真实输出结果都是nihao这5个有序的音素,但是因为每个人的发音特点不一样,比如,有的人说的快有的人说的慢,原始的音频数据在经过神经网络计算之后,第一个人得到的结果可能是:nnnniiiiii...hhhhhaaaaaooo(长度是200),第二个人说的话得到的结果可能是:niiiiii...hhhhhaaaaaooo(长度是200)。这两种结果都是属于正确的计算结果,可以想象,长度为200的数据,最后可以对应上nihao这个发音顺序的结果是非常多的。CTC就是用在这种序列有多种可能性的情况下,计算和最后真实序列值的损失值的方法。

详细描述如下:

训练集合为S={(x1,z1),(x2,z2),...(xN,zN)}, 表示有N个训练样本,x是输入样本,z是对应的真实输出的label。一个样本的输入是一个序列,输出的label也是一个序列,输入的序列长度大于输出的序列长度。

对于其中一个样本(x,z),x=(x1,x2,x3,...,xT)表示一个长度为T帧的数据,每一帧的数据是一个维度为m的向量,即每个xi∈Rm。 xi可以理解为对于一段语音,每25ms作为一帧,其中第i帧的数据经过MFCC计算后得到的结果。

z=(z1,z2,z3,...zU)表示这段样本语音对应的正确的音素。比如,一段发音“你好”的声音,经过MFCC计算后,得到特征x, 它的文本信息是“你好”,对应的音素信息是z=[n,i,h,a,o](这里暂且将每个拼音的字母当做一个音素)。

特征x在经过RNN的计算之后,在经过一个softmax层,得到音素的后验概率y。

表示在t时刻,发音为音素k的概率,其中音素的种类个数一共n个, k表示第k个音素,在一帧的数据上所有的音素概率加起来为1。即:

这个过程可以看做是对输入的特征数据x做了变换

,其中Nw表示RNN的变换,w表示RNN中的参数集合。

过程入下图所示:

以一段“你好”的语音为例,经过MFCC特征提取后产生了30帧,每帧含有12个特征,即

(这里以14个音素为例,实际上音素有200个左右),矩阵里的每一列之和为1。后面的基于CTC-loss的训练就是基于后验概率y计算得到的。

青蛙克星哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈回答于

目前,深度学习的算法已经大规模应用于腾讯云的语音识别产品中。腾讯云拥有业内最先进的语音识别技术,基于海量的语音数据,积累了数十万小时的标注语音数据,采用LSTM,CNN,LFMMI,CTC等多种建模技术,结合超大规模语料的语言模型,对标准普通话的识别效果超过了97%的准确率。腾讯云的语音技术,应用涵盖范围广泛,具备出色的语音识别、语音合成、关键词检索、静音检测、语速检测、情绪识别等能力。并且针对游戏,娱乐,政务等几十个垂直做特殊定制的语音识别方案,让语音识别的效果更精准,更高效,全面满足电话客服质检、语音听写、实时语音识别和直播字幕等多种场景的应用。

微信资讯小编回答于

CTC算法概念

CTC算法全称叫:Connectionist temporal classification。从字面上理解它是用来解决时序类数据的分类问题。

传统的语音识别的声学模型训练,对于每一帧的数据,需要知道对应的label才能进行有效的训练,在训练数据之前需要做语音对齐的预处理。而语音对齐的过程本身就需要进行反复多次的迭代,来确保对齐更准确,这本身就是一个比较耗时的工作。

RNN+CTC模型的训练

CTC是一种损失函数,它用来衡量输入的序列数据经过神经网络之后,和真实的输出相差有多少。

训练实施方法

CTC的训练过程是通过∂p(z|x)/∂w调整w的值使得4中的目标值最大。

海边一粒沙知选回答于

目前主流的语音识别都大致分为特征提取,声学模型,语音模型几个部分。目前结合神经网络的端到端的声学模型训练方法主要CTC和基于Attention两种。

可能回答问题的人

  • Y. Ji

    5 粉丝0 提问1 回答
  • Superbeet

    4 粉丝0 提问0 回答
  • daiye

    1 粉丝0 提问0 回答
  • DJ213

    0 粉丝0 提问0 回答
  • 罗罗可爱多

    腾讯 · 高级研究员 (已认证)

    7 粉丝0 提问4 回答
  • 晏栋栋栋

    1 粉丝0 提问1 回答

扫码关注云+社区

领取腾讯云代金券