語音識別

語音識別（speech recognition）技術，也被稱為自動語音識別（Automatic Speech Recognition, ASR）、電腦語音識別（Computer Speech Recognition）或是語音轉文本識別（Speech To Text, STT），其目標是以電腦自動將人類的語音內容轉換為相應的文字。與說話人識別及說話人確認不同，後者嘗試識別或確認發出語音的說話人而非其中所包含的詞彙內容。

語音識別技術的應用包括語音撥號、語音導航、室內設備控制、語音文檔檢索、簡單的聽寫數據錄入等。語音識別技術與其他自然語言處理技術如機器翻譯及語音合成技術相結合，可以構建出更加複雜的應用，例如語音到語音的翻譯。

語音識別技術所涉及的領域包括：信號處理、模式識別、機率論和資訊理論、發聲機理和聽覺機理、人工智慧等等。

## 歷史

早在電腦發明之前，自動語音識別的設想就已經被提上了議事日程，早期的聲碼器可被視作語音識別及合成的雛形。而1920年代生產的「Radio Rex」玩具狗是最早的語音識別器，當這隻狗的名字被呼喚的時候，它能夠從底座上彈出來。最早的基於電子計算機的語音識別系統是由AT&T貝爾實驗室開發的Audrey語音識別系統，它能夠識別10個英文數字。其識別方法是跟蹤語音中的共振峰。該系統得到了98%的正確率。到1950年代末，倫敦學院(Colledge of London)的Denes已經將語法機率加入語音識別中。

1960年代，人工神經網絡被引入了語音識別。這一時代的兩大突破是線性預測編碼Linear Predictive Coding (LPC)，及動態時間規整Dynamic Time Warp技術。

語音識別技術的最重大突破是隱含馬爾科夫模型Hidden Markov Model的應用。從Baum提出相關數學推理，經過Rabiner等人的研究，卡內基梅隆大學的李開復最終實現了第一個基於隱馬爾科夫模型的大詞彙量語音識別系統Sphinx。此後嚴格來說語音識別技術並沒有脫離HMM框架。

2012年，微軟研究院的俞棟和鄧力等人提出了上下文相關的深度神經網路與隱馬爾可夫模型融合的聲學模型（CD-DNN-HMM），性能得到了很大提升。2011 年丹尼爾·波維發布Kaldi語音識別工具包，得到廣泛應用。

