HMM、CTC、RNN-T训练是所有alignment的寻找方法
1.1 LAS产生label的计算
LAS是可以看做能够直接计算给定一段acoustic feature时输出token sequences的概率,即\(p(Y|X)\),LAS每次给定一个acoustic feature就会产生一个token 的概率,将所有的概率乘起来就是token sequences的概率。其实在训练的时候,并不是在每一步都找概率最大的,这样会陷入局部最优,一般会用到beam search来寻找一个最优的概率。在图中,\(\hat{Y}\)表示的是正确的token sequence ,训练的目标就是要找到一个\(\theta\),使得给定一段acoustic features时,输出\(\hat{Y}\)的概率最大。在测试的时候,就是根据训练找到的$$在给定acoustic features时,找出概率最大的token sequence,就是语音识别的结果。
1.2 CTC和RNN-T的计算
CTC和RNN-T都需要alignment,所以不能像LAS那样直接计算。
。其概率是穷举所有的alignment,将所有的alignment的概率加起来,就是token sequence的概率。所以会碰见的几个问题如下图:
- 怎么计算所有可能的alignment
- 怎么将所有可能的alignment加起来
- 怎么训练\(\theta\)
1.2.1 所有的alignment
HMM中是对token进行重复,CTC是引入了\(\phi\),可以插在任何地方,但是其个数和token重复个数的和要等于acoustic features的个数,RNN-T也引入了\(\phi\),但是其是作为一个acoustic feature结束,下一个acoustic features开始的间隔,因此,\(\phi\)的个数就等于acoustic features的个数。
HMM
一个token可以重复\(t_{i}\)次,但是所有token重复次数的和要等于acoustic features的长度T,即图中灰色部分所描述的公式。表中横轴代表acoustic features,纵轴代表token。从左上角开始一直走到右下角,中间每一步只能有两个方向:向右走或者是向右下走。但是终点一定要是右下角才算是合法的路径。从起点开始一直走到终点的所有合法路径就是所有可能的alignment。下图就是一个非法路径

CTC
CTC在最后合并token的规则是:(1)首先合并重复项(2)去掉token.例如:a a \(\phi\) \(\phi\) r \(\phi\) r\(\phi\) s s s \(\phi\)s,经过第一步的结果是:a\(\phi\)r\(\phi\)r\(\phi\)s\(\phi\) s,经过第二步的结果是a r r s s 。下面的合法路径的选择都是基于这个规则下。

CTC中的\(\phi\)可以插在任何地方,开头,token之间或者结尾。但是\(\phi\)的个数加上token的个数要等于acoustic features的个数。其中\(\phi\)的个数可以为0,但是每一个token的个数不能为0。




CTC和HMM不同,在CTC进行的过程中,纵轴是在开头,结尾和每一个token之间都插入一个\(\phi\),其合法路径的规则有3个要求
(1)其初始的起点可以有两个,即\(x^1\)处的状态可以使\(\phi\)或者是第一个token,这里是C;
(2)其最后的终点也有两个状态,即\(x^6\)处的状态可以是\(\phi\)或者是最后一个token,这里是t
(3)当中间状态是token时,且下一个token与之不重复时,其下一步的状态可以有3个,向右走--下一步还是当前的token,向右下方走--下一步就是\(\phi\),跨越\(\phi\)向右下方走(走马步)--下一步就是下一个token,【见图3】
(4) 当中间状态为\(\phi\)时,下一步只能有2种情况,向右走或者向右下方走。【见图2、图3】
(5) 当中间状态是token时,且下一个token与之重复时,其下一步的状态只能是2个,向右走--下一步还是当前的token,向右下方走--下一步就是\(\phi\)【见图4】,如果走马步,就会在合并的时候丢失掉一个token,所以不能跨越\(\phi\)。
下图举例列出了两条合法路径:

- RNN-T
在RNN-T的过程中,最后一个token后至少有一个\(\phi\),因为他是作为一个acoustic feature和另一个acoustic feature的间隔,当一个单词说完,它肯定要出现\(\phi\),不然下一段acoustic features没办法进来。而在token之间则可以有也可以没有。
向右走表示,插入\(\phi\),可以理解为当前的acoustic feature没有任何东西,什么都没有输出的,我先插入一个\(\phi\),你再给我下一个acoustic feature。向下走就表示输出一个token,理解为当前的acoustic feature输出一个token。由于最后一个必须是\(\phi\),所以终点在右下角还右边一格。
RNN-T一个acoustic feature可以识别出很多token(参见上面的RNN-T的介绍),所以可能第一个acoustic features就把想要的东西全部都输出了,后面全部插入\(\phi\)即可。下图显示了一条非法路径
1.2.2 HMM、CTC、RNN-T的路径方式比较

