模型自適應: 由於各地口音、采集設備、環境噪聲等音素的差異,已訓練過的GMM-HMM很可能和新領域的測試數據不匹配,導致識別效果變差,需要做自適應訓練。
MAP(最大後驗概率估計): 算法本質是重新訓練壹次,並且平衡原有模型參數和自適應數據的估計。
MLLR(最大似然線性回歸): 算法核心思想是將原模型的參數進行線性變換後再進行識別,其優點是使用少量語音即可以對所有模型進行自適應訓練,只要得到線性變換矩陣即可。
每個音素(或三音素)用壹個 HMM 建模,每個 HMM 狀態的發射概率對應壹個 GMM。GMM-HMM 的目的即是找到每壹幀屬於哪個音素的哪個狀態。GMM-HMM 的訓練使用自我叠代式的 EM 算法,更直接的方式是采用維特比訓練,即把EM算法應用到GMM參數的更新上,要求顯示的輸入每壹幀對應的狀態,使用帶標註的訓練數據更新GMM的參數,這種訓練方法比Baum-Welch算法速度更快,模型性能卻沒有明顯損失。
1、首次對齊時把訓練樣本按該句的狀態個數平均分段。
2、每次模型參數的叠代都需要成對的使用gmm-acc-stats-ali和gmm-est工具。
3、進行多輪叠代訓練後使用gmm-align-compiled工具通過其內部的維特比算法生成對齊結果。
單因子模型的基本假設是:壹個音素的實際發音,與其左右相鄰或相近的音素(上下文音素)無法。三因子結構中的每壹個音素建模實例,都由其中心音素及其左右各壹個上下文音素***同決定。無論是單因子還是三因子,通常都使用三狀態的HMM結構來建模。為了解決三因子模型參數爆炸問題,將所有的三因子模型放到壹起進行相似性聚類(決策樹),發音相似的三因子被聚類到同壹個模型,***享參數。訓練腳本:steps/train_deltas.sh,目標訓練壹個10000狀態的三因子系統:
1、以單因子為基礎,訓練壹個5000狀態的三因子模型
2、用5000狀態的模型重新對訓練數據進行對齊,其對齊質量必然比單因子系統對齊質量高
3、用新的對齊再去訓練壹個10000狀態的三因子系統
?phone-id:音素的 ID,參見 data/lang/phones.txt,強制對齊的結果不含 0(表示<eps>)和消歧符 ID;
hmm-state-id:單個 HMM 的狀態 ID,從 0 開始的幾個數,參見 data/lang/topo;
?pdf-id:GMM 的 ID,從 0 開始,總數確定了 DNN 輸出節點數,通常有數千個;
?transition-index:標識單個 Senone HMM 中壹個狀態的不同轉移,從 0 開始的幾個數;
?transition-id:上面四項的組合 (phone-id,hmm-state-id,pdf-id,transition-index),可以涵蓋所有可能動作,表示哪個 phone 的哪個 state 的哪個 transition 以及這個 state 對應的 pdf 和這個 transition 的概率,其中元組 (phone-id,hmm-state-id,pdf-id) 單獨拿出來,叫 transition-state,與 transition-id 都從1開始計數。
關系:transition-id可以映射到唯壹的transition-state,而transition-state可以映射到唯壹的pdf-id,因此transition-id可以映射到唯壹的pdf-id。pdf-id不能唯壹的映射成音素,因此kaldi使用transition-id表示對齊的結果。
語音識別過程是在解碼空間中衡量和評估所有的路徑,將打分最高的路徑代表的識別結果作為最終的識別結果。傳統的最大似然訓練是使正確路徑的分數盡可能高,而區分性訓練則著眼於加大這些路徑之間的打分差異,不僅要使正確路徑的分數僅可能高,還要使錯誤路徑尤其是易混淆路徑的分數盡可能低。
常用的區分性訓練準則有最大互信息、狀態級最小貝葉斯風險、最小音素錯誤。
分子:對於某條訓練數據,其正確標註文本在解碼空間中對應的所有路徑的集合。
分母:理論上值整個搜索空間。通常會通過壹次解碼將高分路徑過濾出來,近似整個分母空間,從而有效的減小參與區分性優化的分母規模。
詞格(Lattice):分子、分母其實都是解碼過程中壹部分解碼路徑的集合,將這些路徑緊湊有效的保存下來的數據結構就是詞格。