OpenFST概览

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

这里有个OpenFST在Kaldi上的介绍:http://www.kaldi-asr.org/doc/tutorial_looking.html,不过不是很太详细,可以参考OpenFST的网站:http://www.openfst.org/twiki/bin/view/FST/FstQuickTour

通俗的讲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格式

内容如下:

 0
a 1
b 2
c 3

osyms.txt格式

内容如下:

 0
x 1
y 2
z 3

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

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

 

你可能感兴趣的:(OpenFST,text.fst,isyms.txt,osyms.txt)