Kaldi aishell2 GMM訓練步驟(含aishell1語料轉aishell2組織方式)

0 前言

     中文語音識別的aishell2推出已經有一段時間了,由於沒有aishell2的語料庫,有資格的可以申請,所以拿aishell1的15G語料進行訓練,所以寫了相關的腳本處理aishell1的語料庫,來適配aishell2,可以參考我的github 倉庫 aishell2_gmm_train

 

1 語料轉換

        下載完aishell1的語料後,將data_aishell.tgz解壓後的語料放在egs/aishell2目錄下的recipes(自己創建的),將解壓後的語料按照github上的路徑存放,然後按照以下步驟操作:

1. notepad++打開recipes/data_aishell/transcript/aishell1的aishell_transcript_v0.8.txt文件,將所有的空格全部替換掉(因爲aishell2採用了jeba分詞腳本,無需分詞),做這一步操作後,方便後續腳本處理生成trans.txt wav.scp文件,替換後的文件保存爲aishell_transcript_v0.8_remove_space.txt

2. 執行recipes/data_aishell/wav/convert_aishelltoaishell2.py腳本,注意版本爲python3,之後會在train目錄下生成trans.txt 和 wav.scp  主要是將aishell1的transcript文件中的說話人編號BAC009S0002W0122 轉換成AISHELL2格式 IS0002W0122

3. 執行recipes/data_aishell/wav/rename_wav_file.py腳本,將aishell1語料中的BAC009S0002W0122.wav 重命名成aishell2的格式 IS0002W0122.wav

 

2 訓練腳本的修改

   1. 註釋了大辭典發音字典相關代碼,採用的aishell2的發音字典,沒有采用aishell1的,結巴分詞就是利用該字典分詞,見修改內容:prepare_dict.sh

   2. 語言模型訓練時,註釋了kaldi_lm的訓練及srilm的訓練方式,自己利用ngram命令生成相關的語言模型,見 train_lms.sh

mkdir -p data/local/lm/3gram-mincount/
ngram-count -text ${lm_dir}/lexicon.txt -order 3 -write ${lm_dir}/words.txt.count
ngram-count -read ${lm_dir}/words.txt.count -order 3 -lm ${lm_dir}/word.3gram.lm -interpolate

 

    3. GMM訓練時,在MFCC特徵提取時,沒有采用aishell2 pitch的特徵提取方式,因爲pitch增加了相應的維度,導致kaldi自帶的online-gmm-decode-faster解碼器維度不匹配,修改成make_mfcc.sh腳本,註釋掉了 subset the training data for fast startup相關代碼,並修改了部分訓練時的錯誤,見run_gmm.sh, 如果需要提取39維mfcc特徵值可以參考wakeup_words倉庫中的run_gmm.sh 

注: 以上腳本中,註釋掉了三音素和DNN的相關訓練(wakeup_words倉庫中有DNN的訓練),如有問題,歡迎拍磚。

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