在基于GMM-HMM的传统语音识别里,比音素(phone)更小的单位是状态(state)。一般每个音素由三个状态组成,特殊的是静音(SIL)由五个状态组成。这里所说的状态就是指HMM里的隐藏的状态,而每帧数据就是指HMM里的观测值。每个状态可以用一个GMM模型表示(这个GMM模型的参数是通过训练得到的)。在识别时把每帧数据对应的特征值放进每个状态的GMM里算概率,概率最大的那个就是这帧对应的状态。再从状态得到音素(HMM负责),从音素得到词(字典模型负责),从词得到句子(语言模型负责),最终完成识别。可以从一个状态转到另一个状态,即状态之间存在转移(transition)。Transition是kaldi里一个非常重要的概念,相关的有transition-state、transition-index、transition-id等,初一看云里雾里不太好理解,其实它们都是根据topo图(/s5/data/lang/topo)得到的。今天就基于yesno的例子对它们做一个讲解。

先看yesno中的topo图(见下图),它有三个音素:SIL、yes、no (yes和no均作为一个音素处理),id 分别为1、2、3. SIL有5个状态,id为0—4 ,5为结束态。yes/no分别有三个状态,id为0—2 ,3为结束态。

SIL中状态0—3 分别有4条状态转移路径(或者叫转移弧),以状态0为例,可以自环(self-loop)到0,也可以转移到1或者2或者3. 状态4有2条状态转移路径,可以自环(self-loop)到4,也可以转移到结束态5. Yes/no中状态0—1均有2条状态转移路径。所以这个topo图中共有30条(4*4+2(SIL)+ 3*2(yes)+3*2(no)= 30)状态转移路径。

再来看transition中相关的几个概念:

Phone:音素,前文已提过,id是从1开始的整数。在yesno中共三个音素(SIL、yes、no),id分别为1、2、3。

HMM-state:HMM里隐藏的状态。每个音素的HMM-state都是从0开始的整数。在yesno中SIL的HMM-state分别为0、1、2、3、4,yes/no的HMM-state分别为0、1、2。

pdf-id:每个state相对应的GMM概率密度函数(pdf: probability density function)的id,这个值是全局唯一从0开始的整数。pdf-id分为forward-pdf-id和self-loop-pdf-id两种,值一样,即pdf-id = forward-pdf-id = self-loop-pdf-id。在yesno中SIL有5个状态,pdf-id分别为0、1、2、3、4、5,yes有3个状态,pdf-id分别为5、6、7,no有3个状态,pdf-id分别为8、9、10。

transition-state:表示一个转移状态,用(phone,HMM-state,forward-pdf-id , self-loop-pdf-id)表示。这个概念相对抽象些。

transition-index:表示一个状态的转移路径的index,在每个状态内从0开始的整数。在yesno中SIL的状态0有4个转移路径,其transition-index分别为0、1、2、3。其他状态类似。

transition-id: 所有状态转移路径的id,全局唯一从1开始的整数,跟(transition-state, transition-index)一一对应。在yesno中SIL的状态0有4个转移路径,其transition-id分别为1、2、3、4,SIL的状态1有4个转移路径,其transition-id分别为5、6、7、8,SIL的状态2有4个转移路径,其transition-id分别为9、10、11、12,SIL的状态3有4个转移路径,其transition-id分别为13、14、15、16,SIL的状态4有2个转移路径,其transition-id分别为17、18;yes的状态0有2个转移路径,其transition-id分别为19、20,yes的状态1有2个转移路径,其transition-id分别为21、22,yes的状态2有2个转移路径,其transition-id分别为23、24;no的状态0有2个转移路径,其transition-id分别为25、26,no的状态1有2个转移路径,其transition-id分别为27、28,no的状20有2个转移路径,其transition-id分别为29、30,所以yesno中transition-id范围是1—30.

下表列出了yesno中这些变量的具体值,它们会被存起来,有一一对应的关系,知道一个值后就可以知道相对应的其他值。比如常用的通过transition-id得到pdf-id。

以上通过对例子yesno的讲解就可以很好的理解跟transition相关的概念了。

