以kaldi中的yesno为例谈谈transition
在基于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的更多相关文章
- [转] kaldi中FST的可视化-以yesno为例
http://blog.csdn.net/u013677156/article/details/77893661 1.kaldi解码过程 kaldi识别解码一段语音的过程是:首先提取特征,然后过声学模 ...
- [WPF自定义控件库]以Button为例谈谈如何模仿Aero2主题
1. 为什么选择Aero2 除了以外观为卖点的控件库,WPF的控件库都默认使用"素颜"的外观,然后再提供一些主题包.这样做的最大好处是可以和原生控件或其它控件库兼容,而且对于大部分 ...
- kaldi中CD-DNN-HMM网络参数更新公式手写推导
在基于DNN-HMM的语音识别中,DNN的作用跟GMM是一样的,即它是取代GMM的,具体作用是算特征值对每个三音素状态的概率,算出来哪个最大这个特征值就对应哪个状态.只不过以前是用GMM算的,现在用D ...
- 最简单的可取消多选效果(以从水果篮中挑选水果为例)【jsDEMO】
[功能说明] 最简单的可取消多选效果(以从水果篮中挑选水果为例) [html代码说明] <div class="box" id="box"> < ...
- OC中两种单例实现方式
OC中两种单例实现方式 写在前面 前两天探索了一下C++ 的单例,领悟深刻了许多.今天来看看OC中的单例又是怎么回事.查看相关资料,发现在OC中一般有两种实现单例的方式,一种方式是跟C++ 中类似的常 ...
- sharepoint中的YesNo字段
sharepoint中的YesNo字段实际上是一个Boolean字段,性格有点特别,如果IsShow是一个YesNo字段,使用caml查询的时候值为”1“(Yes)”0“(No),Item[IsSho ...
- [转]决策树在Kaldi中如何使用
转自:http://blog.csdn.net/chenhoujiangsir/article/details/51613144 说明:本文是kaldi主页相关内容的翻译(http://kaldi-a ...
- UML和模式应用4:初始阶段(6)--迭代方法中如何使用用例
1.前言 用例是UP和其他众多迭代方法的核心.UP提倡用例驱动开发. 2. 迭代方法中如何使用用例 功能需求首先定义在用例中 用例是迭代计划的重要部分,迭代是通过选择一些用例场景或整个用例来定义的 用 ...
- SQL SEVER 2008中的演示样例数据库
SQL SEVER 2008数据库是什么我就不说了,我在这里分享一下怎样学习SQL SEVER 2008数据库,假设是对数据库或是SQL SEVER 数据库全然陌生或是不熟悉的人来说,建议看看一些视频 ...
随机推荐
- easyui close的最大化的dialog 切换 tab 再次出现
今天发现一个神奇的bug,easyui中的dialog在经历了d.panel('close');之后,当前的tab仍然未关闭,切换了另一tab,然后回去刚才的tab,发现已经close的dialog又 ...
- scrapy 发post请求
可以使用 yield scrapy.FormRequest(url, formdata, callback)方法发送POST请求. 如果希望程序执行一开始就发送POST请求,可以重写Spider类的s ...
- 执行某个文件夹下面的所有.py文件
# 写一个函数,接受一个参数,如果是文件,就执行这个文件,如果是文件夹,就执行这个文件夹下所有的py文件 # 工作应用场景,假设一个文件夹下面有100个py文件,同步一些时间 # 例如抢票软件 10点 ...
- Modbus 指令
本节内容: 一.S7-1200 作为Modbus RTU 主站 二.S7-1200 作为Modbus RTU 从站 三.S7-1200 作为Modbus RTU 主站 S7-1200 作为Modbus ...
- Java学习笔记之---单例模型
Java学习笔记之---单例模型 单例模型分为:饿汉式,懒汉式 (一)要点 1.某个类只能有一个实例 2.必须自行创建实例 3.必须自行向整个系统提供这个实例 (二)实现 1.只提供私有的构造方法 2 ...
- C语言指针专题——为何要学习指针
欢迎转发本文! 之前的文章与各位谈论了指针是什么,以及指针为何这那么难学.不少知友留言说看了我的文章对指针了解了不少,这给我继续创作提供了莫大的动力啊.指针其实就是一个纸老虎,你看着可怕,等你了解其本 ...
- 整型,布尔值,字符串详解,for语句
整型 -- 数字 用于比较和计算 + - * / // python 2 int --- long (长整型) /获取的是整数 Python3 int---整型 / 获取的浮点数 二进制 --- 就是 ...
- 目标检测:keras-yolo3之制作VOC数据集训练指南
制作VOC数据集指南 Github:https://github.com/hyhouyong/keras-yolo3 LabelImg标注工具(windows环境下):https://github.c ...
- MyBatis框架之SQL映射和动态SQL
使用MyBatis实现条件查询 1.SQL映射文件: MyBatis真正的强大之处就在于SQL映射语句,MyBatis专注于SQL,对于开发人员来说也是极大限度的进行SQL调优,以保证性能.下面是SQ ...
- Java EE.Servlet.处理请求
Servlet的核心工作便是处理客户端提交的请求信息,生成动态响应信息返回客户端. 1.请求参数 POST方法一般用于更新服务器上的资源,当时用POST方法时,提交的数据包含在HTTP实体内,而GET ...