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格式

內容如下:

<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內部都是使用的數字表示 ,所以需要參照這兩個符號表 。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章