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

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

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

仁传联仁传联提问于
驿徽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.音素个数),这是非常小的,便于计算。

回答过的其他问题

高考在即,刷脸进考场真得靠谱吗?

驿徽IT攻城师

其实所有东西都是只防君子不防小人。

人脸识别作为辅助技术出现在高考考场是非常牛叉的一件事

如果匹配ChildID,则需要帮助从ParentID检索数据(读取txt文件并在控制台中对其进行排序)

驿徽IT攻城师
已采纳
信息类现在还包含子项列表: class Information { public string Id { get; set; } public string Name { get; set; } public string ParentId { get;...... 展开详请

C#:为什么在通用上下文中无法将继承的接口转换为其基接口?

驿徽IT攻城师
这是因为AbstractClass是一个不变的类型。 此链接可能有助于您了解无法完成此操作的原因:https: //www.infoworld.com/article/3082587/how-to-work-with-covariance-and-contravarian...... 展开详请

Redshift卸载JSON

flot饼图工具提示百分比

驿徽IT攻城师
您需要jquery.flot.tooltip.min.js根据以下工作示例包含和更改少量设置,以显示带有值的工具提示。 datapie = [ {label: "Running", data: 19.5, color: '#e1ab0b'}, {la...... 展开详请

如何使用Ruby中的数组方法使用牛津逗号将字符串数组转换为列表

驿徽IT攻城师
编辑最大评论: 你可以这样做: def oxford_comma(array) array = [*array] case array.size when 0 '' when 1 array[0].to_s when 2 array....... 展开详请

扫码关注云+社区

领取腾讯云代金券