三音素,音素的一種,與單音素(如t, iy, n)不同,三音素表示為如t-iy+n,即由三個單音素組成,與單音素iy類似,但其考慮了上下文的關系,即,上文為t,下文為n。
三音素和單音素都是一個隱馬爾科夫模型(HMM)
三音素是為了考慮上下文的信息(協同發音)
倒譜特征提取時,漢寧窗向左、向右包含了冗余的頻譜,因此,用三音素代替單音素是合理的
單音素復制為三音素后,狀態的個數成指數增加,但復制后的狀態。為了解決數據稀疏,而需要訓練的數量龐大,因此需要降低參數的數量。
聚類是為了降低所有三音素參數的數量,即降低三音素的狀態的個數。
決策樹的作用就是給三音素的狀態做聚類。
聚類后,所有的三音素的狀態被聚類為多個簇,為每個簇內的所有三音素狀態進行綁定(即多個狀態共享一個狀態。
的參數)。
單音素訓練完成后(train_mono.sh),三音素的訓練(train_deltas.sh)
需要用到exp/mono0a_ali的對齊結果,將對齊結果使用Cross word方法映射到(復制為)三音素:
sil s p iy ch t ae s k sil
sil sil-s+p s-p+iy p-iy+ch iy-ch+t ch-t+ae t-ae+s ae-s+k s-k+sil sil
維特比解碼是對一段音頻進行解碼,生成的是狀態序列,這個狀態序列對應多個音素(HMMs)。維特比解碼的解碼范圍是什么?是FST?但FST是對訓練的一句話生成的。是lattice?lattice是FST的一個實例,與FST類似。是所有的狀態(單高斯或混合高斯)?那么A=[aij]從何得來?
Baum-Welch算法是為了確定一個HMM=λ=(π,Α,Β),使P(O/λ)最大
維特比算法中需要的A=[aij]就是單個HMM中的A
維特比算法的定義:這個算法解決了給定一個觀察值序列O=O1,O2,…,OT和一個模型λ=(π,Α,Β),在最佳的意義上確定一個狀態序列Q*=q1*,q2*,…,qT*的問題
訓練中使用維特比算法時,某個HMM及其對應的特征序列(音頻序列)是給定的,這時,是滿足維特比算法的定義的。
解碼時使用維特比算法時,有一段較長的特征序列,但不知道其對應的HMMs。不過,這時已經有了一個聲學模型(如final.mdl),猜測其中定義了所有HMM的轉移和所有聚類狀態的參數,或許可以用前向后向算法計算mdl中每個HMM
hmm_chinese.pdf p55 3.1.2 音素HMM連續語音識別
hmm_chinese.pdf p59
在訓練時用的是Viterbi算法,在識別時則用狀態Viterbi算法處理狀態級數據,用詞匯Viterbi算法處理詞匯級數據
識別時,采用了時間幀同步Viterbi(beam)搜索算法