●1 語音識別技術基礎1
1.1 語音識別極簡史1
1.1.1 語音識別早期探索2
1.1.2 概率模型一統江湖2
1.1.3 神經網絡異軍突起3
1.1.4 商業應用推波助瀾4
1.2 語音識別繫統架構6
1.2.1 經典方法的直觀理解6
1.2.2 概率模型7
1.2.3 端到端語音識別10
1.3 一些其他細節11
1.3.1 語音信號處理11
1.3.2 發音和語言學12
1.3.3 語音識別繫統的評價13
2 Kaldi概要介紹15
2.1 發展歷史15
2.1.1 名字的由來15
2.1.2 約翰霍普金斯大學夏季研討會16
2.1.3 Kaldi發展簡史17
2.2 設計思想18
2.2.1 初衷18
2.2.2 開源19
2.2.3 訓練腳本19
2.3 安裝20
2.3.1 下載Kaldi代碼20
2.3.2 安裝CUDA20
2.3.3 安裝編譯依賴庫21
2.3.4 安裝第三方工具21
2.3.5 選擇其他的矩陣庫23
2.3.6 編譯Kaldi代碼23
2.3.7 配置並行環境25
2.4 一個簡單的示例26
2.4.1 運行run.sh26
2.4.2 腳本解析28
2.5 示例介紹34
2.5.1 數據示例34
2.5.2 競賽示例38
2.5.3 其他示例40
2.5.4 示例結構41
3 數據整理44
3.1 數據分集44
3.1.1 Librispeech示例的數據處理過程45
3.1.2 數據下載和解壓46
3.2 數據預處理49
3.2.1 環境檢查51
3.2.2 生成表單文件52
3.2.3 數據檢查55
3.3 輸入和輸出機制56
3.3.1 列表表單57
3.3.2 存檔表單60
3.3.3 讀寫聲明符60
3.3.4 表單屬性64
3.4 常用數據表單與處理腳本69
3.4.1 列表類數據表單70
3.4.2 存檔類數據表單72
3.4.3 數據文件夾處理腳本77
3.4.4 表單索引的一致性78
3.5 語言模型相關文件79
3.5.1 發音詞典與音素集80
3.5.2 語言文件夾85
3.5.3 生成與使用語言文件夾92
4 經典聲學建模技術94
4.1 特征提取95
4.1.1 用 Kaldi 提取聲學特征95
4.1.2 特征在 Kaldi 中的存儲99
4.1.3 特征的使用104
4.1.4 常用特征類型106
4.2 單音子模型的訓練107
4.2.1 聲學模型的基本概念108
4.2.2 將聲學模型用於語音識別112
4.2.3 模型初始化113
4.2.4 對齊115
4.2.5 Transition 模型118
4.2.6 GMM 模型的迭代124
4.3 三音子模型訓練128
4.3.1 單音子模型假設的問題128
4.3.2 上下文相關的聲學模型129
4.3.3 三音子的聚類裁剪130
4.3.4 Kaldi中的三音子模型訓練流程130
4.4 特征變換技術139
4.4.1 無監督特征變換139
4.4.2 有監督特征變換141
4.5 區分性訓練143
4.5.1 聲學模型訓練流程的變遷143
4.5.2 區分性目標函數144
4.5.3 分子、分母145
4.5.4 區分性訓練在實踐中的應用146
5 構圖和解碼147
5.文法語言模型148
5.2 加權有限狀態轉錄機151
5.2.1 概述151
5.2.2 OpenFst153
5.3 用WFST表示語言模型156
5.4 狀態圖的構建158
5.4.1 用 WFST 表示發音詞典158
5.4.2 WFST 的復合運算163
5.4.3 詞圖的按發音展開165
5.4.4 LG 圖對上下文展開166
5.4.5 用 WFST 表示 HMM 拓撲結構169
5.5 圖的結構優化170
5.5.1 確定化170
5.5.2 最小化173
5.5.3 圖的stochastic性質174
5.6 最終狀態圖的生成174
5.7 基於令牌傳遞的維特比搜索176
5.8 SimpleDecoder源碼分析178
5.9 Kaldi 解碼器家族187
5.10 帶詞網格生成的解碼189
5.11 用語言模型重打分提升識別率192
6 深度學習聲學建模技術195
6.1 基於神經網絡的聲學模型195
6.1.1 神經網絡基礎196
6.1.2 激活函數198
6.1.3 參數更新199
6.2 神經網絡在Kaldi中的實現200
6.2.1 nnet1(nnet)200
6.2.2 nnet2203
6.2.3 nnet3208
6.3 神經網絡模型訓練214
6.3.1 輸入特征的處理214
6.3.2 神經網絡的初始化215
6.3.3 訓練樣本的分批與隨機化217
6.3.4 學習率的調整222
6.3.5 並行訓練224
6.3.6 數據擴充227
6.4 神經網絡的區分性訓練228
6.4.1 區分性訓練的基本思想228
6.4.2 區分性訓練的目標函數229
6.4.3 區分性訓練的實用技巧231
6.4.4 Kaldi神經網絡區分性訓練示例232
6.4.5 chain模型234
6.5 與其他深度學習框架的結合242
6.5.1 聲學模型242
6.5.2 語言模型243
6.5.3 端到端語音識別243
7 關鍵詞搜索與語音喚醒245
7.1 關鍵詞搜索技術介紹245
7.1.1 關鍵詞搜索技術的主流方法245
7.1.2 關鍵詞搜索技術的主流應用247
7.2 語音檢索247
7.2.1 方法描述248
7.2.2 一個簡單的語音檢索繫統248
7.2.3 集外詞處理之詞表擴展254
7.2.4 集外詞處理之關鍵詞擴展255
7.2.5 集外詞處理之音素/音節繫統256
7.2.6 一個實用的語音檢索繫統258
7.3 語音喚醒263
7.3.1 語音喚醒經典框架264
7.3.2 語音喚醒進階優化266
7.3.3 語音喚醒的Kaldi實現思路267
8 說話人識別269
8.1 概述269
8.2 基於i-vector和PLDA的說話人識別技術271
8.2.1 整體流程271
8.2.2 i-vector 的提取272
8.2.3 基於餘弦距離對 i-vector 分類274
8.2.4 基於 PLDA 對 i-vector 分類276
8.3 基於深度學習的說話人識別技術280
8.3.1 概述280
8.3.2 x-vector280
8.3.3 基於 x-vector 的說話人識別示例283
8.4 語種識別288
9 語音識別應用實踐292
9.1 語音識別基本應用292
9.1.1 離線語音識別與實時在線語音識別292
9.1.2 語音識別應用模塊293
9.1.3 小結296
9.2 話音檢測模塊296
9.2.1 VAD算法296
9.2.2 離線VAD297
9.2.3 流式在線VAD298
9.3 模型的適應299
9.3.1 聲學模型的適應299
9.3.2 詞表的擴展300
9.3.3 語言模型的適應301
9.3.4 小結301
9.4 解碼器的選擇及擴展302
9.4.1 Kaldi中的解碼器302
9.4.2 實際應用中的常見問題及擴展303
9.4.3 小結305
附錄A 術語列表306
附錄B 常見問題解答308
參考文獻313