OpenFST概览

学习Kaldi首先需要了解OpenFST,之后才能够深入的学习Kaldi,很多概念都是和OpenFSTaging相关的,而且如果要调整模型的准确率和速度也离不开OpenFST。那OpenFST究竟是什么呢?

 

这里有个OpenFST在Kaldi上的介绍:Kaldi: Kaldi tutorial: Overview of the distribution (20 minutes),不过不是很太详细,可以参考OpenFST的网站:FstQuickTour < FST < TWiki

通俗的讲OpenFST就是FST(Finite State Transducer,有限自动机)的一个实现,在Kaldi里面这个文件被用做一个库,放在tools文件夹下。我们以OpenFST官网上的例子介绍一下,了解一个概览。

下面的图表示了一个优先状态机的概览:

symbolicfst.jpg

OpenFST要表达一个图,需要3个文件:

text.fst:构建的图

isyms.txt:输入符号表

osyms.txt:输出符号表

简单看一下三个文件对应于上图的格式应该表示成什么样。

text.fst格式

text.fst存放的是构建的有限自动机的图,基于上面的例子,格式如下:

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

其中除了最后一行,每一行代表一个状态转移,可以从一个状态到另一个状态有多条边,在文件中的顺序没有影响。但是需要遵守几个规则:

1. 初始状态(initial state)为0

2. 文件第一行的状态转移一定是以初始状态开始

3. 最后一行是终止状态(final state),没有下一跳的状态

4. 除最后一行外,其他行为一条弧必须按照格式:,起点(arc source)、终点(arc destination)、输入标签(input label)、输出标签(output label)、权重(weight)。

isyms.txt格式

内容如下:

<eps> 0
a 1
b 2
c 3

osyms.txt格式

内容如下:

<eps> 0
x 1
y 2
z 3

可以使用任意的字符串作为label,也可以用任意非0值对label编码。一般0是为epsilon这个label保留的,epsilon表示一个空串,用来作为站位,比如语音识别有段静音或者声音拉得比较长,这段frame就可以用epsilon。

我们知道text.fst包含了状态机的转换图,已经使用的是符号了,为什么还需要用isyms.txt和osyms.txt这两个文件呢?这是因为FST内部都是使用的数字表示 ,所以需要参照这两个符号表 。

 参考地址:LiveToolkit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值