[转] kaldi中FST的可视化-以yesno为例
http://blog.csdn.net/u013677156/article/details/77893661
1、kaldi解码过程
kaldi识别解码一段语音的过程是:首先提取特征,然后过声学模型AM,然后过解码网络HCLG.fst,最后输出识别结果。
HCLG是解码时的重要组成部分。HCLG.fst是由4个fst经过一系列算法(组合、确定化和最小化等)组合而成的。4个fst分别是H.fst、C.fst、L.fst和G.fst,分别是HMM模型、上下文环境、词典和语言模型对应的fst。 trans-id -> context-tri -> mono ->word->grammar
HCLG = asl(min(rds(det(H' o min(det(C o min(det(Lo G))))))))
上面的o表示组合,det表示确定化,min表示最小化,rds表示去除消岐符号,asl表示增加自环。
Kaldi中,单独的C.fst是不存在的。L和G合并生成LG.fst,然后在其基础上,根据决策树的结果,直接生成CLG.fst。
2、fst可视化的两个基本命令
fstprint和fstdraw是可视化用到的两个基本命令
fstprint用于打印fst,可以将二进制的fst以文件形式打印出来。Fstprint的基本用法如下
fstprint [--isymbols=xxxx --osymbols=xxxx ] FST
参数—isymbols和—osymbols分别表示输入符号表和输出符号表,这两个参数可以省略。
fstdraw用于画fst图,其使用方式跟fstprint类似。Fstdraw得到的结果是dot文件,通过dot命令转为ps格式,然后可以由ps2pdf命令转为pdf文档。
fstdraw使用示例
fstdraw [--isymbols=phones.txt --osymbols=words.txt] L.fst | dot –Tps | ps2pdf – L.pdf
3、yesno例子中各个fst的可视化
3.1 语言模型生成的G.fst可视化
yesno例子中的语言模型很简单
- cat input/task.arpabo
- \data\
- ngram 1=4
- \1-grams:
- -1 NO
- -1 YES
- -99 <s>
- -1 </s>
- \end\
这个语言模型生成的G.fst,将其用fstprint打印出来(symbols选words.txt)
- 0 0 NO NO 2.30258512
- 0 0 YES YES 2.30258512
- 0 2.30258512
上面是G.fst的打印结果。对于fst,其打印结果,一行一般有5列。一行对应一个弧。第一列和第二列,表示这个弧的起始状态和终止状态。第三列和第四列,表示输入和输出。第五列是权重。
将其对应的图打印出来,用fstdraw命令
3.2 词典文件生成的L.fst
yesno例子中的词典文件也很简单,如下所示
- cat data/local/dict/lexicon.txt
- <SIL> SIL
- YES Y
- NO N
在data/lang目录下会找到两个fst,分别是 L.fst和L_disambig.fst。后者是在L.fst上加消岐符号。
用fstprint查看这两个fst
- fstprint --isymbols=phones.txt --osymbols=words.txt L.fst
- 0 1 <eps> <eps> 0.693147182
- 0 1 SIL <eps> 0.693147182
- 1 1 SIL <SIL>
- 1 1 N NO 0.693147182
- 1 2 N NO 0.693147182
- 1 1 Y YES 0.693147182
- 1 2 Y YES 0.693147182
- 1
- 2 1 SIL <eps>
- fstprint --isymbols=phones.txt --osymbols=words.txt L_disambig.fst
- 0 1 <eps> <eps> 0.693147182
- 0 2 SIL <eps> 0.693147182
- 1 1 SIL <SIL>
- 1 1 N NO 0.693147182
- 1 3 N NO 0.693147182
- 1 1 Y YES 0.693147182
- 1 3 Y YES 0.693147182
- 1 1 #0 #0
- 1
- 2 1 #1 <eps>
- 3 2 SIL <eps>
用fstdraw看两个fst图,第一个图是 L.fst;第二个是 L_disambig.fst。实际生成HCLG时,用的是L_disambig.fst。
3.3 将L.fst(这里指L_disambig.fst)和G.fst合并起来,生成LG.fst。
- 1 0 SIL <eps> 0.829214692
- 1 1 Y YES 2.99609375
- 1 1 N NO 2.99609375
- 1 2.99609375
- 0 2 #1 <eps> 0.533971608
- 2 1 Y YES 1.63290751
- 2 1 N NO 1.63290751
- 2 1.63290739
3.4将LG.fst生成CLG.fst,得到的结果如下;因为是单音素,所以跟原先的LG.fst是一样的。
- 0 1 SIL <eps> 0.829214692
- 0 0 Y YES 2.99609375
- 0 0 N NO 2.99609375
- 0 2.99609375
- 1 2 #0 <eps> 0.533971608
- 2 0 Y YES 1.63290751
- 2 0 N NO 1.63290751
- 2 1.63290739
3.5 hmm模型生成的ha.fst。这里的hmm对应的fst,是不带自环的。
- 0 1 0 1
- 0 7 20 2 1.1920929e-07
- 0 10 26 3
- 0 13 31 4
- 0
- 1 2 2 0 2.70571232
- 1 3 3 0 2.70571232
- 1 4 4 0 0.14340198
- 2 3 6 0 0.936247587
- 2 4 7 0 1.19049001
- 2 5 8 0 1.19049001
- 3 2 9 0 1.80542946
- 3 4 11 0 0.398507833
- 3 5 12 0 1.80542946
- 4 2 13 0 2.34313083
- 4 3 14 0 2.34313083
- 4 5 16 0 0.213165522
- 5 6 18 0
- 6 0 0 0
- 7 8 22 0
- 8 9 24 0 -2.38418579e-07
- 9 0 0 0
- 10 11 28 0
- 11 12 30 0 4.76837158e-07
- 12 0 0 0
- 13 0 0 0
这个fst的第三列,输入,是transition-id;输出是音素。其对应的图如下
上面图中,圆圈表示的就是状态,里面的数字是状态的id。弧上面,冒号前面的数字时transition-id,冒号后面的数字是输出的音素;斜杠后面的数字是权重。
其中0-7-8-9-0这条“路径”,表示的就是音素Y; 0-10-11-12-0表示的就是音素N。
按照同样的方法,可以打印和画出 HCLGa.fst 和 HCLG.fst的内容。
其他有用的fst相关的命令: fstinfo fstcopy
[转] kaldi中FST的可视化-以yesno为例的更多相关文章
- [转]决策树在Kaldi中如何使用
转自:http://blog.csdn.net/chenhoujiangsir/article/details/51613144 说明:本文是kaldi主页相关内容的翻译(http://kaldi-a ...
- kaldi中CD-DNN-HMM网络参数更新公式手写推导
在基于DNN-HMM的语音识别中,DNN的作用跟GMM是一样的,即它是取代GMM的,具体作用是算特征值对每个三音素状态的概率,算出来哪个最大这个特征值就对应哪个状态.只不过以前是用GMM算的,现在用D ...
- Docker入门(四)——MySQL镜像中的数据库可视化
在详细介绍这篇文章的内容前,需要说明下笔者写这篇文章的意图:笔者在现有的开发中,前后端联调的方式为Docker镜像对接,数据库使用MySQL镜像,开发环境为远程服务器,因此,笔者迫切需要一种能将远 ...
- Python 数据分析中常用的可视化工具
Python 数据分析中常用的可视化工具 1 Matplotlib 用于创建出版质量图表的绘图工具库,目的是为 Python 构建一个 Matlab 式的绘图接口. 1.1 安装 Anaconada ...
- 关于 underscore 中模板引擎的应用演示样例
//关于 underscore 中模板引擎的应用演示样例 <!doctype html> <html> <head> <meta charset=" ...
- OpenJDK源码研究笔记(十三):Javac编译过程中的上下文容器(Context)、单例(Singleton)和延迟创建(LazyCreation)3种模式
在阅读Javac源码的过程中,发现一个上下文对象Context. 这个对象用来确保一次编译过程中的用到的类都只有一个实例,即实现我们经常提到的"单例模式". 今天,特意对这个上下文 ...
- 以kaldi中的yesno为例谈谈transition
在基于GMM-HMM的传统语音识别里,比音素(phone)更小的单位是状态(state).一般每个音素由三个状态组成,特殊的是静音(SIL)由五个状态组成.这里所说的状态就是指HMM里的隐藏的状态,而 ...
- Kaldi中的Chain模型
Chain模型的训练流程 链式模型的训练过程是MMI的无网格的版本,从音素级解码图生成HMM,对其使用前向后向算法,获得分母状态后验,通过类似的方式计算分子状态后验,但限于对应于转录的序列. 对于神经 ...
- 【Unity】13.1 场景视图中的GI可视化
分类:Unity.C#.VS2015 创建日期:2016-05-19 一.简介 在场景视图中设计不同的场景内容时,可以根据需要勾选相关的渲染选项,以便让场景仅显示其中的一部分或者全部渲染效果. 在这些 ...
随机推荐
- python note 15 正则表达式
# 正则表达式 只和字符串打交道 # 正则表达式的规则# 规则 字符串 从字符串中找到符合规则的内容 # 字符组 : [] 写在中括号中的内容,都出现在下面的某一个字符的位置上都是符合规则的 # [0 ...
- sql基本的增删查改语句
1.增---用于向表中插入新的行/数据 语法:insert into 表名(值1,值2,值3...) values(值1,值2,值3,...) 或者 语法:insert [into] <表名&g ...
- 随机获得id的方法
public String generateUUID() { String uuid = UUID.randomUUID().toString(); uuid = uuid.replace(" ...
- vue.js 进行初始化遇到的关于core-js的错误@core-js/modules/es6.array.find-index]
D:\vuejselement\workSpace\zutnlp_platform_show>cnpm install --save core-js/modules/es6.array.find ...
- 九、mybatis模糊查询2种方式
1. 2. 3.
- Mysql运行状态查询命令及调优详解
(转载自点击打开链接) MySQL运行状态及调优(一) 一.查看MySQL运行情况SHOW STATUS; 二.查看INNODB数据库引擎运行状态SHOW ENGINE INNODB STATUS; ...
- AST的作用
·代码版本兼容:例如babel ·代码混淆和压缩:将语义变量变无意义 ·开发工具:webpack.vue-cli ·编译:编译器.IDE
- oracle异机恢复 open resetlogs 报:ORA-00392
参考文档:ALTER DATABASE OPEN RESETLOGS fails with ORA-00392 (Doc ID 1352133.1) 打开一个克隆数据库报以下错误: SQL> a ...
- go的包下载失败解决方案
包被墙的方案 1 翻啊的墙 2 gopm 3 https://github.com/golang/net 4 使用国内网站打包 5 export GOPROXY=https://goproxy.io
- 移动端使用fastclick时,模拟原生浏览器对象
移动浏览器原生click事件有300ms的延时,这是浏览器为了区分到底是双击还是单击事件.(实际上有些移动浏览器不支持双击事件.PC版chrome在手机模式下,当禁止用户双击缩放页面时(即有viewp ...