语音识别再研究

研究方法:

主流采用RNN+CTC结构

关于RNN结构不再赘述

采用CTC思想的原因:

Connectionist Temporal Classification (CTC)适合不知道输入输出是否对齐的情况使用的算法,所以CTC适合语音识别和手写字符识别的任务。

CTC思想的原理:

为了在时间序列上构造一个合法的可以梯度下降的序列,将在每一个时间分区预测一个token,这个token可能是字母也可能是空格符E。空格符之间的重复字母需要删去,空格最终删去。

产生一个单词的token序列是不唯一的,但是都可以化简为唯一的token序列,下图是所有可能得序列。

在这里插入图片描述

(来自@Michaelliu_dev的图)

先说图,图中有的点状态转移出三个状态,有的点状态转移出两个状态,这是由于不同类型的点状态转移的规则不同,规则如下:

 这是一个必须遵守的状态转移规则,否则会生成化简之后和真实序列不同的带E的序列。

如何使得模型最后能够尽可能输出正确状态序列,就需要让这些序列的概率加和最大,是贝叶斯估计,即在X情况得到Y的概率,使其尽可能像结果靠近。

需要梯度下降就需要得出一个可导的概率结果函数,如下式:

\mathrm{p}(\mathrm{Y} \mid \mathrm{X})=\sum_{\mathrm{A} \in \mathcal{A} \mathrm{X} \mathrm{Y}} \prod_{\mathrm{t}=1}^{\mathrm{T}} \mathrm{p}_{\mathrm{t}}\left(\mathrm{a}_{\mathrm{t}} \mid \mathrm{X}\right)

但是计算量无疑是巨大的,这里借用动态规划的思想(不是动态规划求最优值,仅仅是将最后的状态概率值加和求出来)动态规划计算不再赘述。

本式有一处不严谨,但是也可能是我想错了,但是我也没有找到更好的式子来表达:概率中的乘法对应于相互之间不关联的事件,既然在output前使用了CNN或者是RNN,特别是RNN,就应该会出现前后事件的关联性,这种情况下将预测状态相乘得到序列概率不是很严谨,但是也没想到更好的解决方案,暂且不表,想法可在评论区讨论。

上式目标最大,要梯度下降需要加符号:

\sum_{(X, Y) \in \mathcal{D}}-\log P(Y \mid X)

log原因略。

实验:

详见GitHub - laoniandisko/masr- at master

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值