1. 程式人生 > >kaldi基礎介紹(一)在說話人識別中的資料準備

kaldi基礎介紹(一)在說話人識別中的資料準備

在kaldi說話人識別示例(egs/sre10,egs/sre16)中,資料總共有兩大類,一是訓練集(training),二是評估資料集(evaluation)。對於評估資料集又分為兩類,一是用來註冊(enrollment)的資料集,二是測試(test)集。

一、訓練集的準備

訓練集需要準備的文字檔案是三類:spk2utt, utt2spk以及wav.scp

1 spk2utt 是說話人id(記作spkid)和說話人語音名稱(uttid)的對應關係,通常來講,一個說話人會有很多條語音,檔案中的格式為,spkid uttid1 uttid2...,每一行有且只有一個說話人id。如下圖所示

需要注意的是,每一行的uttid順序需要按照sort命令的排序模式來排,以及spkid也需要按照排序命令sort的模式來排。否則kaldi指令碼在進行validate_data_dir.sh的時候報錯。

2 utt2spk 是單個語音名稱uttid和說話人的對應,很明顯每行都是一一對應關係。如下圖


utt2spk也可以由kaldi自帶指令碼和spk2utt生成,也可以由自己寫指令碼完成

3 wav.scp 是語音名稱uttid和其完整路徑的對應,也是每行一個音訊。但是根據資料集中音訊檔案格式的不同,需要新增一些轉換格式的命令。

如果原始音訊檔案格式為wav,則只需要寫uttid path,如下:


如果格式為sph或者flac,則需要加入格式轉換的命令列,如下:


注:如果需要訓練性別有關的模型,還需要加入spk2gender的文字檔案

對於說話人識別的評估,我們首先需要註冊一批說話人,既然是註冊說話人的聲紋,則每個說話人需要至少有一條語音用來註冊。對於測試集,則還需要一個已註冊說話人和某個語音的id以及標籤label(表明是否是同一個人)

二、註冊集

註冊集和訓練集一樣,由:spk2utt,utt2spk,wav.scp 組成。文字檔案內容的模式也和訓練集保持一致,這裡不再贅述。

三、測試集

測試集是由:spk2utt,utt2spk,wav.scp 以及trials 這四種檔案組成。

1 在這裡spk2utt 還有 utt2spk內容是一模一樣的,都是uttid uttid,如下圖:

2 wav.scp 的內容模式和訓練集是一致的,它包含了所有的測試音訊

3 trials檔案格式: spkid uttid label,如下

以上就是kaldi說話人識別資料集的準備格式,自己手動寫指令碼準備的時候,會遇到的問題,一是排序問題,主要會出現在spk2utt以及utt2spk檔案中,因此在生成這些檔案的時候就需要注意一定的順序性,也要根據實際情況改變uttid的名字,以便於通過validate-data-dir指令碼的檢測;二是轉格式的問題,目前遇到的sph和flac就需要不同的工具去轉格式(sph2pipe和sox)。