近年來，又興起了基於端對端(End-to-End，E2E）的語音識別方案。

儘管多年來研究人員一直嘗試將「聽寫機」推廣，語音識別技術在目前還無法支持無限領域，無限說話人的聽寫機應用。

## 模型

目前，主流的大詞彙量語音識別系統多採用統計模式識別技術。典型的基於統計模式識別方法的語音識別系統由以下幾個基本模塊所構成：

- 信號處理及特徵提取模塊。該模塊的主要任務是從輸入信號中提取特徵，供聲學模型處理。同時，它一般也包括了一些信號處理技術，以儘可能降低環境噪聲、信道、說話人等因素對特徵造成的影響。
- 聲學模型。典型系統多採用基於一階隱馬爾科夫模型進行建模。
- 發音詞典。發音詞典包含系統所能處理的詞彙集及其發音。發音詞典實際提供了聲學模型建模單元與語言模型建模單元間的映射。
- 語言模型。語言模型對系統所針對的語言進行建模。理論上，包括正則語言，上下文無關文法在內的各種語言模型都可以作為語言模型，但目前各種系統普遍採用的還是基於統計的N元文法及其變體。
- 解碼器。解碼器是語音識別系統的核心之一，其任務是對輸入的信號，根據聲學、語言模型及詞典，尋找能夠以最大機率輸出該信號的詞串。

從數學角度可以更加清楚的了解上述模塊之間的關係。首先，統計語音識別的最基本問題是，給定輸入信號或特徵序列$O= \{O_1, O_2, \cdots O_n\}$，符號集（詞典）$\mathcal{W} = \{W_1,W_2,\cdots, W_n\}$，求解符號串$W=W_1,W_2,\cdots,W_k$使得：

$$W = \arg\max P(W|O)$$

通過貝葉斯公式，上式可以改寫為

$$W = \arg\max \frac{P(O|W)P(W)}{P(O)}$$

由於對於確定的輸入串$O$，$P(O)$是確定的，因此省略它並不會影響上式的最終結果，因此，一般來說語音識別所討論的問題可以用下面的公式來表示，可以將它稱為語音識別的基本公式。

$$W = \arg\max P(O|W)P(W)$$

從這個角度來看，信號處理模塊提供了對輸入信號的預處理，也就是說，提供了從採集的語音信號(記為$S$)到特徵序列$O$的映射$\mathcal{O}:S\rightarrow O$。而聲學模型本身定義了一些更具推廣性的聲學建模單元$\mathcal{\mu}=\{u_1,u_2,\cdots,u_m\}$，並且提供了在給定輸入特徵下，估計$P(O|u_k)$的方法。

為了將聲學模型建模單元串$U=u_1,u_2,\cdots,u_l$映射到符號集$\mathcal{W}$，就需要發音詞典發揮作用。它實際上定義了映射$\mathcal{D}:w\in\mathcal{W}\rightarrow U$的映射。為了表示方便，也可以定義一個由$\mathcal{W}$到$U$的全集$\mathcal{U}$的笛卡爾積，而發音詞典$\mathcal{D}$則是這個笛卡爾積的一個子集。並且有：

$$P(W,U) = \left\{ {\begin{array}{*{20}c} {1,(W,U) \in D} \\ {0,(W,U) \notin D} \\ \end{array}} \right.$$

最後，語言模型則提供了$P(W)$。這樣，基本公式就可以更加具體的寫成：

$$W = \arg\max P(W)\cdot P(W,U)\cdot \prod_{u_i\in U}P(O|u_i)$$

對於解碼器來說，就是要在由$\mathcal{W}$,$\mathcal{\mu}$,$u_i$以及時間標度$t$張成的搜索空間中，找到上式所指明的$W$。

## 系統構成

### 聲學特徵

聲學特徵的提取與選擇是語音識別的一個重要環節。聲學特徵的提取既是一個資訊大幅度壓縮的過程，也是一個信號解卷過程，目的是使模式劃分器能更好地劃分。

由於語音信號的時變特性，特徵提取必須在一小段語音信號上進行，也即進行短時分析。這一段被認為是平穩的分析區間稱之為幀，幀與幀之間的偏移通常取幀長的1/2或1/3。通常要對信號進行預加重以提升高頻，對信號加窗以避免短時語音段邊緣的影響。

#### 常用的一些聲學特徵

- 線性預測係數（Linear Predictive Coefficient，LPC）：線性預測分析從人的發聲機理入手，通過對聲道的短管級聯模型的研究，認為系統的傳遞函數符合全極點數字濾波器的形式，從而n時刻的信號可以用前若干時刻的信號的線性組合來估計。通過使實際語音的採樣值和線性預測採樣值之間達到均方差最小LMS，即可得到線性預測係數LPC。對LPC的計算方法有自相關法（德賓Durbin法）、協方差法、格型法等等。計算上的快速有效保證了這一聲學特徵的廣泛使用。與LPC這種預測參數模型類似的聲學特徵還有線譜對LSP、反射係數等等。
- 倒譜係數：利用同態處理方法，對語音信號求離散傅立葉變換DFT後取對數，再求反變換iDFT就可得到倒譜係數。對LPC倒譜（LPCCEP），在獲得濾波器的線性預測係數後，可以用一個遞推公式計算得出。實驗表明，使用倒譜可以提高特徵參數的穩定性。
- 梅爾頻率倒譜係數（Mel-Frequency Cepstral Coefficients，MFCCs）和感知線性預測（Perceptual Linear Predictive，PLP）：不同於LPC等通過對人的發聲機理的研究而得到的聲學特徵，Mel倒譜係數MFCC和感知線性預測PLP是受人的聽覺系統研究成果推動而導出的聲學特徵。對人的聽覺機理的研究發現，當兩個頻率相近的音調同時發出時，人只能聽到一個音調。臨界帶寬指的就是這樣一種令人的主觀感覺發生突變的帶寬邊界，當兩個音調的頻率差小於臨界帶寬時，人就會把兩個音調聽成一個，這稱之為屏蔽效應。Mel刻度是對這一臨界帶寬的度量方法之一。

MFCC的計算首先用FFT將時域信號轉化成頻域，之後對其對數能量譜用依照Mel刻度分布的三角濾波器組進行卷積，最後對各個濾波器的輸出構成的向量進行離散餘弦變換DCT，取前N個係數。PLP仍用德賓法去計算LPC參數，但在計算自相關參數時用的也是對聽覺激勵的對數能量譜進行DCT的方法。

#### 中文聲學特徵

以國語發音為例，我們會將一個字的發音切割成兩個部分，分別是聲母（initials）與韻母（finals）。而在發音的過程之中，聲母轉變至韻母是一個漸進而非瞬間的改變，因此我使用右文相關聲韻母模式（Right-Context-Dependent Initial Final, RCDIF）作為分析方法，可以更精準的辨識出正確的音節（syllable）。

而根據聲母的不同特徵，又可以將聲母分為下面四類：

發音時嘴唇緊閉後，吐出氣流製造出類似爆破的聲音。其聲音震幅變化會先降至極小值後（代表嘴唇緊閉）後在急劇上升，而端視是否有持續送氣，倘若有持續送氣（aspirated），則震幅可能會有另一個波峰，若無（un-aspirated）則在波峰之後，震幅將有所下降。如：ㄆ與ㄅ便是前述的關係，ㄆ有持續送氣，而ㄅ則無。右圖左為ㄅ，右圖右為ㄆ。

發音時，舌頭緊貼硬齶，形成狹窄的通道，氣流通過時造成湍流發生摩擦，由此發出聲響。由於摩擦音是透過穩定輸出氣流，使得聲音震幅變化相較於爆破音變化幅度較小。如ㄏ、ㄒ等皆為摩擦音。

此類型的發聲模型兼具爆破音與摩擦音的發聲特性。其主要發聲構造如同摩擦音是由舌頭緊貼硬齶使氣流通過時產生摩擦的聲音。而其通道更加緊密，使得氣流會在瞬間衝出，產生出如同爆破音般的特徵。如：ㄑ、ㄔ等。

發音時，軟齶會下壓，下壓後，由氣管吐出的氣流被阻塞，無法進入口腔，因而轉往鼻腔。也因此鼻腔與口腔會產生共振，如右圖的時頻譜上可以明顯地看到零點(formants)分佈有共振的現象，而這樣的共振現象在右文相關聲韻母模式（Right-Context-Dependent Initial Final, RCDIF）下與韻母倆相對較下更加明顯。因此，此一現象可作為辨識鼻音（Nasal）的重要依據之一。右圖便為鼻音ㄋ之特徵，其中紅點便為零點（formants）

而韻母又有雙母音、單母音之分，端視再發生時是否有音調的改變。而根據聲帶振動與否，又分為清音（unvoiced：聲帶不震動）等差異，以上發音時不同的方式，在時頻圖上大多可以找到相對應的特徵，透過處理二維的時頻圖，藉由傳統影像處理的方式，達到語音辨識的目的。

#### 中文子母音特徵

中文裡共有21個子音：ㄅ ㄆ ㄇ ㄈ ㄉ ㄊ ㄋ ㄌ ㄍ ㄎ ㄏ ㄐ ㄑ ㄒ ㄓ ㄔ ㄕ ㄖ ㄗ ㄘ ㄙ

16個母音：ㄚ ㄛ ㄜ ㄝ ㄞ ㄟ ㄠ ㄡ ㄢ ㄣ ㄤ ㄥ ㄦ ㄧ ㄨ ㄩ

母音的形成是依脣形而定，而子音是口腔或是鼻腔中某些部位將氣流暫時堵住後放開而形成的，因此：

子音的能量較小、頻率偏高，時間偏短，大多出現在母音前。

母音的能量較大、頻率偏低，時間偏長，出現在子音後或是獨立出現。

子母音這樣的差異可以在時頻圖上很容易的驗證，並且用這個差異來進行簡單的子母音辨識。

由上圖可以發現子音的振幅都偏小，母音的振幅都比較大。以「請」字為例，第一個子音ㄑ的振幅都較小，直到母音一出現之後，振幅才明顯變大。

但如果出現雙母音的字（例如：一ㄡ），振幅會一直都很大，導致音與音之間的分界不清楚，這時就比較難單純用振幅來判斷音的變化。

### 聲學模型

語音識別系統的模型通常由聲學模型和語言模型兩部分組成，分別對應於語音到音節機率的計算和音節到字機率的計算。本節和下一節分別介紹聲學模型和語言模型方面的技術。

HMM聲學建模：馬爾可夫模型的概念是一個離散時域有限狀態自動機，隱馬爾可夫模型HMM是指這一馬爾可夫模型的內部狀態外界不可見，外界只能看到各個時刻的輸出值。對語音識別系統，輸出值通常就是從各個幀計算而得的聲學特徵。用HMM刻畫語音信號需作出兩個假設，一是內部狀態的轉移只與上一狀態有關，另一是輸出值只與當前狀態（或當前的狀態轉移）有關，這兩個假設大大降低了模型的複雜度。HMM的評估、解碼和訓練相應的演算法是前向算法、Viterbi演算法和前向後向演算法。

語音識別中使用HMM通常是用從左向右單向、帶自環、帶跨越的拓撲結構來對識別基元建模，一個音素就是一個三至五狀態的HMM，一個詞就是構成詞的多個音素的HMM串行起來構成的HMM，而連續語音識別的整個模型就是詞和靜音組合起來的HMM。

上下文相關建模：協同發音，指的是一個音受前後相鄰音的影響而發生變化，從發聲機理上看就是人的發聲器官在一個音轉向另一個音時其特性只能漸變，從而使得後一個音的頻譜與其他條件下的頻譜產生差異。上下文相關建模方法在建模時考慮了這一影響，從而使模型能更準確地描述語音，只考慮前一音的影響的稱為Bi-Phone，考慮前一音和後一音的影響的稱為Tri-Phone。

英語的上下文相關建模通常以音素為基元，由於有些音素對其後音素的影響是相似的，因而可以通過音素解碼狀態的聚類進行模型參數的共享。聚類的結果稱為senone。決策樹用來實現高效的triphone對senone的對應，通過回答一系列前後音所屬類別（元/輔音、清/濁音等等）的問題，最終確定其HMM狀態應使用哪個senone。分類回歸樹CART模型用以進行詞到音素的發音標註。

### 語言模型

語言模型主要分為規則模型和統計模型兩種。統計語言模型是用機率統計的方法來揭示語言單位內在的統計規律，其中n元語法簡單有效，被廣泛使用。

n元語法：該模型基於這樣一種假設，第n個詞的出現只與前面N-1個詞相關，而與其它任何詞都不相關，整句的機率就是各個詞出現機率的乘積。這些機率可以通過直接從語料中統計N個詞同時出現的次數得到。由於計算量太大，N一般取值不會很大，常用的是二元語法（Bi-Gram）和三元語法（Tri-Gram）。

語言模型的性能通常用交叉熵和複雜度（Perplexity）來衡量。交叉熵的意義是用該模型對文本識別的難度，或者從壓縮的角度來看，每個詞平均要用幾個位來編碼。複雜度的意義是用該模型表示這一文本平均的分支數，其倒數可視為每個詞的平均機率。平滑是指對沒觀察到的N元組合賦予一個機率值，以保證詞序列總能通過語言模型得到一個機率值。通常使用的平滑技術有圖靈估計、刪除插值平滑、Katz平滑和Kneser-Ney平滑。

### 搜索

連續語音識別中的搜索，就是尋找一個詞模型序列以描述輸入語音信號，從而得到詞解碼序列。搜索所依據的是對公式中的聲學模型打分和語言模型打分。在實際使用中，往往要依據經驗給語言模型加上一個高權重，並設置一個長詞懲罰分數。

Viterbi：基於動態規劃的Viterbi演算法在每個時間點上的各個狀態，計算解碼狀態序列對觀察序列的後驗概率，保留機率最大的路徑，並在每個節點記錄下相應的狀態資訊以便最後反向獲取詞解碼序列。Viterbi演算法在不喪失最優解的條件下，同時解決了連續語音識別中HMM模型狀態序列與聲學觀察序列的非線性時間對準、詞邊界檢測和詞的識別，從而使這一演算法成為語音識別搜索的基本策略。

由於語音識別對當前時間點之後的情況無法預測，基於目標函數的啟發式剪枝難以應用。由於Viterbi演算法的時齊特性，同一時刻的各條路徑對應於同樣的觀察序列，因而具有可比性，束Beam搜索在每一時刻只保留機率最大的前若干條路徑，大幅度的剪枝提高了搜索的效率。這一時齊Viterbi-Beam演算法是當前語音識別搜索中最有效的演算法。N-best搜索和多遍搜索：為在搜索中利用各種知識源，通常要進行多遍搜索，第一遍使用代價低的知識源，產生一個候選列表或詞候選網格，在此基礎上進行使用代價高的知識源的第二遍搜索得到最佳路徑。此前介紹的知識源有聲學模型、語言模型和音標詞典，這些可以用於第一遍搜索。為實現更高級的語音識別或口語理解，往往要利用一些代價更高的知識源，如4階或5階的N-Gram、4階或更高的上下文相關模型、詞間相關模型、分段模型或語法分析，進行重新打分。最新的實時大詞表連續語音識別系統許多都使用這種多遍搜索策略。

N-best搜索產生一個候選列表，在每個節點要保留N條最好的路徑，會使計算複雜度增加到N倍。簡化的做法是只保留每個節點的若干詞候選，但可能丟失次優候選。一個折衷辦法是只考慮兩個詞長的路徑，保留k條。詞候選網格以一種更緊湊的方式給出多候選，對N-best搜索算法作相應改動後可以得到生成候選網格的演算法。

前向後向搜索算法是一個應用多遍搜索的例子。當應用簡單知識源進行了前向的Viterbi搜索後，搜索過程中得到的前向機率恰恰可以用在後向搜索的目標函數的計算中，因而可以使用啟發式的A演算法進行後向搜索，經濟地搜索出N條候選。

### 系統實現

語音識別系統選擇識別基元的要求是，有準確的定義，能得到足夠數據進行訓練，具有一般性。英語通常採用上下文相關的音素建模，漢語的協同發音不如英語嚴重，可以採用音節建模。系統所需的訓練數據大小與模型複雜度有關。模型設計得過於複雜以至於超出了所提供的訓練數據的能力，會使得性能急劇下降。

聽寫機：大詞彙量、非特定人、連續語音識別系統通常稱為聽寫機。其架構就是建立在前述聲學模型和語言模型基礎上的HMM拓撲結構。訓練時對每個基元用前向後向演算法獲得模型參數，識別時，將基元串接成詞，詞間加上靜音模型並引入語言模型作為詞間轉移機率，形成循環結構，用Viterbi演算法進行解碼。針對漢語易於分割的特點，先進行分割再對每一段進行解碼，是用以提高效率的一個簡化方法。

對話系統：用於實現人機口語對話的系統稱為對話系統。受目前技術所限，對話系統往往是面向一個狹窄領域、詞彙量有限的系統，其題材有旅遊查詢、訂票、資料庫檢索等等。其前端是一個語音識別器，識別產生的N-best候選或詞候選網格，由語法分析器進行分析獲取語義信息，再由對話管理器確定應答資訊，由語音合成器輸出。由於目前的系統往往詞彙量有限，也可以用提取關鍵詞的方法來獲取語義信息。

### 自適應與強健性

語音識別系統的性能受許多因素的影響，包括不同的說話人、說話方式、環境噪音、傳輸信道等等。提高系統強健性，是要提高系統克服這些因素影響的能力，使系統在不同的應用環境、條件下性能穩定；自適應的目的，是根據不同的影響來源，自動地、有針對性地對系統進行調整，在使用中逐步提高性能（其中以李開復博士的不特定語音識別系統為例）。以下對影響系統性能的不同因素分別介紹解決辦法。

解決辦法按針對語音特徵的方法（以下稱特徵方法）和模型調整的方法（以下稱模型方法）分為兩類。前者需要尋找更好的、高強健性的特徵參數，或是在現有的特徵參數基礎上，加入一些特定的處理方法。後者是利用少量的自適應語料來修正或變換原有的說話人無關（SI）模型，從而使其成為說話人自適應（SA）模型。

說話人自適應的特徵方法有說話人規一化和說話人子空間法，模型方法有貝葉斯方法、變換法和模型合併法。

語音系統中的噪聲，包括環境噪聲和錄音過程加入的電子噪聲。提高系統魯棒性的特徵方法包括語音增強和尋找對噪聲干擾不敏感的特徵，模型方法有並行模型組合PMC方法和在訓練中人為加入噪聲。信道畸變包括錄音時話筒的距離、使用不同靈敏度的話筒、不同增益的前置放大和不同的濾波器設計等等。特徵方法有從倒譜矢量中減去其長時平均值和RASTA濾波，模型方法有倒譜平移。

#### 最大後驗概率

最大後驗機率估計是後驗機率分布的眾數。利用最大後驗機率估計可以獲得對實驗數據中無法直接觀察到的量的點估計。它與最大似然估計中的經典方法有密切關係，但是它使用了一個增廣的優化目標，進一步考慮了被估計量的先驗機率分布。所以最大後驗機率估計可以看作是規則化的最大似然估計。

以此為基礎的自適性方法有以下特性：

- 越大的調整測資（adaptation data）可以讓結果越接近理想的客製化模型
- 當調整測資（adaptation data）不足時，無法顯著提升模型的精準度

#### 最大似然線性回歸

最大似然線性回歸（Maximum Likelihood Linear Regression (MLLR)）是一種基於詞網的最大似然線性回歸（Lattice-MLLR）無監督自適應演算法,並進行了改進。是一種基於變換的方法，對數據量依賴較小，常用於數據量較少的情況或進行快速自適應。

一種基於詞網的最大似然線性回歸（Lattice-MLLR）無監督自適應演算法,並進行了改進。Lattice-MLLR是根據解碼得到的詞網估計MLLR變換參數,詞網的潛在誤識率遠小於識別結果,因此可以使參數估計更為準確。Lattice-MLLR的一個很大的缺點是計算量極大,較難實用。MLLR 是一種基於變換的方法，對數據量依賴較小，常用於數據量較少的情況或進行快速自適應。

以此為基礎的自適性方法有以下特性：

- 在少量的調整測資（adaptation data）可以顯著提升模型的精準度
- 當調整測資（adaptation data）達到一定量後，精準度的提升會進入飽和狀態，有明顯的效率上界

而最大似然線性回歸（Maximum Likelihood Linear Regression(MLLR)）也有許多變形。其中區塊對角最大似然線性回歸（block-diagonal Maximum Likelihood Linear Regression(MLLR)）可以再更少量的調整測資下提升更大的精準度，然而其進入準度的飽和狀態也更快，精準度上限也更低。

綜合以上，端視調整測資（adaptation data）的多寡，可以選擇適當的方法，讓模型的精準度最高。

## 外部連結

- - CMU Sphinx 最早的語音識別軟體
- - HTK 由劍橋大學開發的一套完備的語音識別系統
- simon - 一個開源的語音識別軟體
- - 靈雲開發者社區，提供免費及商用的語音識別SDK