语音识别学习记录 [kaldi中的openfst]

4 篇文章 0 订阅
1 篇文章 0 订阅

Kaldi tutorial: Overview of the distribution中介绍了一个使用openfst的例子。先来介绍一下这个例子,再来说明FST(finite-state transducers,有限状态机)如何应用到语音识别中。

首先有三个文件,text.fst、isyms.txt、osyms.txt。

text.fst文件的内容为(请无视前面的行号):

0 1 a x .5
0 1 b y 1.5
1 2 c z 2.5
2 3.5

前三行是FST中的弧(arc),格式为[ 起点(src),终点(dest),输入标签(ilabel),输出标签(olabel) ,权重(weight)];弧在文件中的顺序可以交换,但是初始状态的弧必须在第一行。最后一行为最终状态的编号和最终状态的权值。这个文件描述的是FST的结构,根据这个文件可以得到下图:

从上图可以看出字符串ac到xz的转换的权重为0.5+2.5+3.5=6.5.

关于这个图的说明放一段openFst教程中的原话:The initial state is label 0. There can only be one initial state. The final state is 2 with final weight of 3.5. Any state with non-infinite final weight is a final state. There is an arc (or transition) from state 0 to 1 with input label aoutput label x, and weight 0.5. This FST transduces, for instance, the string ac to xz with weight 6.5 (the sum of the arc and final weights). Note we have assumed the library default Weight type for this description.

isyms.txt文件内容为:

<eps> 0
a 1
b 2
c 3

osyms.txt文件内容为:

<eps> 0
x 1
y 2
z 3

isyms.txt和osyms.txt是输入标签和输出标签对应的符号。因为FST的输入标签和输出标签在内部都是用数字表示的,所以要有这么两个符号表。可以使用任意的非负整数作为符号的ID。那个为0的标签ID是为epsilon标签保存的,epsilon是一个空字符串。上面的例子中并没有用到epsilon这个标签,openFST的教程上面说以后会用到,具体干什么我也还不清楚。

以上内容主要来自openFst官网的FstQuickTour

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值