KALDI之aishell模型說話人識別之V1
1.首先,成功安裝kaldi在伺服器上,用git clone那種方式安裝(和在本地Unbuntu烏班圖環境安裝沒區別)。
2資料準備部分
然後進入目錄cd egs/aishell/V1
2.1首先改cmd的配置:
vim cmd.sh
- 1
改為:
export train_cmd=run.pl #"queue.pl --mem 2G"
:wq儲存後。
2.2輸入:
vim run.sh
看見data=/export/a05/xna/data
改成想存放語料的路徑,返回後,新建對應的資料夾。
下載並解壓aishell 178小時語料庫到相應的路徑{
一、資料準備 1、首先在根目錄下建立路徑:/export/a05/xna/data然後下載資料集。這裡下載資料集要在run.sh前面加sudo命令,這是路徑的緣故。下載資料集用到的指令碼是local/download_and_untar.sh 需要下載兩個資料檔案:data_aishell 和 resource_aishell. 2、資料準備階段執行指令碼:local/aishell_data_prep.sh 執行指令碼後會產生 以下檔案:
}
3.在v1目錄下的run.sh有個資料準備的指令碼
# Data Preparation local/aishell_data_prep.sh $data/data_aishell/wav $data/data_aishell/transcript
根據這個提示直接進入local
cd local
然後開啟 vim aishell_data_prep.sh (你注意下這個指令碼要求的路徑 和生成檔案的路徑就ok了)
生成檔案的路徑:
{train_dir=data/local/train dev_dir=data/local/dev test_dir=data/local/test}
然後執行aishell_data_prep.sh(注意此時目錄在local下,直接執行./aishell_data_prep.sh會報錯《
./aishell_data_prep.sh: line 6: ./path.sh: No such file or directory
》沒有這樣的檔案或者目錄,aishell_data_prep.sh第6行提示,那麼退出當前目錄cd .. / ,然後在執行./aishell_data_prep.sh)
然後又會報錯
Usage: ./local/aishell_data_prep.sh <audio-path> <text-path> ./local/aishell_data_prep.sh /mnt/md1/voiceprint/data/data_aishell/wav /mnt/md1/voiceprint/data/data_aishell/transcript
重新開啟aishell_data_prep.sh找到錯誤(執行aishell_data_prep.sh檔案時候沒有傳遞引數(即路徑變數wav和transcript))
然後重新執行aishell_data_prep.sh
./local/aishell_data_prep.sh /mnt/md1/voiceprint/data/data_aishell/transcript /mnt/md1/voiceprint/data/data_aishell/wav
然後沒反應 ,然後內心狂妄煩躁,最後發現wav和transcript路徑變數的位置傳遞反了,一定要按著aishell_data_prep.sh檔案裡面變數位置引數來傳遞執行。正確執行在v1目錄下如下:
./local/aishell_data_prep.sh /mnt/md1/voiceprint/data/data_aishell/wav /mnt/md1/voiceprint/data/data_aishell/transcript
然後會提示
data_aishell/transcript
Preparing mnt/md1/voiceprint/data/local/train transcriptions
Preparing mnt/md1/voiceprint/data/local/test transcriptions
./local/aishell_data_prep.sh: AISHELL data preparation succeeded
這就是所謂的資料準備部分完成了,生成所謂的spk2utt:檔案,可以在cd kaldi-trunk/egs/aishell/v1/data/train目錄下vim spk2utt檢視它。
然後在/kaldi-trunk/egs/aishell/v1$ 目錄下執行vim run.sh
註釋掉#資料準備部分
# Data Preparation
local/aishell_data_prep.sh $data/data_aishell/wav $data/data_aishell/transcript
3.特徵提取
然後目錄切換到V1下,即
cd kaldi-trunk/egs/aishell/v1
#開啟V1頂層run.sh
vim run.sh
然後看特徵提取的提示部分,如下
mfccdir=mfcc
for x in train test; do
#重點還是進入steps目錄下,根據make_mfcc.sh指令碼提示生成相應的檔案
steps/make_mfcc.sh --cmd "$train_cmd" --nj 10 data/$x exp/make_mfcc/$x $mfccdir
sid/compute_vad_decision.sh --nj 10 --cmd "$train_cmd" data/$x exp/make_mfcc/$x $mfccdir
utils/fix_data_dir.sh data/$x
done
然後 cs steps,然後執行vim make_mfcc.sh,開啟後如下
看上面圖中的程式碼 echo "e.g.: $0 data/train exp/make_mfcc/train mfcc"照著這個格式準備三個檔案,最後那兩個應該是輸出資料夾。後面兩個是輸出目錄,你可以不用準備,它會自動幫你生成。
接下來你需要寫這三個 1、data/train 2、exp/make_mfcc/train 3、mfcc
在kaldi-trunk/egs/aishell/v1/data下能檢視到train,就說明已有data/train了。再接著開啟train顯示如下:
然後執行
./make_mfcc.sh data/train exp/make_mfcc/train mfcc
會報錯
./make_ data/train exp/make_mfcc/train mfcc ./make_: line 19: parse_: No such file or directory
開啟make_第19行如下
然後退出執行下面程式碼
. ./cmd.sh
. ./path.sh
. utils/parse_options.sh || exit 1;
注意.和.之間的空格
然後我就這樣被拒絕了-bash: ./cmd.sh: Permission denied
然後加許可權
chmod 755 cmd.sh path.sh chmod 755 || exit 1;
加完許可權接著執行
. ./cmd.sh
. ./path.sh
. utils/parse_options.sh || exit 1;
再次執行./step/make_mfcc.sh
那又是一頓暴躁啊,注意圖上程式碼的位置,變數傳參又給狗吃了!!!!!
根據make_mfcc.sh檔案裡面的第23行 echo "e.g.: $0 data/train exp/make_mfcc/train mfcc"
在/mnt/md1/voiceprint/kaldi-trunk/egs/aishell/v1$目錄下執行
./steps/make_mfcc.sh data/train exp/make_mfcc/train mfcc
./steps/make_mfcc.sh data/train exp/make_mfcc/train mfcc
然後特徵提取這部分成功提示如下: