[轉]Kaldi語音識別
阿新 • • 發佈:2017-09-18
位置 系統 tex 文件夾 設備 要去 ogl 詞典 -s
轉:http://ftli.farbox.com/post/kaldizhong-wen-shi-bie
Kaldi語音識別
1.聲學建模單元的選擇
1.1對聲學建模單元加入位置信息
2.輸入特征
3.區分性技術
4.多音字如何處理?
5.Noise Robust ASR
6.Deep Learning[DNN/CNN替換GMM]
7.在手機等資源受限設備
author:Feiteng
Email:[email protected]
date:2014/08/10
Kaldi訓練腳本針對不同的語料庫,需要重寫數據準備部分,腳本一般放在conf、local文件夾裏;
conf放置一些配置文件,如提取mfcc、filterbank等特征參數 的配置,解碼時的一些參數配置
local一般用來放置處理語料庫的數據準備部分腳本 > 中文識別,應該準備:發音詞典、音頻文件對應的文本內容和(文件標註)一個基本可用的語言模型(解碼時使用)
註:一般情況下,在模型訓練階段LM對ASR的參數訓練沒有影響,即不影響GMM、HMM、DNN/CNN的參數值;使用區分度模型訓練會有影響[生成Lattice候選]
1.聲學建模單元的選擇
全音節[是否帶聲調]、聲韻母[是否帶聲調]、音素?
> 帶聲調的聲韻母作為建模單元是比較常見的中文識別選擇,也有一些文章指出,使用更細化的phones 集可以有更多的性能提升:
中文連續語音識別系統音素建模單元集的構建——包葉波等
基於發音特征的漢語普通話語音聲學建模——顏永紅等
基於發音特征的漢語聲調建模方法及其在漢語語音識別中的應用——劉文舉等
1.1對聲學建模單元加入位置信息
For instance, we‘d have:
AA AA_B AA_E AA_I AA_S
for (B)egin, (E)nd, (I)nternal and (S)ingleton
and in the case of silence
SIL SIL SIL_B SIL_E SIL_I SIL_S
仍然要註意,中英文的差別,中文聲學建模單元可能不含有全部的_B _E _I _S
2.輸入特征
MFCC、fbank、PLP
使用對角協方差矩陣的GMM由於忽略了不同特征維度的相關性,MFCC更適合用來做特征
DNN/CNN可以對更好的利用這些相關性,把MFCC的DCT省略,使用fbank特征 可以更多地降低WER
tips: Deep Learning更多是實驗性質,解釋多半是迎合實驗現象
甚至直接從語音波形圖上直接提取特征
IBM-Tara N. Sainath-2014-IMPROVEMENTS TO FILTERBANK AND DELTA LEARNING
Tara N. Sainath發表了一系列的CNN on Speech的文章,我覺得質量是CNN on Speech的文章中最好的
中文是帶聲調的語言,聲調不同,差別很多,因此可以在特征上加入聲調信息
2014-A DNN-BASED ACOUSTIC MODELING OF TONAL LANGUAGE AND ITS APPLICATION TO MANDARIN PRONUNCIATION TRAINING
2014-AUTOMATIC PHONETIC SEGMENTATION IN MANDARIN CHINESE BOUNDARY MODELS, GLOTTAL FEATURES AND TONE
Noise Robust feature?
LiDeng2013-An Overview of Noise-Robust Automatic Speech Recognition
3.區分性技術
區別特征提取:LDA、MLLR、SAT、fbMMI
區分度模型訓練:MMI、MPE、MCE、smbr
經驗:並不是所有區分性技術都有正面效果
4.多音字如何處理?
假設我們的文本標註如下:
spk001 我們 的 作品 為 第一名
發音詞典如下:
的 d e0
的 d e4
的 d i2
為 w ei2
為 w ei4
的和為都是多音字,那麽在模型訓練階段如何根據標註spk001聯合phones的HMM模型呢?
有兩種解決策略:
①唯一化處理:更改文本標註和發音詞典,將多音字唯一化標註
如:
的1 d e0
的2 d e4
為1 w ei2
為2 w ei4
spk001 我們 的1 作品 為1 第一名
這樣做的話,我們在解碼階段需要去除發音詞典中的標識1、2,從而不會在解碼結果中引入多余的1、2
②自動處理:Kaldi可以將多種選擇(多音)編入spk001的fst,在Align階段根據音頻特征選擇phone的標號
這種處理可能不夠精確,ML本來就不能100%準確,這點讓人悲傷;
不過可能語料庫的發音人並不能對所有的多音字都發正確的音,
如果使用①需要校對每一個含有多音字的音頻發音,人工大大的;
英語單詞也存在多音字,不過相比中文少得多,可參考:馮誌偉-漢語拼音音節的歧義指數
5.Noise Robust ASR
從特征提取、模型層面把噪聲考慮進去 可參考:
綜述文章:LiDeng2013-An Overview of Noise-Robust Automatic Speech Recognition
6.Deep Learning[DNN/CNN替換GMM]
這一步“需要”先訓練一個HMM+GMM,然後獲得wav文件的alignment,即每一幀對應的phone->state
這樣我們就為DNN準備好了 train.data train.label
註:我們可以使用為GMM提取的特征,也可以重新從wav提取特征,需要註意的是窗口大小、幀移要與alignment匹配;
通常提取fbank特征作為DNN的輸入,而且組合當前幀左右相鄰的n幀成 2n+1幀特征作為輸入
Dropout、ReLU
關於Dropout我在TIMIT做了不下20組實驗,才看到WER的下降,更絕大多數文章的描述並不相同;
ReLU做了幾組實驗,沒看到更低的WER,有待繼續。
CNN
根據實驗CNN相比DNN會有5%-10%的WER下降,卷積層不同的實現[FFT vs 矩陣乘積]性能會有差異,這一層計算量略大
Tara N. Sainath發表了一系列的CNN on Speech的文章,我覺得質量是CNN on Speech的文章中最好的
直接HMM+DNN混合訓練
參考:2014-google-GMM-FREE DNN TRAINING
其他
SVD低秩逼近W矩陣
7.在手機等資源受限設備
參考 雷欣 的兩篇文章,針對數值存儲、模型等做優化,在資源暫用與識別率下降方面做權衡
1.2013-Accurate and Compact Large Vocabulary Speech Recognition on Mobile Devices
2.FINE CONTEXT, LOW-RANK, SOFTPLUS DEEP NEURAL NETWORKS FOR MOBILE SPEECH RECOGNITION
[轉]Kaldi語音識別