以kaldi中的yesno为例谈谈transition的更多相关文章

  1. [转] kaldi中FST的可视化-以yesno为例

    http://blog.csdn.net/u013677156/article/details/77893661 1.kaldi解码过程 kaldi识别解码一段语音的过程是:首先提取特征,然后过声学模 ...

  2. [WPF自定义控件库]以Button为例谈谈如何模仿Aero2主题

    1. 为什么选择Aero2 除了以外观为卖点的控件库,WPF的控件库都默认使用"素颜"的外观,然后再提供一些主题包.这样做的最大好处是可以和原生控件或其它控件库兼容,而且对于大部分 ...

  3. kaldi中CD-DNN-HMM网络参数更新公式手写推导

    在基于DNN-HMM的语音识别中,DNN的作用跟GMM是一样的,即它是取代GMM的,具体作用是算特征值对每个三音素状态的概率,算出来哪个最大这个特征值就对应哪个状态.只不过以前是用GMM算的,现在用D ...

  4. 最简单的可取消多选效果(以从水果篮中挑选水果为例)【jsDEMO】

    [功能说明] 最简单的可取消多选效果(以从水果篮中挑选水果为例) [html代码说明] <div class="box" id="box"> < ...

  5. OC中两种单例实现方式

    OC中两种单例实现方式 写在前面 前两天探索了一下C++ 的单例,领悟深刻了许多.今天来看看OC中的单例又是怎么回事.查看相关资料,发现在OC中一般有两种实现单例的方式,一种方式是跟C++ 中类似的常 ...

  6. sharepoint中的YesNo字段

    sharepoint中的YesNo字段实际上是一个Boolean字段,性格有点特别,如果IsShow是一个YesNo字段,使用caml查询的时候值为”1“(Yes)”0“(No),Item[IsSho ...

  7. [转]决策树在Kaldi中如何使用

    转自:http://blog.csdn.net/chenhoujiangsir/article/details/51613144 说明:本文是kaldi主页相关内容的翻译(http://kaldi-a ...

  8. UML和模式应用4:初始阶段(6)--迭代方法中如何使用用例

    1.前言 用例是UP和其他众多迭代方法的核心.UP提倡用例驱动开发. 2. 迭代方法中如何使用用例 功能需求首先定义在用例中 用例是迭代计划的重要部分,迭代是通过选择一些用例场景或整个用例来定义的 用 ...

  9. SQL SEVER 2008中的演示样例数据库

    SQL SEVER 2008数据库是什么我就不说了,我在这里分享一下怎样学习SQL SEVER 2008数据库,假设是对数据库或是SQL SEVER 数据库全然陌生或是不熟悉的人来说,建议看看一些视频 ...

随机推荐

  1. [AI开发]目标跟踪之计数

    基于视频结构化的应用中,目标在经过跟踪算法后,会得到一个唯一标识和它对应的运动轨迹,利用这两个数据我们可以做一些后续工作:测速(交通类应用场景).计数(交通类应用场景.安防类应用场景)以及行为检测(交 ...

  2. Python 的8个关键要素

    1.数据类型 2.对象引用 3.组合数据类型 4.逻辑操作符 5.控制流语句 6.算术操作符 7.输入/输出 8.函数的创建与调用

  3. 第八章 Fisco Bcos 国密版本的部署、控制台搭建、合约的部署、sdk 调用

    鉴于笔者以前各大博客教程都有很多人提问,早期建立一个技术交流群,里面技术体系可能比较杂,想了解相关区块链开发,技术提问,请加QQ群:538327407 参考资料 证书说明:https://mp.wei ...

  4. 走近Java之幕后的String

    前几天,有个同事问了我一个表面看起来显而易见的问题,是关于String的,我们一起来看一下(如果有说的不正确的地方,欢迎大家指正). java中,字面量在编译期计算,并且String字面量作为常量,存 ...

  5. NOI 2011 兔农 题解

    事先声明,本博客代码主要模仿accepoc,且仅针对一般如本博主一样的蒟蒻. 这道题不得不说数据良心,给了75分的水分,但剩下25分真心很难得到,因此我们就来讲一讲这剩下的25分. 首先,有数据可知他 ...

  6. 哈夫曼编码与解码的C++实现:建立哈夫曼树、进行哈夫曼编码与解码

    最近完成了数据结构课程设计,被分到的题目是<哈夫曼编码和解码>,现在在这篇博文里分享一下自己的成果. 我在设计时,在网上参考了很多老师和前辈的算法和代码,向他们表示感谢!他们的成果给了我很 ...

  7. c++小游戏:洛谷彩票

    #include <cstdlib> #include <iostream> #include <cstdio> #include <cmath> #i ...

  8. 洛谷P2001 硬币的面值 题解

    题目链接:https://www.luogu.org/problemnew/show/P2001 这题的数据范围吓得我很慌. 分析: 这道题蒟蒻本来想用背包的,但是发现m太大,一写肯定炸,然后看到数据 ...

  9. 个人永久性免费-Excel催化剂功能第93波-地图数据挖宝之两点距离的路径规划

    在日常手机端,网页端的向地图发出两点距离的行程规划,相信绝大多数人都有用到过,但毕竟是个体单一行为,若某些时候需要用到批量性的操作,就显得很不现实了,同时,数据只是在应用或网页内,非结构化的数据,也是 ...

  10. CUDA编程学习笔记2

    第二章 cuda代码写在.cu/.cuh里面 cuda 7.0 / 9.0开始,NVCC就支持c++11 / 14里面绝大部分的语言特性了. Dim3 __host__ __device__ dim3 ...