承接前面的《淺談機器學習基礎》、《淺談深度學習基礎》和《淺談自然語言處理基礎》,主要參考了《解析深度學習:語音識別實踐》以及其它相關博客和Wikipedia。
簡介
其實自動語音識別(Automatic Speech Recognition,ASR)這個研究領域已經活躍了五十多年,但一直并沒有真正成為一種重要的人機交流的形式,一個是緣于當時技術的落后,語音技術在大多數實際用戶實際使用的場景下還不大可用;另一個是,很多情況下使用鍵盤、鼠標這樣的形式比語音更有效、更準確、約束更小。
近年來,首先是,由于摩爾定律持續有效,今天可用的計算力僅僅相比十幾年前就高了幾個量級;其次是,借助越來越先進的互聯網和云計算,我們得到了比先前多得多的數據資源。最后,移動設備、可穿戴設備、智能家居設備、車載信息娛樂系統正變得越來越流行,在這些設備和系統上,鼠標和鍵盤不再那么便捷了,而對話交互會成為人機交互的未來。
語音技術同時可以促進人類之間的交流(HHC)以及人機交流(HMC),HHC比如,發送給他人的語音消息可以轉化為文字方便閱讀,采用語音輸入也更為便捷,語音識別技術還可以用來將演講和課程內容進行識別和索引;HMC比如,語音搜索、個人智能助理、聲控游戲、智能家居等。
一個語音對話系統一般包含四個主要組成部分中的一個或多個:語音識別系統將語音轉化為文本、語義理解系統提取用戶說話的語義信息、文字轉語音系統將內容轉化為語音、對話管理系統連接其他三個系統并完成與實際應用場景的溝通。如下圖:
這里我們只關注語音識別系統,語音識別系統主要由四部分組成:信號處理和特征提取、聲學模型(AM)、語言模型(LM)和解碼搜索部分。如下圖:
信號處理和特征提取是語音識別系統的第一部分,接受最原始的音頻信號,通過消除噪聲和信道失真對語音進行增強,將信號從時域轉化到頻域,并為后面的聲學模型提取合適的有代表性的特征向量。
聲學模型以特征提取部分生成的特征為輸入,為可變長特征序列生成聲學模型分數。
語言模型估計通過訓練語料學習詞與詞之間的相互關系,來估計假設詞序列的可能性,又叫語言模型分數。如果了解領域或任務相關的先驗知識,語言模型的分數通??梢怨烙嫷母鼫蚀_。
解碼搜索綜合聲學模型分數與語言模型分數的結果,將總體輸出分數最高的詞序列當做識別結果。
或者看這張圖:
語音識別就是一個先編碼后解碼的過程,信號處理和特征提取就是編碼的過程,也即圖中的Feature Extraction,特征抽取,由原始的語音得到語音向量。后面即是對語音向量的解碼,而解碼需要的Acoustic Model、Language Model就是上面提到過的聲學模型和語言模型。聲學模型這篇文章會著重講,語言模型就是《淺談自然語言處理基礎》里面提過的N-gram那部分。
聲學模型處理的問題主要在于特征向量序列的可變長和音頻信號的豐富變化性,因為語音長度是不確定的,所以特征向量序列的長度也是不確定的,我們一般通過動態時間規整方法和隱馬爾可夫模型來處理。音頻信號的豐富變化性指,音頻信號的多樣性會由說話人的性別、健康狀況、緊張程度、說話風格以及環境噪聲、周圍人聲、信道扭曲、方言差異、非母語口音等各種原因所引起。
在過去,信號處理和特征抽取一般用梅爾倒譜系數或者相對頻譜變換-感知線性預測
作為特征向量,然后使用混合高斯模型-隱馬爾可夫模型(GMM-HMM)作為聲學模型,然后再用最大似然準則(maximum likelihood,ML)去訓練,再之后序列鑒別性訓練算法,比如最小分類錯誤(MCE)和最小音素錯誤(MPE)等準則被提了出來。
近些年,分層鑒別模型比如DNN,變得可行起來,比如上下文相關的深度神經網絡-隱馬爾可夫模型(context-dependent DNN-HMM,CD-DNN-HMM)就比傳統的GMM-HMM表現要好得多。這篇文章將會著重介紹CD-DNN-HMM。
混合高斯模型
這里先說一下什么是高斯分布,高斯分布就是正態分布。如下圖:
紅色的是標準的正態分布,μ指均值,σ^2指方差,方差越大,分布越分散。
E(x) = μ,var(x) = σ^2 = r^(?1)
正態分布的累積分布函數如下圖所示,與前面提過的Sigmoid函數類似:
上面說的只是普通的高斯分布,還有混合高斯分布,不同于高斯分布的單模態性質M=1,混合高斯分布是多模態的M>1,是多個高斯分布的按權疊加,如下式:
另外還有多元高斯分布和多元混合高斯分布,是將相應的高斯分布推廣到多變量:
這里的x
就不再是一個值而是一個向量,擁有多個維度。Σm是協方差矩陣,前面講PCA主成分分析時提到過,協方差矩陣用于描述不同維度變量之間的相關關系。
在這里,如果變量x
的維度很大,那么使用全協方差矩陣(非對角)將引入大量參數,為了減少這個數量,可以使用對角協方差矩陣,或者所有M模態都使用同樣的協方差矩陣。
前面說,協方差矩陣用于描述不同維度變量之間的相關關系,如果我們采用了對角陣,看似是假設了數據向量的各個維度不相關,但是實際上,因為混混合高斯模型具有多個高斯成分,多個模態,所以雖然每個成分都使用了對角協方差矩陣,但總體上至少可以有效地描述由一個使用全協方差矩陣的單高斯模型所描述的向量維度相關性。
對GMM相關參數變量的訓練,需要用到EM算法,這個算法在《淺談自然語言處理基礎》中有詳細的講解。
講完了高斯模型,我們需要討論一下如何利用混合高斯分布對語音特征建模的問題。
原始語音數據經過一些處理(如短時傅里葉變換形式或者取倒譜)后會成為特征序列,在忽略時序信息的條件下,可以以幀為單位,用GMM對語音特征進行建模。GMM因其擬合任意復雜的、多種形式的分布能力而廣為人知。
如果把語音順序信息考慮進去,GMM便不再是個好模型,因為它不包含任何順序信息,所以這里我們要引入隱馬爾可夫模型(HMM)與GMM結合,來處理時序問題。
我們利用GMM對HMM每個狀態的語音特征分布進行建模,《淺談自然語言處理基礎》也詳細講過HMM了,這里的GMM就相當于描述狀態的符號發射概率,對于屬于該狀態的語音特征向量的概率分布進行建模。
GMM盡管有著眾多優勢,但也有一個嚴重的不足,就是GMM不能有效地對呈非線性或近似非線性的數據進行建模。比如描述一個球面,如果選擇合適的模型,只需要很少的參數,而GMM卻需要非常多對角協方差高斯分布或相當多的全協方差高斯分布。
隱馬爾可夫模型及其變體
前面的文章已經詳細的講過了HMM的基礎內容,這里著重說一下之前沒有覆蓋到的部分。
先說什么是馬爾可夫鏈的穩態分布。
我們講過HMM有初始條件概率分布矩陣π和狀態間轉移概率矩陣a,這部分就源自馬爾可夫鏈。考慮這樣一個問題,我們可以直觀的感受到,從一個固定的初始狀態出發,馬爾可夫鏈第n步之后的分布和初始狀態以及n都是相關的,同時與初始狀態的相關性會隨著時間增長而衰減。但在理論研究和實際應用的很多情形下,我們并不希望第n步后的分布取決于初始位置和n。
所以由此引出了一種具有穩態分布的馬爾可夫鏈,這種馬爾可夫鏈滿足一定的條件,使得該馬爾可夫鏈之于這個穩態分布是漸進無偏的,也即無論初始分布如何,馬爾可夫鏈到它的穩態分布都是漸進收斂的。具有穩態分布的馬爾可夫鏈,從任何初始狀態出發,第n步分布在n趨于無窮的時候都會趨近于同樣的穩態分布。
另一點對于HMM要提到的,如果HMM各個狀態的觀測概率分布沒有任何重疊,那么這樣的序列便不是一個隱馬爾可夫模型,因為盡管狀態有了隨機性,但對一個特定的狀態而言,由于概率分布沒有重疊,某個固定范圍內的觀察值總能找到唯一的狀態與之對應,那在這種情況下,HMM便退化成了馬爾可夫鏈,也即相當于只有單重隨機過程。
前面簡單的提到了GMM與HMM的結合,這里詳細說一下。GMM用于描述HMM中給定狀態下的符號發射概率,有多少種狀態就有多少個GMM,每個狀態自己獨占一個GMM。然后相當于我們有了一張GMM分布圖,是這個狀態下的不同符號的發射概率,這樣給定輸出符號就能在相應的GMM圖中找到該狀態產生該指定符號的概率,橫坐標就是輸出符號,縱坐標是生成概率。當然如果M=1,那混合高斯分布就退化成了高斯分布。
在HMM中,輸出序列用于描述語音特征向量,而狀態序列代表相應的文字,所以語音識別問題就是HMM中的解碼問題,在HMM中,我們用維特比算法來解碼,得到概率最大的狀態序列。
維特比算法所找到的針對一個從左到右傳播的HMM的最佳狀態轉移路徑,等價于確定最優HMM狀態分割所需要的信息。狀態分割的概念在語音建模和識別中最常用于從左到右傳播的HMM,其中每個HMM狀態通常與較大數量的連續幀數的觀察向量序列相對應。
傳統的認為,圖像和視頻是高維信號,相比之下,語音是一維時間信號。這種觀點過于簡單,語音實際上應被視為二維信號,其中空間(即頻率或音位)和時間維度有很不一樣的性質。
盡管GMM-HMM在語音建模和識別中取得了巨大成功,但20世紀90年代,人們開始開發可以捕捉更多現實的語音在時域中的動態屬性的統計模型,比如隱藏動態模型、軌跡分段模型等等。
這些HMM模型變體的共同之處在于模型中都包含了時間的動態結構,它們依賴對語音時序相關結構不同的先驗知識簡化假設。根據這種結構的特點,我們可以把這些模型分為兩類,第一類模型關注表層聲學級別的時間相關結構;第二類由較深的隱藏的動態結構組成,其中底層的語音產生機制被用作一種先驗知識來描述可觀察的語音模式的時間結構。
在其中很多生成性動態/軌跡模型中,時間跨度通常由一系列語言標簽決定,它們將整句從左到右的分成多個段。因此是分段模型。
這里有些難理解,我提出我自己的理解,也許不正確。在傳統GMM-HMM中,我們為每個狀態訓練一個GMM來描述符號發射概率,但即便是同樣的狀態,不同時序下的GMM也應該是有一定區別的,可HMM中有有限歷史性假設和輸出獨立性假設,無法考慮到更多的信息,所以我們考慮通過引入一些先驗知識來優化這塊的假設,增加對時間的動態結構的考慮。所謂分段,大概是對該時間段內狀態所對應的符號發射概率進行統一的調整,以更貼近真實情況。
深度神經網絡
DNN在《淺談深度學習基礎》中也有過詳細的講解了,這里也是著重說一下之前沒有覆蓋到的內容。
像權重衰減、dropout、mini-batch、bagging、boosting、momentum,自適應學習速率這些都有講過,還缺一個數據預處理。
數據預處理在許多機器學習算法中都扮演著重要的角色,常見的有樣本特征歸一化和全局特征標準化,也都很好理解。
如果每個樣本均值的變化與處理的問題無關,就應該將特征均值歸零,減小特征相對于深度神經網絡模型的變化,例如,減去一張圖片的強度均值,可以減弱亮度引起的變化。
全局特征標準化的目標是使用全局轉換縮放每維數據,使得最終的特征向量處于相似的動態范圍內,例如在圖像處理中,經常將[0, 255]范圍內的色值縮放到[0, 1]范圍內。
高級模型初始化技術
至于模型初始化,《淺談深度學習基礎》也講過了,就是自編碼器和受限玻爾茲曼機。它們能對網絡進行一定程度的預訓練,在防止陷入局部最優或梯度消失上能起到一定的作用。
深度神經網絡-隱馬爾可夫模型混合系統(DNN-HMM)
這里我們先給出兩張圖,分別是GMM-HMM和DNN-HMM的示意圖:
從圖中可以看到,就像上文所說的,HMM中的狀態序列就是語音識別的結果詞匯序列,每種狀態對應一種GMM,根據這個GMM可以得到該狀態生成不同語音特征向量的概率。
接下來是DNN-HMM:
在混合系統中,HMM對語音信號的序列特性進行建模,DNN對所有聚類后的狀態的似然度進行建模,這里對時間上的不同點采用同樣的DNN。
在20世紀90年代中葉,這種混合模型就已被提出,早期被稱作ANN-HMM,通常只使用上下文無關的音素(音素是語音的最小單位)狀態作為ANN訓練的標注信息,隨后被擴展到上下文相關的音素建模,再后來,淺層的神經網絡被替換成DNN,其次使用聚類后的狀態(綁定后的三音素狀態)代替單音素狀態作為神經網絡的輸出單元,這種改善后的ANN-HMM混合模型稱為CD-DNN-HMM。與傳統的GMM-HMM相比,性能有了重大的提升。
在CD-DNN-HMM中,對于所有的狀態,我們只訓練一個完整的DNN來估計狀態的后驗概率,這與傳統的GMM是不同的,因為GMM框架下,我們會使用多個不同的GMM對不同的狀態建模。除此之外,典型的DNN輸入不是單一的一幀,而是一個2ω+1幀大小的窗口特征,這使得相鄰幀的信息可以被有效的利用。
CD-DNN-HMM的解碼
這里一定要說明的一點是,我們想一下,HMM對于符號發射概率分布的要求是什么?是給定某狀態的前提下,產生某輸出符號的概率。再考慮一下GMM是怎么做的,是每個狀態給了一張GMM分布圖,再根據輸出符號,就能找到給定某狀態的前提下,產生某輸出符號的概率。但是DNN不一樣,上面也說了,DNN的輸入是一個多幀的語音向量,輸出是不同狀態的概率,也即與HMM的要求相反,DNN描述的是,給定某輸出符號的前提下,該輸出符號是由某個狀態產生的概率。所以我們就需要通過貝葉斯公式將DNN計算出來的這個似然度轉為HMM需要的后驗概率。
HMM要的是后驗概率,也就是式子左邊的,給定狀態下,某輸出符號的概率,DNN給的是式子右側加粗的似然度,所以我們通過上式得到后延概率。P(Ot1)是語音向量出現的概率,與字詞序列無關,這里可以忽略。P(St1)是某狀態的先驗概率,在緩解標注不平衡問題中是非常重要的,特別是訓練句中包含很長靜音段時就更是如此。
由CD-DNN-HMM最終解碼出的字詞序列需要同時考慮到聲學模型和語言模型的概率,通過權重系數λ去平衡二者之間的關系。語言模型的概率由其它訓練方法根據訓練語料得出,而聲學模型的概率,是所有狀態轉移概率以及符號發射概率的乘積。
CD-DNN-HMM的訓練
訓練CD-DNN-HMM的第一步通常就是使用無監督的訓練數據訓練一個GMM-HMM系統,因為DNN訓練標注是由GMM-HMM系統采用維特比算法產生得到的,而且標注的質量會影響DNN系統的性能。(我們知道,訓練GMM-HMM采用EM算法,只需給定觀察序列,而不需給定標注結果,而DNN需要相應的標注結果)
這里先詳細的講一下涉及到的語音學的知識。
語音是一個連續的音頻流,它是由大部分的穩定態和部分動態改變的狀態混合構成。
一個單詞的發聲(波形)實際上取決于很多因素,而不僅僅是音素,例如音素上下文、說話者、語音風格等;
協同發音(指的是一個音受前后相鄰音的影響而發生變化,從發聲機理上看就是人的發聲器官在一個音轉向另一個音時其特性只能漸變,從而使得后一個音的頻譜與其他條件下的頻譜產生差異。)的存在使得音素的感知與標準不一樣,所以我們需要根據上下文來辨別音素。將一個音素劃分為幾個亞音素單元。如:數字『three』,音素的第一部分與在它之前的音素存在關聯,中間部分是穩定的部分,而最后一部分則與下一個音素存在關聯,這就是為什么在用HMM模型做語音識別時,選擇音素的三狀態HMM模型。(上下文相關建模方法在建模時考慮了這一影響,從而使模型能更準確地描述語音,只考慮前一音的影響的稱為Bi-Phone,考慮前一音和后一音的影響的稱為 Tri-Phone。)
有時候,音素會被放在上下文中考慮,這樣就形成了三音素或者多音素。但它與亞音素不同,他們在波形中匹配時長度還是和單一音素一樣。只是名字上的不同而已,所以我們更傾向于將這樣的多音素稱為senone。一個senone的上下文依賴比單純的左右上下文復雜得多,它是一個可以被決策樹或者其他方式來定義的復雜函數。(英語的上下文相關建模通常以音素為基元,由于有些音素對其后音素的影響是相似的,因而可以通過音素解碼狀態的聚類進行模型參數的共享。聚類的結果稱為senone。決策樹用來實現高效的triphone對senone的對應,通過回答一系列前后音所屬類別(元/輔音、清/濁音等等)的問題,最終確定其HMM狀態應使用哪個senone。分類回歸樹CART模型用以進行詞到音素的發音標注。)
在實際應用中,senone的聲學模型就是三態高斯混合模型。簡單的說,它就是一個最有可能的特征向量。
一旦訓練好GMM-HMM模型hmm0,我們就可以創建一個從狀態名字到senoneID的映射,前面也提到了,從狀態到senone的映射并不簡單,因為每個邏輯三音素是由聚類后的一系列物理三音素代表的。
然后我們利用hmm0采用維特比算法生成一個狀態層面的強制對齊,以生成從特征到senoneID的映射對,為DNN提供標注好的訓練數據。
上下文窗口的影響
我們前面提到,DNN的輸入是一個長為2ω+1(典型的是9到13)幀大小的窗口特征,這樣引入了相鄰幀,DNN也可以對不同特征幀之間的相互關系進行建模,這樣部分緩和了傳統的HMM無法滿足輸出獨立性假設的問題。
CD-DNN-HMM的關鍵模塊
一系列的實驗成果表明,CD-DNN-HMM相較于GMM-HMM,帶來性能提升的三大關鍵因素是:
- 使用足夠深的深度神經網絡
- 使用一長段幀作為輸入
- 直接對三音素進行建模,使用三音素是性能提升的最大單一來源
傳統的DNN是采用softmax作為輸出層,我們也可以將softmax層換成KL距離,KL距離就是我們在上篇中提到的相對熵,用于度量兩種概率分布之間的差異。
這里要著重的講一下softmax了,雖然在《淺談深度學習基礎》中簡答的提到過softmax層起到了歸一化,便于計算概率的作用,但softmax遠不止這么簡單。
首先softmax是對數似然度,是一種對數線性模型。而且softmax就是最大熵模型的結果,學習softmax層的參數過程就等同于在輸出層前一層給定特征的基礎上訓練一個最大熵模型。且多類分類問題的目標函數常常選cross-entropy,而cross-entropy loss(交叉熵損失函數) 在形式上與softmax有特別的契合關系,PRML里面講,cross-entropy loss是softmax的 canonical link function。
另外SVD這種低秩近似的方法可以用來加速訓練和解碼,能夠減小模型的規模以及2/3的解碼時間。
深度神經網絡序列鑒別性訓練
傳統DNN進行多分類問題時通常采用交叉熵損失函數,它能夠獨立的處理每一幀語音向量,但是,語音識別本質上是一個序列分類問題,DNN的輸入也是一長段幀,所以我們需要引入一些更契合這種問題的序列鑒別性訓練方法,比如常用的最大互信息(MMI)、增強型最大互信息(BMMI)、最小音素錯誤(MPE)和最小貝葉斯風險訓練準則(MBR)。
這里簡單介紹一下這幾種方法的基本思想,語音識別中使用的最大互信息(MMI)準則旨在最大化單詞序列分布和觀察序列分布的互信息。增強型MMI是MMI準則的一個變種,它增強了錯誤較多的路徑的似然度。最小音素錯誤和狀態級最小貝葉斯風險都旨在最小化不同顆粒度標注下的期望錯誤。比如,MPE準則旨在最小化期望音素錯誤,而狀態級貝葉斯風險(sMBR)旨在最小化狀態錯誤的統計期望。
序列鑒別性訓練準則的形式可以有很多,如果準則被形式化成最大化的目標方程,我們可以通過乘以-1來使其成為一個最小化的損失函數。這樣損失函數可以被永遠形式化為兩個詞圖的值的比率:代表參考標注的分子詞圖和代表與之競爭的解碼輸出的分母詞圖。
這里我們介紹一下詞圖(lattice),詞圖本質上是一個有向無環(directed acyclic graph)圖。每個詞網格包含一個開始結點以及一個結束結點,即在每個詞網格中,僅存在一個入度(in-degree)為0的節點和一個出度(out-degree)為0的節點。我們也一般采用詞圖來保存識別的候選序列。
深度神經網絡中的特征表示學習
在傳統的淺層模型中,特征工程師系統成功的關鍵。從業者的主要工作就是構建特定任務上,對特定學習算法表現良好的特征。系統的提高通常來自具有某個強大領域知識的人發現了一個更好的特征,典型的例子包括廣泛用于圖像識別的尺度不變特征轉換(SIFT)和用于語音識別任務的梅爾倒譜系數(MFCC)。
然后像深度神經網絡這樣的深度模型,不需要手工定制的高級特征。相反,它們可以自動聯合學習特征表示和分類器。
前面也說了,softmax層,本質上是一個簡單的對數線性分類器,或者有時也被稱作最大熵模型。因此,DNN生成后驗概率的過程也可以被認為是一個兩步非隨機過程,第一步,通過L-1層的非線性變換,觀察向量被轉換成一個L-1層隱神經元個數維的特征向量。第二步,在給定轉換好的特征向量后,根據這個特征向量訓練一個最大熵模型。
在傳統的最大熵模型中,特征是人為設計的,人工的特征構建適用于一些人們容易觀察和知道什么特征可以被使用的任務,而不適合那種原始特征高度可變的任務。然而在深度神經網絡中,特征是由前L-1層定義的,并且最終根據訓練數據通過最大熵模型聯合學習得到。這樣不僅消除了人工特征構建過程中的繁瑣和錯誤,而且通過許多層的非線性變換,具有提取不變的和鑒別型特征的潛力,這種特征幾乎是不可能由人工構建的。
在深度神經網絡中,離輸入層越近的隱層表示越低層的特征,離輸出層越近的隱層表示更高層的特征。越低層的特征通常能抓住局部模式,同時這些局部模式對輸入特征的變化非常敏感。但是,更高層的特征因為建立在低層特征之上,顯得更加抽象和對輸入特征的變化更加具有不變性。
一般來說,特征是在分層深度模型中按階段處理的,每一個階段都可以被看作以下幾個可選步驟:歸一化、濾波器組處理、非線性處理和池化。
典型的歸一化技術包括均值消除、局部差異歸一化和方差歸一化;濾波器組處理的目的是把特征投影到一個更高的維度空間以便分類會更加容易,這可以通過維度擴充或者特征投影得到;非線性處理是在深度模型里非常關鍵的一個步驟,因為線性變換的組合僅僅是另外一個線性變換,常用的非線性函數包括稀疏化、飽和、側抑制、雙曲正切、sigmoid和maxout;池化步驟引入了聚集和聚類,其目的是為了提取具有不變性的特征和降低維度。
在GMM框架下,通常使用對角協方差矩陣以減少模型參數,此時(若M=1)要求輸入特征的每維相互獨立。但是DNN是判別模型,沒這種獨立性假設。
一個好特征的重要性質就是它對變化的魯棒性,在語音信號中有兩種主要的變化類型:說話人變化和環境變化。在傳統的GMM-HMM中,這兩種類型的變化都需要被明確處理。
先是對說話人變化的魯棒性,主要有兩種方法,聲道長度歸一化(vocal tract length normalization,VTLN)和特征空間最大似然線性回歸(feature-space maximum likelihood linear regression,fMLLR)。
有這樣一個事實,聲道中的共振峰位置大體上是按照說話人的聲道長度單調的變化的,所以VTLN通過引入扭曲因子來實現聲道長度歸一化。
另一方面,fMLLR是一種作用于特征向量之上的仿射變換,其目的是使變換后的特征更好地適應模型。
對環境變化的魯棒性也有相應的向量泰勒級數(VTS)自適應和最大似然線性回歸、歸一化輸入特征或者自適應模型參數。
除了這兩者之外,還有對噪聲的魯棒性,其對應的方法有噪聲自適應訓練(noise adaptive training,NAT);還有對語速變化的魯棒性。
而對于DNN,輸入數據中的小擾動會隨著我們轉移到更高層次內在表達的過程中逐漸收縮。但也只能是小擾動,如果存在足夠大的偏移,DNN不能準確地對它們進行分類。
比如一個單獨的系統如果能夠同時識別8kHz采樣率錄音的窄帶語音信號和16kHz采樣率錄音的寬帶語音信號,那將會是很有優勢的。
我們可以通過利用混合帶寬的訓練數據,讓DNN學習出寬帶和窄帶輸入特征的不同應當與識別結果不相關這一特性。寬窄帶的變化在多層的非線性轉換中被抑制。
深度神經網絡和混合高斯模型的融合
在使用淺層的多層感知機時期,就有文獻提出了Tandem方法,它通過使用從一個或多個神經網絡中衍生出來的特征來擴展GMM-HMM系統中的輸入向量。換句話說,就是在GMM-HMM中使用由神經網絡自主學習出來的特征。
還有文獻提出,要使用瓶頸隱層(隱層節點個數比其他隱層的少)的輸出作為特征的方法來代替直接使用神經網絡的輸出特征向量。因為隱層的大小的選擇是獨立于輸出層大小的,這個方法提供了訓練目標維度和擴展的特征維度之間的靈活性。而且瓶頸隱層在網絡中建立了一個限制,將用于分類的相關信息壓縮成一個低維度的表示。
提到這個『將用于分類的相關信息壓縮成一個低維度的表示』,RBM和稀疏自編碼器也能起到類似的作用,也可以被視為一種非線性的維度下降的方法。然而,因為從自動編碼器中學習到的瓶頸特征對識別任務沒有針對性,這些特征通常不如從那些用于進行識別的神經網絡的瓶頸層提取出的特征有區分性。
不過DNN中提出的特征的維度通常非常高,我們可以使用主成分分析(PCA)來減少特征的維度?;蛘呖梢灾苯訙p少最后一個隱層的大小,將其改造成一個瓶頸層。這里搞來一張示意圖:
但是我們很難知道哪一層隱層可以提取最好的特征,同樣,添加更多的隱層對性能是否有幫助也很難得知。
DNN-HMM混合系統與采用深度特征的GMM-HMM系統相比,性能幾乎相等,在實際中,CD-DNN-HMM系統運用起來更簡單。而且GMM可以被一個擁有非常寬的隱層,同時隱層與輸出層連接很稀疏的單隱層神經網絡建模。
由傳統的GMM-HMM系統產生的識別錯誤和由DNN-HMM系統產生的錯誤往往是不一樣的,這使得通過融合GMM-HMM和DNN-HMM的結果可以獲得全局的性能提高。最廣泛的系統融合技術包括識別錯誤票選降低技術、分段條件隨機場、基于最小貝葉斯風險的詞圖合并。
然后就是多流語音識別,目前最好的語音識別系統中固定分辨率(包括時域和頻域)的前端特征處理方法是權衡后的一種結果,這使得很多現象不能很好地被建模,比如CD-DNN-HMM的系統性能當說話速度很快或很慢時會顯著下降。一個可能的解決方法是采用多流系統,這種方法可以同時容納多個時間和頻率的分辨率。
常用的多流語音識別架構也有三種,一種是所有流的特征合并在一起,然后使用一個單獨的DNN-HMM來生成結果。第二種是,每個流的特征先獨立使用分隔的DNN,然后再中阿金的一個集成層進行集成,集成之后的特征隨后輸入一個單獨的DNN-HMM生成最后的結果。第三種是,每個獨立流的解碼結果融合得到最終的解碼結果。
深度神經網絡的自適應技術
與其它機器學習技術一樣,在深度神經網絡中有一個假設是,訓練數據和測試數據服從一個相同的概率分布,但實際上,這個假設是很難滿足的。
訓練-測試的不匹配問題可以通過自適應技術來解決,前面已經提過了GMM-HMM框架下的自適應方法,來保證對說話人、環境、噪音、語速等的魯棒性。但GMM是一個生成性模型,DNN是一個鑒別性模型,因為這個原因,DNN需要與GMM框架下不同的一些自適應方法。
DNN的自適應技術可以被分成三類:線性變換、保守訓練和子空間方法。
線性變換的想法是,在輸入特征、某個隱層的激活或者softmax層的輸入處加上一個說話人或者環境相關的線性變換,通過一個線性變換,說話人相關的特征可以與說話人無關的DNN模型向匹配。
線性變換的常見方法有三種,第一種是線性輸入網絡(LIN),線性變換被應用在輸入的特征上;第二種是線性輸出網絡(LON),在最后一個隱層上對一個特別的說話人使用一個線性變換,可以被放在softmax層的權重之前,也可以放在之后;第三種是線性隱層網絡(LHN),線性變換被用在隱層中,而且同樣的可以被用在原始權重矩陣之后或之前。而且前面也提到過,一個DNN的任意一個隱層都可以被劃分成兩部分,:包括輸入層的那一部分加上隱層可以被視為一個變換后的特征;包含輸出層的部分可以視作作用在隱層特征上的分類器。
LIN、LON、LHN雖然非常相似,但它們在參數數量和特征上還有微小的不同,而且性能是任務相關的。
然后是保守訓練,保守訓練是為了避免線性變換等其它自適應方法出現過擬合,破壞之前學到的信息,我們可以通過添加正則項做到這一點。保守訓練中最常使用的正則項是L2正則項和KLD正則項。
L2正則項之前詳細講過,這里主要提一下KL距離(KLD)正則項。KL距離正則項方法的直觀解釋是,從自適應模型中估計出的senone后驗概率不應和從未自適應模型中估計出的后延概率差別太大。而且我們知道KL距離/相對熵就是描述兩種概率分布之間的差異的,所以我們把KLD添加到損失函數里去一起被最小化,就能限制兩種概率分布之間的差異不至于過大。
L2正則項限制的是模型參數自身,而非輸出概率,但我們在意的是輸出概率而不是模型參數自身,所以KLD正則項的表現不會比L2正則項更差。
保守訓練只能減輕在自適應過程中的過擬合問題,但并不能解決對每個說話人都要存儲一個巨大的自適應模型的問題。我們可以采用SVD分解,并舍棄掉部分過小奇異值的方法來對模型大小進行壓縮。
然后我們還有子空間方法,我們可以通過PCA構建一個足夠大的說話人空間,每個新的說話人可以由特征向量的線性組合來表示,而且我們也可以通過丟棄特征向量中方差小的向量來控制。
還有一些子空間方法明確的從句子中估計噪聲或者說話人信息,并把這些信息輸入網絡中,希望DNN訓練算法能夠自動理解怎樣利用噪聲、說話人或者設備信息來調整模型參數。
說話人信息的估計可以完全獨立于DNN訓練,也即從一個獨立的DNN中學習得到,有文獻提出了i-vector方法,i-vector方法是在說話人確認以及識別中流行的一種技術,它在低維固定長度中壓縮表示了說話人特征最重要的信息,這對于ASR中的說話人自適應來說是一個非常理想的工具。
深度神經網絡中的表征共享和遷移
這部分簡單的介紹一下多任務學習和遷移學習,在深度神經網絡(DNN)中,每個隱藏層都是輸入DNN的原始數據的一種新特征表示(表征),較高層次的表征比較低層次的表征更抽象,我們可以通過多任務學習和遷移學習將這些表征共享和遷移到相關的任務。
多任務學習(Multitask learning,MTL)是一種旨在通過聯合學習多個相關的任務來提高模型泛化能力的機器學習技術,這些相關的任務需要在一定抽象層次上可以共享一部分表征。MTL可以為每個任務增加訓練數據量,而且有助于任務間遷移知識。
圖中畫紅圈的隱層就被三個任務所共享。
遷移學習致力于通過保持和利用從一個或多個相似的任務、領域或概率分布中學習到的知識,來快速并有效地為一個新的任務、領域或概率分布開發一個有較好性能的系統,DNN得益于隱藏層所表示的更加抽象和更具不變性的特征,所以非常適合遷移學習。
經實驗驗證,不僅法語DNN的隱層所表示的特征變換可以有效地遷移以識別美式英語語音,而且歐洲語言到中文普通話的遷移學習也是有效的。不過標注信息是非常有必要提供的。
在語音識別中,多任務學習還有其他應用場景,比如通過同時學習數字分類、噪聲語音增強和說話人性別識別任務來訓練神經網絡,提高噪聲環境下數字識別的性能。給DNN選擇添加合適的輔助任務,網絡能夠在不同的任務中利用公共的結構去學習一個具有更好泛化能力的模型,比如同時識別音素和字素。
而且,受人類語言感知的雙模態原理(視覺和聽覺)的啟發,還可以同時為DNN提供音頻和圖像,大概是唇語識別。
循環神經網絡及相關模型
RNN和LSTM之前的文章也簡要的提過。
我們在上文中,提到GMM-HMM無法對語音的動態特性進行建模,因此有了HMM的若干種變種,以求捕捉更多現實的語音在時域中的動態屬性的統計模型,比如隱藏動態模型、軌跡分段模型等等。
同樣的,DNN-HMM方法也并沒有對語音的動態特性進行建模,所以人們考慮引入RNN,在時間維度上使用一個帶時間延遲的循環結構使網絡擁有了記憶結構,通常表示為一個內部狀態。RNN所使用的狀態空間使得它可以表示和學習常見時間范圍內序列的相關性。
首先RNN本身就是一個深度模型,而且RNN如果在時間上進行展開,可以建立一個和輸入語音句子長度一樣層數的深度模型。
RNN的訓練主要依靠延時反向傳播算法(BPTT),它是經典反向傳播算法(BP)的一個拓展,用于學習循環神經網絡隨著時間展開網絡的權重矩陣和通過時間順序回傳錯誤信號,BP中對統一訓練幀t時刻的多個堆積隱層,被替換成T個跨越時間的相同單一隱層。
這里其實還有幾個點,但是難度較大,這里列出來,有機會再回來補,BPTT、回聲狀態性質、狀態緊縮、梯度消失的充分條件、梯度爆炸的必要條件、原始對偶法、拉格朗日算子。
計算型網絡
這里簡單介紹一下什么是計算型網絡(computational network,CN),計算型網絡是一種描述任意學習機的整合框架,比如DNN、CNN、RNN、LSTM、邏輯回歸和最大熵模型等。一個CN是一個有向圖,其中的每個葉子節點代表一個輸入值或者一個參數,每個非葉子節點表示一個在它的子節點上的矩陣操作。
在主要的機器學習模型中,例如DNN、CNN、RNN有一個常見的屬性:所有的這些模型都可以被描述成一系列的計算步驟,如果我們知道如何計算每一步和每一步計算的順序,就有了一個神經網絡的實現。該觀察表明,我們可以在計算型網絡的框架下統一所有這些模型,其中部分模型就已經實現在Theano、Tensorflow、CNTK這些工具中實現了。
CN給我們提供了描述任意網絡時更大的便利性,并且允許我們在同樣的聯合框架里構建幾乎所有我們感興趣的模型。比如我們可以很容易的修改某神經網絡,比如以ReLU代替Sigmoid,或者自定義的去建立一個共享模型參數的網絡。
總結以及未來研究方向
在語音識別中應用神經網絡可以追溯到20世紀80年代,比如ANN/HMM、時間延遲神經網絡(TDNN),但是效果一直無法與優化后的GMM-HMM相比,后來CD-DNN-HMM被提出了,效果遠好于GMM-HMM。
CD-DNN-HMM商用的第一個問題就是解碼速度的問題,如果使用簡陋的實現,在單個CPU核上計算DNN的聲學分數需要3.89倍的實時時間,后來,Google采用了量化、SIMD指令、批量化和延遲計算等技術后,DNN的計算時間相應的降到了0.21倍的實時時間。
然后第二個問題是訓練速度,盡管訓練309小時的CD-DNN-HMM的表現已經比2000小時訓練數據上訓練出來的CD-GMM-HMM系統表現更好,但仍然無法令人滿意,為了進一步提高訓練速度,一些并行的訓練算法被開發出來,而且異步隨機梯度下降算法也被應用來提高訓練速度。2013年,低秩近似算法被提出,用較小的矩陣的乘積來近似較大的矩陣,可以用于加速訓練和解碼,可以減少2/3的解碼時間,而且簡單有效,已被廣泛應用于商用語音識別系統中。
然后是序列鑒別性訓練被提出,因為交叉熵損失函數是幀級別的,如果采用序列鑒別性訓練準則明顯可以低風險的提高語音識別的準確率。
GMM本身不能轉換特征,在傳統的GMM系統中,特征的處理需要包含很多步驟,但是人們開始發現,對于DNN系統來說,很多特征處理步驟都是無足輕重的。人們解釋為,所有DNN的隱層都可以認為是一個強大的非線性特征轉化器,而softmax層是基于前一隱層表征的分類器。特征轉化和分類之間可以交叉優化。而且DNN可以將相關輸入中很多在GMM系統中不能直接使用的特征用起來。
然后是自適應,當CD-DNN-HMM被提出時,有人擔心它缺少有效的自適應技術,為了處理這個問題,特征鑒別性線性回歸自適應技術被提出,而且后續還有加KLD正則項的保守訓練,還有各種噪聲感知訓練(NaT)、說話人感知訓練(SaT)被提出,i-vector也被提出了,可以將說話人最重要的特征壓縮表示到一個低維固定長度。
然后是多任務和遷移學習,人們發現有些可以共享相似表征的任務可以共享隱層隱層結構,發現通過添加合適的輔助任務可以提高模型的泛化性,而且還可以通過遷移學習利用相似任務的隱層結構。
再然后是RNN和LSTM,這種結構可以更好的考慮音頻在時域上的動態特性,可以更充分有效的利用歷史信息。
現在的語音識別技術還有很多亟待提高的場景:
- 遠場麥克風語音識別
- 高噪音環境下語音識別
- 帶口音的語音識別
- 不流利的自然語音,變速或帶有情緒的語音識別
- 多人語音或背景交談的語音識別
《淺談語音識別基礎》至此結束,其實這篇文章我自己是很不滿意的,尤其是后面RNN的性質、訓練以及CN這兩部分,根本沒有深入進去,都是淺嘗輒止。一個是因為我參考的這本《解析深度學習:語音識別實踐》可以講是一本需要較豐富經驗才可以流暢理解的資料,而且這兩塊內容的其他相關資料極少,無法對比參考,如果一篇篇英文論文去研究又太耗時間,也與我自身產品經理的定位不符,所以就只好僅做簡單的介紹。對于想通過閱讀這篇文章來增進理論水平的技術人員(如果還真有的話),我感到十分抱歉,也非常慚愧。