HMM的合法路径只能是复制自己和到达下一个token,CTC的合法路径是复制自己或者到\(\phi\)或者到下一个token,RNN-T的合法路径是到达下一个token或者插入\(\phi\)。
HMM、CTC、RNN-T训练是所有alignment的寻找方法的更多相关文章
- Alignment trap 解决方法 【转 结合上一篇
前几天交叉编译crtmpserver到arm9下.编译通过,但是运行的时候,总是提示Alignment trap,但是并不影响程序的运行.这依然很令人不爽,因为不知道是什么原因引起的,这就像一颗定时炸 ...
- lecture6-mini批量梯度训练及三个加速的方法
Hinton的第6课,这一课中最后的那个rmsprop,关于它的资料,相对较少,差不多除了Hinton提出,没论文的样子,各位大大可以在这上面研究研究啊. 一.mini-批量梯度下降概述 这部分将介绍 ...
- 使用Deeplearning4j进行GPU训练时,出错的解决方法
一.问题 使用deeplearning4j进行GPU训练时,可能会出现java.lang.UnsatisfiedLinkError: no jnicudnn in java.library.path错 ...
- 『cs231n』作业3问题1选讲_通过代码理解RNN&图像标注训练
一份不错的作业3资料(含答案) RNN神经元理解 单个RNN神经元行为 括号中表示的是维度 向前传播 def rnn_step_forward(x, prev_h, Wx, Wh, b): " ...
- 语音识别中的CTC算法的基本原理解释
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文作者:罗冬日 目前主流的语音识别都大致分为特征提取,声学模型,语音模型几个部分.目前结合神经网络的端到端的声学模型训练方法主要CTC和基 ...
- 语音识别(LSTM+CTC)
完整版请微信关注“大数据技术宅” 序言:语音识别作为人工智能领域重要研究方向,近几年发展迅猛,其中RNN的贡献尤为突出.RNN设计的目的就是让神经网络可以处理序列化的数据.本文笔者将陪同小伙伴们一块儿 ...
- Recurrent Neural Networks(RNN) 循环神经网络初探
1. 针对机器学习/深度神经网络“记忆能力”的讨论 0x1:数据规律的本质是能代表此类数据的通用模式 - 数据挖掘的本质是在进行模式提取 数据的本质是存储信息的介质,而模式(pattern)是信息的一 ...
- Kaldi的BaseLine训练过程
steps/train_mono.sh --nj "$train_nj" --cmd "$train_cmd" data/train data/lang exp ...
- 语音笔记:CTC
CTC全称,Connectionist temporal classification,可以理解为基于神经网络的时序类分类.语音识别中声学模型的训练属于监督学习,需要知道每一帧对应的label才能进行 ...
随机推荐
- 渗透测试全流程靶机vulnhubDC-1完成笔记
镜像下载地址 https://www.vulnhub.com/entry/dc-1-1,292/ 信息收集 1.可以使用netdiscover -i eth0 发现二层网络信息 发现两个设备(103是 ...
- Spring Boot 学习摘要--关于配置
date: 2019-12-27 09:00:00 updated: 2019-12-30 13:20:00 Spring Boot 学习摘要--关于配置 学习教程来自:B站 尚硅谷 1. 关于配置 ...
- OpenCV计算机视觉学习(9)——图像直方图 & 直方图均衡化
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 1, ...
- 由Menu小项目所引发的对软件工程的思考
学习了孟老师的这几节课程,我学习了如何搭建一个简单的命令行menu小程序,从最简单的程序开始,一步步的根据软件工程的一般规律,进行逐步开发.完善,最终实现了一个比较通用的menu程序,可以让别的开发者 ...
- mac os 10.15安装jdk 1.6
1.如果出现报错 已经安装了最高版本 下载请看:https://www.jianshu.com/p/3b580c405c7c 请看下面方法处理错误 1.在mac的访达中 找到 "脚本编辑器& ...
- 利用 Docker 构建一个简单的 java 开发编译环境
目前 Java 语言的版本很多,除了常用的 Java 8,有一些遗留项目可能使用了 Java 7,也可能有一些比较新的的项目使用了 Java 10 以上的版本.如果想切换自己本地的 Java 开发环境 ...
- 什么是麒麟(kylin)?查数据贼快的哟
前言 微信搜[Java3y]关注这个有梦想的男人,点赞关注是对我最大的支持! 文本已收录至我的GitHub:https://github.com/ZhongFuCheng3y/3y,有300多篇原创文 ...
- 懂了!国际算法体系对称算法DES原理
概念 加密领域主要有国际算法和国密算法两种体系.国密算法是国家密码局认定的国产密码算法.国际算法是由美国安全局发布的算法.由于国密算法安全性高等一系列原因.国内的银行和支付机构都推荐使用国密算法. 从 ...
- 3 jinja2模板
video17 jinja2过滤器 过滤器通过管道符号进行使用.如{{ name | length }}将返回name的长度,过滤器相当于是一个函数. 1 def hello_world(): 2 i ...
- 微服务通信之feign的配置隔离
前言 由上文我们知道针对某一个Feign接口,我们可以给他设置特定的配置类.那如果现在有一个服务,我们只想对A服务配置一个拦截器拦截请求而不影响其他服务,那应该怎么做呢? 一.feign接口配置 由前 ...