Programming Contest:
本作業的目的在使同學瞭解如何以GMM(Gaussian Mixture Model)的方法來進行語者辨識(Speaker Identification),並嘗試如何調整各種參數來提高辨識率。
- 需要下載的資料:
- 如何執行範例程式:
- 先修改 go.m 裡面的 waveDir 變數,將其設定為錄音檔按所在之目錄。
- 在 MATLAB 輸入 go 即可。此範例共用了每個人的十句話,單數句(共 5 句)用來訓練 GMM,雙數句(共 5 句)用來測試用,inside test 辨識率約 100.00%,outside test 辨識率約 99.00%。(若稍微修改 go.m,讓程式使用每個人的所有語料,單數句用來訓練 GMM,雙數句用來測試,則 inside test 辨識率約 98.63%,outside test 辨識率約 97.26%。)
- 範例程式說明:
- go.m:主程式,包含載入語音訓練資料、求取特徵向量、訓練 GMM 模型,以及計算 inside test 及 outside test 的辨識率。
- wave2mfcc.m:將語音訊號轉換成 MFCC(Mel-frequency cepstral coefficients)的函數。(由此函數轉出的特徵向量共有26維,1-12 維是 MFCC,13 維是 log energy,14-25 維是 delta MFCC,26 維是 delta log energy。但實際轉出的參數是由 setFeaturePrm.m 所控制的。)
- gmmTrain.m 及 gmmEval.m:GMM 的訓練及計算。(這些函數是放在 dcpr 裡面。)
- speakerID.m:利用訓練完的 GMM 來進行語者辨識,並算出辨識率。
- 如何更改範例程式,以得到較好的辨識率(請參考 "Robust Text-Independent Speaker Identification using Gaussian Mixture Speaker Models"):
- 為了展示方便,go.m 只有採用少數語句,若要測試所有語句,運算時間就會變長很多,所以你要找一台快速的電腦。
- 在端點偵測方面,可將含有 silence 的音框都拿掉,甚至連氣音都應該拿掉。
- 在辨識參數方面,可以嘗試:
- 改變 Gaussian component 的個數。(但不能盲目提高 Gaussian component 的個數,否則會發生 inside test 的辨識率極高,但 outside test 的辨識率卻極低的情況。)
- 改變不同的 k-means 的啟始方法,使得 GMM 的訓練能夠得到較好的啟始點。
- 改用 center-splitting 的 VQ 方法(vqLbg.m)。
- 提高 gmmTrain 的迴圈次數,看是否能得到更大的 log probability。
- 設法不讓 variance 變的太小。
- 在特徵向量擷取方面,可以進行下列事項:
- 採用 HTK 的 feature extraction 函數(htkWave2mfccMex.dll)。
- 只取用2-12維的 MFCC。
- Cepstral mean normalization
- Difference coefficients
- Frequency warping
- 在加速計算方面:
- 可以將呼叫 vqKmeans.m 之處改為呼叫 vqKmeansMex.dll,將會使速度加快。
- 若嫌 gmmTrain.m 太慢,你也可以自己寫一個 C 的版本。
- 效能測試:助教會進行 inside test 和 outside test,以兩者之平均值做為效能指標。
- 應該上傳的檔案:
- gmmPrm.mat:GMM的參數檔案
- 若有修改 wave2mfcc.m,請一併上傳。
- method.txt:簡要說明你的方法
- 任何其他你修改過的程式。