語音辨識概述
語音辨識是指將語音訊號轉換為文字的過程。現在通行的語音辨識系統架構如圖:
訊號處理模組將根據人耳的聽覺感知特點,抽取語音中最重要的特徵,將語音訊號轉換為特徵向量序列。現行語音辨識系統中常用的聲學特徵有線性預測性編碼(Linear Predictive Coding,LPC),梅爾頻率倒譜係數(Mel-frequency Cepstrum Coefficients,MFCC),梅爾標度濾波器組(Mel-scale Filter Bank,FBank)等。
解碼器(Decoder)根據聲學模型和語言模型,將輸入的語音特徵向量序列轉化為字元序列。
聲學模型是對聲學、語音學、環境的變數,以及說話人性別、口音的差異等的知識表示。語言模型則是對一組字序列構成的知識表示。 模型的訓練
現代的語音辨識系統中聲學模型和語言模型主要利用大量語料進行統計分析,進而建模得到。 聲學模型
語音辨識中的聲學模型充分利用了聲學、語音學、環境特性以及說話人性別口音等資訊,對語音進行建模。目前的語音辨識系統往往採用隱含馬爾科夫模型(Hidden Markov Model,HMM)建模,表示某一語音特徵向量序列對某一狀態序列的後驗機率。隱含馬爾科夫模型是一種機率圖模型,可以用來表示序列之間的相關關係,常常被用來對時序資料建模。
隱含馬爾科夫模型是一種帶權有向圖,圖上每一個節點稱為狀態。每一時刻,隱含馬爾科夫模型都有一定機率從一個狀態跳轉到另一個狀態,並有一定機率發射一個觀測符號,跳轉的機率用邊上的權重表示,如圖所示, S0 和 S1 表示狀態, a 和 b 是可能發射的觀測符號。
隱含馬爾科夫模型假定,每一次狀態的轉移,只和前一個狀態有關,而與之前之後的其它狀態無關,即馬爾科夫假設;在每一個狀態下發射的符號,只與目前狀態有關,與其它狀態和其它符號沒有關係,即獨立輸出假設。
隱含馬爾科夫模型一般用三元組 λ=(A,B,π) 表示,其中 A 為狀態轉移機率矩陣,表示在某一狀態下轉移到另一狀態的機率;B 為符號機率矩陣,表示在某一狀態下發射某一符號的機率;π 為初始狀態機率向量,表示初始時處在某一狀態的機率。
隱含馬爾科夫模型可以產生兩個隨機的序列,一個是狀態序列,一個是觀測符號序列,所以是一個雙重隨機過程,但外界只能觀測到觀測符號序列,不能觀測到狀態序列。可以利用維特比演算法(Viterbi Algorithm)找出在給定觀測符號序列的條件下,發生機率最大的狀態序列。對於某一觀測符號序列的機率,可以通過前向後向演算法(Forward-Backward Algorithm)高效地求得。每一個狀態的轉移機率和觀測符號發射機率可以通過鮑姆—韋爾奇演算法(Baum-Welch Algorithm)計算得到。
語音辨識中一般使用隱含馬爾科夫模型對聲學單元和語音特徵序列之間的關係建模。一般來說,聲學單元層級較小,其數量就少,但對內容相關的敏感性則會大。大詞彙量連續語音辨識系統中一般採用子詞(Sub-word)作為聲學單元,如在英語中採用音素,漢語中採用聲韻母等。
聲學模型中隱含馬爾科夫模型的拓撲結構一般採用從左向右的三狀態結構,每一個狀態上都有一個指向自身的弧,如圖所示,表示利用三狀態模型對音素 / t / 的建模 。
由於連續語音中具有協同發音的現象,故需要對前後三個音素共同考慮,稱為三音子(Triphone)模型。引入三音子後,將引起隱含馬爾科夫模型數量的急劇增加,所以一般會對狀態進行聚類,聚類後的狀態稱為 Senone。
語音辨識任務中的聲學特徵向量取值是連續的,為了消除量化過程造成的誤差,所以考慮使用連續機率密度函數來對特徵向量對狀態的機率進行建模。混合高斯模型(Gaussian Mixture Models,GMM)可以對任意的機率密度函數進行逼近,所以成為了建模的首選。
鄧力等將深度學習引入語音辨識的聲學建模中,用深度神經網路對聲學特徵向量和狀態的關係進行建模 ,極大地提升了語音辨識的準確率,此後深度學習在語音辨識聲學建模上的應用開始蓬勃發展,如利用聲學特徵向量上下文關係的迴圈神經網路(Recurrent Neural Networks,RNN)及其特殊情況長短時記憶網路(Long Short-term Memory,LSTM)等。 語言模型
語言模型可以表示某一字序列發生的機率。語音辨識中常用的語言模型是 N 元文法(N-Gram),即統計前後 N 個字出現的機率。N 元文法假定某一個字出現的機率僅與前面 N-1 個字出現的機率有關係。
設現在有一字序列 W=(w1,w2,w3,⋯,wU) ,則其發生機率可以被分解為如下形式:
P(W)=P(w1,w2,w3,…,wn)=P(w1)P(w2|w1)P(w3|w1,w2)…P(wn|w1,w2,w3,…,wn−1)
但是,這樣的機率無法統計。根據馬爾科夫假設,則只需考慮前 N 個字元發生條件下的機率即可。假設 N=2 則有
P(W)=P(w1)P(w2|w1)P(w3|w2)…P(wn|wn−1)
再根據貝葉斯公式,可以得出某一個字在另一個字的條件下發生的機率
P(wn|wn−1)=P(wn,wn−1)P(wn−1)
由此,在大量的語料中統計出相鄰的字發生的機率,再統計出單個字出現的機率,即可。
由於必然會有一些生僻片語在語料中未曾出現,但其也存在著發生的機率,所以需要演算法產生這些生僻片語的機率,即平滑。常用的平滑方式有古德-圖靈平滑(Good-Turing Soothing)和卡茨平滑(Katz Smoothing)等。
基於加權有限狀態轉換器的解碼
語音辨識中的“解碼”問題可以表示為如下過程:對於一個長度為T的給定的聲學觀測
(acoustic observation)序列 X=(x1,x2,x3,⋯,xT) ,求出一個長度為U的對應的字( word )序列 W=(w1,w2,w3,⋯,wU) ,使得後驗機率 P(W|X) 最大化,即求得字序列 W ,有
W^=argmaxP(W|X)
後驗機率 P(W│X) 不易直接求得。根據貝葉斯公式可得:
W^=argmaxP(W|X)=argmaxP(X|W)P(W)P(X)
由於聲學觀測序列已經給定,所以聲學觀測的機率是常數,故可以歸約為如下形式:
W^=argmaxP(W|X)=argmaxP(X|W)P(W)
目前一般採用的大詞彙量語音辨識技術,會將聲學、語音學以及語言學的知識引入進系統中去。用 H 表示隱含馬爾科夫模型的狀態序列,C 表示上下文相關的音素序列,L 表示音素序列,並假設聲學特徵序列、隱含馬爾科夫模型的狀態序列、音素序列、字序列之間是獨立的,可以將式子展開,得:
W=argmax∑H∑C∑LP(X|H)P(H|C)P(C|L)P(L|W)P(W)
式 子中, P(X|H) 稱為聲學模型,表示聲學特徵序列對隱馬爾科夫狀態序列的後驗機率; P(H│C) 、 P(C│L) 和 P(L│W) 分別表示狀態序列對上下文相關的音素序列、上下文相關的音素序列對音素序列,以及音素序列對字序列的後驗機率; P(W) 表示句子發生的機率,稱為語言模型。這些機率都是由前面的“訓練”過程得到的。
目前,語音辨識的解碼一般基於加權有限狀態轉換器(Weighted Finite State Transducer)進行。
加權有限狀態轉換器是一種賦權有向圖,其每一個節點表示一個“狀態”,當接受到一個輸入符號以後,就會由對應的弧跳轉到另一個“狀態”,並“發射”一個輸出符號,弧上還可以賦予權值。其形式化描述如下:
半環K上的加權有限狀態轉換器T是一個八元組 T=(Σ,Δ,Q,I,F,E,λ,ρ) ,其中 Σ 為輸入符號集合, Δ 為輸出符號集合, Q 為狀態集合, I , Q 為初始狀態集合, F , Q 為終止狀態集合,五元關係 E⊆Q×(Σ∪ϵ)×(Δ∪ϵ)×K×Q 表示轉移函數,映射 λ:I→K 表示初始狀態的權值,映射 ρ:F→K 表示終止狀態的權值 。
為了擴大加權有限轉換器的適用範圍,將“權重”的含義推廣到更一般的代數結構——半環上去。給定集合K及其上的兩種運算 ⊕ 和 ⊗ ,如果 (K,⊕,0¯) 為帶有單位元 0¯ 的交換么半群, (K,⊗,1¯) 為帶有單位元 1¯ 的么半群,且 ⊕ 運算對於 ⊗ 運算具有分配性, 0¯ 對於 ⊗ 運算為零化子,即對於任意的 a⊆K 有 a⊗0¯=0¯⊗a=0¯ 。於是,由首狀態到末狀態“路徑”上各個弧的總權重,可以由 ⊗ 運算求“積”得到,而多條路徑的總權重,則可以由 ⊕ 求和得到。下圖表示了一個簡單的加權有限狀態轉換器。其輸入符號集為 {a,b,c} ,在圖中表示為弧上冒號前的符號,輸出符號集為 {x,y,z} ,在圖中表示為弧上冒號後的符號,半環為實數域,在圖中表示為斜線後的數,雙圓圈表示終止狀態。
在語音辨識中,路徑的總權重可以看作在輸入序列的條件下,輸出序列的聯合機率,又因為馬爾科夫鏈的無後效性假設,所以總權重可以看作路徑上權重的乘積。由於電腦運算,需要防止浮點數的下溢,這些機率常常取對數,即表 中對數半環,其中 ⊕log 運算的定義為 x⊕logy=−log(e−x+e−y) ;又由於語音辨識中常需要在加權有限狀態轉換器上尋找權值最優的路徑,故定義了熱帶半環。
半環 集合 ⊕ ⊗ 0¯ 1¯ 對數半環(Log) R∪{−∞,+∞} ⊕log + +∞ 0 熱帶半環(Tropical) R∪{−∞,+∞} Min + +∞ 0
可以利用加權有限狀態轉換器的組合(composition)操作,將不同層次的加權有限狀態轉換器合并起來。比如,在實際的語音辨識系統中,一般會構建四個加權有限狀態轉換器:表示隱含馬爾科夫模型狀態序列到上下文相關音素序列映射的H,表示上下文相關音素序列到音素序列映射的C,表示音素序列到字序列的L,以及語言模型G,將此四個加權有限狀態轉換器組合,形成HCLG,其對應著語音學和語言學的知識,其上弧的權重,可以看作輸入隱含馬爾科夫模型狀態,輸出對應的字發生的機率。
聲學模型P(X|H) 根據訓練得出。將一句語音輸入訓練好的網路前饋以後,得到一個矩陣,其列表示幀數,行表示此幀對隱含馬爾科夫模型狀態的機率分布,即一個某幀對某隱含馬爾科夫狀態的機率查詢表。
於是,語音辨識的解碼問題可以歸結為在加權有限狀態轉換器 HCLG 的最優路徑搜尋問題,只是路徑的總權值除了要考慮 HCLG 弧上的權值以外,還要考慮聲學模型的權值,令總權值最大化。
根據帶權有向非循環圖單源最短路徑演算法 ,考慮到事實“對於圖的最短路徑上的某一節點u,若其在此路徑上的前驅為σ,則σ必然在源點到u的最短路徑(之一)上”,可以使用由源點開始,逐層構建最短路徑樹的方法進行。實際系統中,由於搜尋圖的龐大,為了減少對電腦記憶體的消耗,常使用啟發學習法的波束搜尋(Beam Search)技術,即設定一個閾值,在搜尋樹中保留閾值範圍內的路徑,裁剪掉閾值範圍以外的路徑。加權有限狀態轉換器上的解碼過程可以用虛擬碼簡略地描述為
foreach frame:foreach token: if token->cost > cut_off: foreach arc: if arc.weight > cut_off: add arc to tokenelse: delete token
其中,token表示儲存路徑的資料結構,其每一個節點可以儲存弧,以及當前這條路徑的總代價。
在實際的語音辨識系統中,最優路徑不一定與實際字序列匹配,我們一般希望能夠得到得分最靠前的多條候選路徑,即N-best。為了緊湊地儲存候選路徑,防止佔用過多記憶體空間,我們一般採用詞格(Lattice)來儲存識別的候選序列。詞格沒有一般的定義,常用的方法是利用有限狀態自動機的資料結構來構建詞格。
後記:這是我學習語音辨識的一個小結,也是我畢設的一個章節。拿出來給大家看看,有錯誤的地方希望大家不吝賜教。 參考文獻 Huang X, Acero A, Hon H, et al. Spoken Language Processing[J]., 2000. Rabiner L R. A tutorial on hidden Markov models and selected applications in speech recognition[J]. Proceedings of the IEEE, 1989, 77(2): 257-286. Mohri M, Pereira F C, Riley M, et al. Weighted Finite-state Transducers in Speech Recognition[J]. Computer Speech & Language, 2002, 16(1): 69-88.