Kaldi是目前語音識別領域,廣受歡迎并流行的開源工具包。Kaldi設計之初對通用性,可拓展性等一系列源代碼層次的考量,大大降低了Kaldi作為語音識別工具包的門檻, 同時擁有非常完整的語音識別系統(tǒng)訓練腳本。本書通過對Kaldi已有訓練腳本的梳理和引導,幫助讀者快速搭建可用的語音識別系統(tǒng)。
陳果果清華大學本科學位,約翰霍普金斯大學博士學位,主要研究方向是語音識別及關鍵詞檢索,師從語音識別開源工具Kaldi主要開發(fā)者Daniel Povey,以及約翰霍普金斯大學語言語音處理中心教授Sanjeev Khudanpur。博士期間為Google開發(fā)了Google的喚醒詞Okay Google的原型,現(xiàn)在已經(jīng)用到數(shù)以億計的安卓設備及Google智能語音交互設備上。博士期間同時參與開發(fā)語音識別開源工具Kaldi,以及神經(jīng)網(wǎng)絡開源工具CNTK。博士畢業(yè)以后聯(lián)合創(chuàng)辦KITT.AI,專注于語音識別及自然語言處理,公司于2017年被百度收購,目前擔任百度智能生活事業(yè)群組(SLG)主任架構師。都家宇本科畢業(yè)于大連理工大學,后于澳大利亞新南威爾士大學電子信息工程學院學習,取得信號處理專業(yè)碩士學位。研究生期間在導師 Julien Epps 指導下開始進行語音處理、情緒識別方向的研究。畢業(yè)后先后任職于清華大學語音技術實驗室、百度語音技術部,以及阿里巴巴iDST、達摩院語音組,從事聲學模型、解碼器、語音喚醒等方面的研發(fā)工作。參與過與 Kaldi 相關的工作有:Kaldi nnet1神經(jīng)網(wǎng)絡框架中 lstm 作者;發(fā)起并推動全球最大規(guī)模的中文開源數(shù)據(jù)集語音項目AISHELL-1、AISHELL-2,已服務于清華大學、北京大學、南洋理工大學、哥倫比亞大學等近200所國內外高校的科研項目。那興宇本科和博士均畢業(yè)于北京理工大學,主要研究方向是語音識別和語音合成。先后任職于中國科學院聲學研究所和阿里巴巴機器人,從事語音識別模型訓練系統(tǒng)和語音交互系統(tǒng)的開發(fā)。目前就職于微軟,擔任資深應用科學家,從事語音識別算法和技術架構的開發(fā)及業(yè)務支持工作。2015年開始在Kaldi開源項目中貢獻代碼,參與了nnet3和chain模型的開發(fā)工作,并維護其中若干示例及OpenSLR的中文語音識別模型。張俊博博士畢業(yè)于中國科學院聲學研究所,師從顏永紅研究員。在小米公司從零起主導構建了整套語音算法研究框架,包括語音識別、智能設備語音喚醒、聲紋識別、語音增強、用于語音應用的神經(jīng)網(wǎng)絡部署,均達到了當時的先進水平,并發(fā)表頂會論文若干篇,為后續(xù)的語音研發(fā)工作建立了基礎。近期上線了用于外語學習的發(fā)音質量評測引擎,并給Kaldi貢獻了發(fā)音良好度評分的代碼。
1 語音識別技術基礎1
1.1 語音識別極簡史1
1.1.1 語音識別早期探索2
1.1.2 概率模型一統(tǒng)江湖2
1.1.3 神經(jīng)網(wǎng)絡異軍突起3
1.1.4 商業(yè)應用推波助瀾4
1.2 語音識別系統(tǒng)架構6
1.2.1 經(jīng)典方法的直觀理解6
1.2.2 概率模型7
1.2.3 端到端語音識別10
1.3 一些其他細節(jié)11
1.3.1 語音信號處理11
1.3.2 發(fā)音和語言學12
1.3.3 語音識別系統(tǒng)的評價13
2 Kaldi概要介紹15
2.1 發(fā)展歷史15
2.1.1 名字的由來15
2.1.2 約翰霍普金斯大學夏季研討會16
2.1.3 Kaldi發(fā)展簡史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 配置并行環(huán)境25
2.4 一個簡單的示例26
2.4.1 運行run.sh26
2.4.2 腳本解析28
2.5 示例介紹34
2.5.1 數(shù)據(jù)示例34
2.5.2 競賽示例38
2.5.3 其他示例40
2.5.4 示例結構41
3 數(shù)據(jù)整理44
3.1 數(shù)據(jù)分集44
3.1.1 Librispeech示例的數(shù)據(jù)處理過程45
3.1.2 數(shù)據(jù)下載和解壓46
3.2 數(shù)據(jù)預處理49
3.2.1 環(huán)境檢查51
3.2.2 生成表單文件52
3.2.3 數(shù)據(jù)檢查55
3.3 輸入和輸出機制56
3.3.1 列表表單57
3.3.2 存檔表單60
3.3.3 讀寫聲明符60
3.3.4 表單屬性64
3.4 常用數(shù)據(jù)表單與處理腳本69
3.4.1 列表類數(shù)據(jù)表單70
3.4.2 存檔類數(shù)據(jù)表單72
3.4.3 數(shù)據(jù)文件夾處理腳本77
3.4.4 表單索引的一致性78
3.5 語言模型相關文件79
3.5.1 發(fā)音詞典與音素集80
3.5.2 語言文件夾85
3.5.3 生成與使用語言文件夾92
4 經(jīng)典聲學建模技術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 無監(jiān)督特征變換139
4.4.2 有監(jiān)督特征變換141
4.5 區(qū)分性訓練143
4.5.1 聲學模型訓練流程的變遷143
4.5.2 區(qū)分性目標函數(shù)144
4.5.3 分子、分母145
4.5.4 區(qū)分性訓練在實踐中的應用146
5 構圖和解碼147
5.1 N元文法語言模型148
5.2 加權有限狀態(tài)轉錄機151
5.2.1 概述151
5.2.2 OpenFst153
5.3 用WFST表示語言模型156
5.4 狀態(tài)圖的構建158
5.4.1 用 WFST 表示發(fā)音詞典158
5.4.2 WFST 的復合運算163
5.4.3 詞圖的按發(fā)音展開165
5.4.4 LG 圖對上下文展開166
5.4.5 用 WFST 表示 HMM 拓撲結構169
5.5 圖的結構優(yōu)化170
5.5.1 確定化170
5.5.2 最小化173
5.5.3 圖的stochastic性質174
5.6 最終狀態(tài)圖的生成174
5.7 基于令牌傳遞的維特比搜索176
5.8 SimpleDecoder源碼分析178
5.9 Kaldi 解碼器家族187
5.10 帶詞網(wǎng)格生成的解碼189
5.11 用語言模型重打分提升識別率192
6 深度學習聲學建模技術195
6.1 基于神經(jīng)網(wǎng)絡的聲學模型195
6.1.1 神經(jīng)網(wǎng)絡基礎196
6.1.2 激活函數(shù)198
6.1.3 參數(shù)更新199
6.2 神經(jīng)網(wǎng)絡在Kaldi中的實現(xiàn)200
6.2.1 nnet1(nnet)200
6.2.2 nnet2203
6.2.3 nnet3208
6.3 神經(jīng)網(wǎng)絡模型訓練214
6.3.1 輸入特征的處理214
6.3.2 神經(jīng)網(wǎng)絡的初始化215
6.3.3 訓練樣本的分批與隨機化217
6.3.4 學習率的調整222
6.3.5 并行訓練224
6.3.6 數(shù)據(jù)擴充227
6.4 神經(jīng)網(wǎng)絡的區(qū)分性訓練228
6.4.1 區(qū)分性訓練的基本思想228
6.4.2 區(qū)分性訓練的目標函數(shù)229
6.4.3 區(qū)分性訓練的實用技巧231
6.4.4 Kaldi神經(jīng)網(wǎng)絡區(qū)分性訓練示例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 一個簡單的語音檢索系統(tǒng)248
7.2.3 集外詞處理之詞表擴展254
7.2.4 集外詞處理之關鍵詞擴展255
7.2.5 集外詞處理之音素/音節(jié)系統(tǒng)256
7.2.6 一個實用的語音檢索系統(tǒng)258
7.3 語音喚醒263
7.3.1 語音喚醒經(jīng)典框架264
7.3.2 語音喚醒進階優(yōu)化266
7.3.3 語音喚醒的Kaldi實現(xiàn)思路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