Kaldi聲學模型訓練

語音增強和語音識別系列博文鏈接

  • 支持標準的基於ML訓練的模型
    • 線性變換,如LDA,HLDA,MLLT/STC
    • 基於fMLLR,MLLR的說話人自適應
    • 支持混合系統
      • 支持SGMMs
    • 基於fMLLR的說話人識別
      • 模型代碼,可以容易的修改擴展

聲學模型訓練過程

1.獲得語料集的音頻集和對應的文字集

可以提供更精確的對齊,發音(句子)級別的起止時間,但這不是必須的。

2.將獲得的文字集格式化

kaldi需要各種格式類型的,訓練過程中將會用到每句話的起止時間,每句話的說話人ID,文字集中用到的所有單詞和音素。

3.從音頻文件提取聲學特徵

MFCC或者PLP被傳統方法廣泛使用。對於NN方法有所差異。

4.單音素訓練

單音素訓練不使用當前音素之前或者之後的上下文信息,三音素則使用當前音素,之前的音素和之後的音素。

5.基於GMM/HMM的框架

1.將音頻根據聲學模型對齊
聲學模型的參數在聲學訓練時獲得,然而,這個過程可以使用訓練和對齊的循環進行優化。這也稱之爲維特比(Viterbi)訓練(包括前向-後向以及期望最大化密集計算過程),通過將音頻和文字對齊,可以使用額外的訓練算法提升和精細化參數模型。所以,每一個訓練步驟會跟隨一個對齊步驟。

2.訓練三音素模型
單音素模型僅僅表示了單個音素的參數,但是音素是隨着上下文變化的,三音素模型使用上下文的前後音素展現了音素的變化。
並不是所有的單音素組合都存在於提供的文字集中,總共有pohems3 個可能的三音素,但是訓練集所包含的是一個有限的子集,並且出現的三音素組合也要有一定的次數以方便訓練,音素決策樹會將這些三音素聚類成更小的集合。

3.根據聲學模型重新對齊音頻&重新訓練三音素模型
重複上述1,2步驟,並加入額外更精細的三音素模型訓練,通常包括delta+delta-delta訓練, LDA-MLLT以及SAT。對齊算法包括說話人對齊和FMLLR。

4.訓練算法
Delta和Delta-delta算法計算特徵的一階和二階導數,或者是動態參數以補充MFCC特徵。
LDA-MLLT(Linear Discriminant Analysis – Maximum Likelihood Linear Transform), LDA根據降維特徵向量建立HMM狀態。MLLT根據LDA降維後的特徵空間獲得每一個說話人的唯一變換。MLLT實際上是說話人的歸一化。
SAT(Speaker Adaptive Training)。SAT同樣對說話人和噪聲的歸一化。

5.對齊算法
實際的對齊操作是一樣的,不同文集使用不同的聲學模型。

聲學模型類

這裏寫圖片描述

GMM

  • 高效似然估計

logfGauss(x)=K1()12(Xμ)T1(Xμ)=K1()12[XT1X2μT1X+μT1μ]=K2(μ,)+μT1XxT1X
  • 概率計算經過兩個矩陣向量的相乘獲得,可以使用優化的BLAS函數實現。
    這裏寫圖片描述

Kaldi 中GMM類

這裏寫圖片描述
解碼部分接口如下:

class DecodableInterface{
public:
//Returns the log likelihood(negated in the decoder).
virtual BaseFloat LogLikelihood(int32 frame, int32 index)=0;

//Frames are one-based.
virtual bool IsLastFrame(int32 frame)=0;

//Indices are one-based(compatibility with OpenFst).
virtual int32 NumIndices()=0;

virtual ~DecodableInterface(){}
}

這裏寫圖片描述

帶fMLLR的聲學模型

這裏寫圖片描述

帶MLLR的聲學模型

這裏寫圖片描述

SGMM類

這裏寫圖片描述

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