1. 程式人生 > >Kaldi學習筆記(二)——例項yesno和timit的應用

Kaldi學習筆記(二)——例項yesno和timit的應用

Kaldi的例子有很多,在egs目錄下面,對Kaldi不熟悉的小白們可以先從yesno和timit兩個例子入手,這樣可以對Kaldi有個直觀的認識。

一、執行yesno例項

該例項是一個非常小的資料集,每一條記錄都是一系列yes或者no的語音,標註是由檔名來標註的。先執行一下。

切換到./egs/yesno/s5目錄下,執行sudo./run.sh命令。

經過一段時間的訓練和測試,可以看到執行結果。

這裡寫圖片描述

WER為0.00。看來這個例子識別的還是挺準的。

PS:WER(WordError Rate)是字錯誤率,是一個衡量語音識別系統的準確程度的度量。其計算公式是WER=(I+D+S)/N,其中I代表被插入的單詞個數,D代表被刪除的單詞個數,S代表被替換的單詞個數。也就是說把識別出來的結果中,多認的,少認的,認錯的全都加起來,除以總單詞數。這個數字當然是越低越好。

下面進入./yesno/s5/waves_yesno目錄瞧一瞧。

全部都是.wav格式的音訊檔案。可以開啟一個檔案聽一聽,發現是一個老男人連續不停地說yes或者no,每個檔案說8次。檔名中,0代表那個位置說的是no,1代表說的是yes。這個實驗沒有單獨的標註檔案,直接採用的是檔名來標註的。

二、執行timit例項

Timit是LDC蒐集的一個語料庫,TIMIT語音庫有著準確的音素標註,由630個話者組成,每個人講10句,美式英語的8種主要方言,是一個學習用的好例子。但是由於這個資料庫是商業用的,所以Kaldi裡面並沒有附帶資料。但是資料又可以從網路上找到,連結是我上傳到百度雲上的,可以隨時下載:

1. 在timit/s5資料夾下面新建資料夾data;

2. 把timit.rar解壓後的四個檔案放入data中,包括:DOC, TEST, TRAIN三個資料夾和README.DOC檔案;

3. 修改s5資料夾下的cmd.sh,因為是在虛擬機器上跑的,所以程式碼修改為單機版,其它程式碼都註釋掉,只保留下面4行:

export train_cmd=run.pl
export decode_cmd=run.pl
export cuda_cmd=run.pl
export mkgraph_cmd=run.pl

4. 修改s5資料夾下的run.sh,修改timit=開頭的那行程式碼即可,該行程式碼是告訴程式我們下載好的語料庫的位置在哪裡,例如我修改後的程式碼為:

#timit=/export/corpora5/LDC/LDC9351/timit/TIMIT # @JHU

timit=/root/kaldi-trunk/egs/timit/s5/data

5. cd到s5目錄下,執行./run.sh

6. 執行第五步的時候很有可能會報錯,錯誤資訊與irstlm相關,這是因為這個例程建立語言模型是用irstlm工具建立的,但是在最新版本的kaldi裡面,irstlm不是預設編譯的。所以我們先得自行編譯irstlm。

首先進入kaldi目錄下的tools/extras目錄,執行./install_irstlm.sh指令碼。安裝完成以後,目錄下出現irstlim目錄。由於timit例程裡面的引用irstlm工具的路徑是tools目錄,所以把這個目錄拷貝到tools/目錄下。回到egs/timit/s5目錄,執行./run.sh指令碼,於是timit例程就跑起來了:


但是跑到sgmm2就不跑了,估計是我的虛擬機器配置太低,卡死了,不知道大家有沒有解決辦法。

7. s5目錄下可以開啟RESULTS檔案,這個檔案是最近的執行結果(我沒有執行出來,是別人執行好的結果)