語音是人類最自然的交互方式。計算機發明之后,讓機器能夠“聽懂”人類的語言,理解語言中的內在含義,并能做出正確的回答就成為了人們追求的目標。我們都希望像科幻電影中那些智能先進的機器人助手一樣,在與人進行語音交流時,讓它聽明白你在說什么。語音識別技術將人類這一曾經的夢想變成了現實。語音識別就好比“機器的聽覺系統”,該技術讓機器通過識別和理解,把語音信號轉變為相應的文本或命令。
語音識別技術,也被稱為自動語音識別AutomaTIc Speech RecogniTIon,(ASR),其目標是將人類的語音中的詞匯內容轉換為計算機可讀的輸入,例如按鍵、二進制編碼或者字符序列。語音識別就好比“機器的聽覺系統”,它讓機器通過識別和理解,把語音信號轉變為相應的文本或命令。
語音識別是一門涉及面很廣的交叉學科,它與聲學、語音學、語言學、信息理論、模式識別理論以及神經生物學等學科都有非常密切的關系。語音識別技術正逐步成為計算機信息處理技術中的關鍵技術。
語音識別技術的發展
語音識別技術的研究最早開始于20世紀50年代, 1952 年貝爾實驗室研發出了 10 個孤立數字的識別系統。從 20 世紀 60 年代開始,美國卡耐基梅隆大學的 Reddy 等開展了連續語音識別的研究,但是這段時間發展很緩慢。1969年貝爾實驗室的 Pierce J 甚至在一封公開信中將語音識別比作近幾年不可能實現的事情。
20世紀80年代開始,以隱馬爾可夫模型(hidden Markov model,HMM)方法為代表的基于統計模型方法逐漸在語音識別研究中占據了主導地位。HMM模型能夠很好地描述語音信號的短時平穩特性,并且將聲學、語言學、句法等知識集成到統一框架中。此后,HMM的研究和應用逐漸成為了主流。例如,第一個“非特定人連續語音識別系統”是當時還在卡耐基梅隆大學讀書的李開復研發的SPHINX系統,其核心框架就是GMM-HMM框架,其中GMM(Gaussian mixture model,高斯混合模型)用來對語音的觀察概率進行建模,HMM則對語音的時序進行建模。
20世紀80年代后期,深度神經網絡(deep neural network,DNN)的前身——人工神經網絡(artificial neural network, ANN)也成為了語音識別研究的一個方向。但這種淺層神經網絡在語音識別任務上的效果一般,表現并不如GMM-HMM 模型。
20世紀90年代開始,語音識別掀起了第一次研究和產業應用的小高潮,主要得益于基于 GMM-HMM 聲學模型的區分性訓練準則和模型自適應方法的提出。這時期劍橋發布的HTK開源工具包大幅度降低了語音識別研究的門檻。此后將近10年的時間里,語音識別的研究進展一直比較有限,基于GMM-HMM 框架的語音識別系統整體效果還遠遠達不到實用化水平,語音識別的研究和應用陷入了瓶頸。
2006 年 Hinton]提出使用受限波爾茲曼機(restricted Boltzmann machine,RBM)對神經網絡的節點做初始化,即深度置信網絡(deep belief network,DBN)。DBN解決了深度神經網絡訓練過程中容易陷入局部最優的問題,自此深度學習的大潮正式拉開。
2009 年,Hinton 和他的學生Mohamed D將 DBN 應用在語音識別聲學建模中,并且在TIMIT這樣的小詞匯量連續語音識別數據庫上獲得成功。
2011 年 DNN 在大詞匯量連續語音識別上獲得成功,語音識別效果取得了近10年來最大的突破。從此,基于深度神經網絡的建模方式正式取代GMM-HMM,成為主流的語音識別建模方式。
語音識別的基本原理
所謂語音識別,就是將一段語音信號轉換成相對應的文本信息,系統主要包含特征提取、聲學模型,語言模型以及字典與解碼四大部分,其中為了更有效地提取特征往往還需要對所采集到的聲音信號進行濾波、分幀等預處理工作,把要分析的信號從原始信號中提取出來;之后,特征提取工作將聲音信號從時域轉換到頻域,為聲學模型提供合適的特征向量;聲學模型中再根據聲學特性計算每一個特征向量在聲學特征上的得分;而語言模型則根據語言學相關的理論,計算該聲音信號對應可能詞組序列的概率;最后根據已有的字典,對詞組序列進行解碼,得到最后可能的文本表示。
聲學信號預處理
作為語音識別的前提與基礎,語音信號的預處理過程至關重要。在最終進行模板匹配的時候,是將輸入語音信號的特征參數同模板庫中的特征參數進行對比,因此,只有在預處理階段得到能夠表征語音信號本質特征的特征參數,才能夠將這些特征參數進行匹配進行識別率高的語音識別。
首先需要對聲音信號進行濾波與采樣,此過程主要是為了排除非人體發聲以外頻率的信號與50Hz電流頻率的干擾,該過程一般是用一個帶通濾波器、設定上下戒指頻率進行濾波,再將原有離散信號進行量化處理實現的;之后需要平滑信號的高頻與低頻部分的銜接段,從而可以在同一信噪比條件下對頻譜進行求解,使得分析更為方便快捷;分幀加窗操作是為了將原有頻域隨時間變化的信號具有短時平穩特性,即將連續的信號用不同長度的采集窗口分成一個個獨立的頻域穩定的部分以便于分析,此過程主要是采用預加重技術;最后還需要進行端點檢測工作,也就是對輸入語音信號的起止點進行正確判斷,這主要是通過短時能量(同一幀內信號變化的幅度)與短時平均過零率(同一幀內采樣信號經過零的次數)來進行大致的判定。
聲學特征提取
完成信號的預處理之后,隨后進行的就是整個過程中極為關鍵的特征提取的操作。將原始波形進行識別并不能取得很好的識別效果,頻域變換后提取的特征參數用于識別,而能用于語音識別的特征參數必須滿足以下幾點:
1、特征參數能夠盡量描述語音的根本特征;
2、盡量降低參數分量之間的耦合,對數據進行壓縮;
3、應使計算特征參數的過程更加簡便,使算法更加高效。基音周期、共振峰值等參數都可以作為表征語音特性的特征參數。
目前主流研究機構最常用到的特征參數有:線性預測倒譜系數(LPCC)和 Mel 倒譜系數(MFCC)。兩種特征參數在倒譜域上對語音信號進行操作,前者以發聲模型作為出發點,利用 LPC 技術求倒譜系數。后者則模擬聽覺模型,把語音經過濾波器組模型的輸出做為聲學特征,然后利用離散傅里葉變換(DFT)進行變換。
所謂基音周期,是指聲帶振動頻率(基頻)的振動周期,因其能夠有效表征語音信號特征,因此從最初的語音識別研究開始,基音周期檢測就是一個至關重要的研究點;所謂共振峰,是指語音信號中能量集中的區域,因其表征了聲道的物理特征,并且是發音音質的主要決定條件,因此同樣是十分重要的特征參數。此外,目前也有許多研究者開始將深度學習中一些方法應用在特征提取中,取得了較快的進展。
聲學模型
聲學模型是語音識別系統中非常重要的一個組件,對不同基本單元的區分能力直接關系到識別結果的好壞。語音識別本質上一個模式識別的過程,而模式識別的核心是分類器和分類決策的問題。
通常,在孤立詞、中小詞匯量識別中使用動態時間規整(DTW)分類器會有良好的識別效果,并且識別速度快,系統開銷小,是語音識別中很成功的匹配算法。但是,在大詞匯量、非特定人語音識別的時候,DTW 識別效果就會急劇下降,這時候使用隱馬爾科夫模型(HMM)進行訓練識別效果就會有明顯提升,由于在傳統語音識別中一般采用連續的高斯混合模型GMM來對狀態輸出密度函數進行刻畫,因此又稱為GMM-HMM構架。
同時,隨著深度學習的發展,通過深度神經網絡來完成聲學建模,形成所謂的DNN-HMM構架來取代傳統的GMM-HMM構架,在語音識別上也取得了很好的效果。
高斯混合模型
對于一個隨機向量 x,如果它的聯合概率密度函數符合公式2-9,則稱它服從高斯分布,并記為 x ~N(μ, Σ)。
?
其中,μ 為分布的期望,Σ 為分布的協方差矩陣。高斯分布有很強的近似真實世界數據的能力,同時又易于計算,因此被廣泛地應用在各個學科之中。但是,仍然有很多類型的數據不好被一個高斯分布所描述。這時候我們可以使用多個高斯分布的混合分布來描述這些數據,由多個分量分別負責不同潛在的數據來源。此時,隨機變量符合密度函數。
其中,M 為分量的個數,通常由問題規模來確定。
我們稱認為數據服從混合高斯分布所使用的模型為高斯混合模型。高斯混合模型被廣泛的應用在很多語音識別系統的聲學模型中。考慮到在語音識別中向量的維數相對較大,所以我們通常會假設混合高斯分布中的協方差矩陣 Σm 為對角矩陣。這樣既大大減少了參數的數量,同時可以提高計算的效率。
使用高斯混合模型對短時特征向量建模有以下幾個好處:首先,高斯混合模型的具有很強的建模能力,只要分量總數足夠多,高斯混合模型就可以以任意精度來逼近一個概率分布函數;另外,使用 EM 算法可以很容易地使模型在訓練數據上收斂。對于計算速度和過擬合等問題,人們還研究出了參數綁定的 GMM 和子空間高斯混合模型 (subspace GMM) 來解決。除了使用 EM 算法作最大似然估計以外,我們還可以使用和詞或音素錯誤率直接相關的區分性的誤差函數來訓練高斯混合模型,能夠極大地提高系統性能。因此,直到在聲學模型中使用深度神經網絡的技術出現之前,高斯混合模型一直是短時特征向量建模的不二選擇。
但是,高斯混合模型同樣具有一個嚴重的缺點:高斯混合模型對于靠近向量空間上一個非線性流形 (manifold) 上的數據建模能力非常差。例如,假設一些數據分布在一個球面兩側,且距離球面非常近。如果使用一個合適的分類模型,我們可能只需要很少的參數就可以將球面兩側的數據區分開。但是,如果使用高斯混合模型描繪他們的實際分布情況,我們需要非常多的高斯分布分量才能足夠精確地刻畫。這驅使我們尋找一個能夠更有效利用語音信息進行分類的模型。
隱馬爾科夫模型
我們現在考慮一個離散的隨機序列,若轉移概率符合馬爾可夫性質,即將來狀態和過去狀態獨立,則稱其為一條馬爾可夫鏈 (Markov Chain)。若轉移概率和時間無關,則稱其為齊次 (homogeneous) 馬爾可夫鏈。馬爾可夫鏈的輸出和預先定義好的狀態一一對應,對于任意給定的狀態,輸出是可觀測的,沒有隨機性。如果我們對輸出進行擴展,使馬爾可夫鏈的每個狀態輸出為一個概率分布函數。這樣的話馬爾可夫鏈的狀態不能被直接觀測到,只能通過受狀態變化影響的符合概率分布的其他變量來推測。我們稱以這種以隱馬爾可夫序列假設來建模數據的模型為隱馬爾可夫模型。
對應到語音識別系統中,我們使用隱馬爾可夫模型來刻畫一個音素內部子狀態變化,來解決特征序列到多個語音基本單元之間對應關系的問題。
在語音識別任務中使用隱馬爾可夫模型需要計算模型在一段語音片段上的可能性。而在訓練的時候,我們需要使用 Baum-Welch 算法[23] 學習隱馬爾可夫模型參數,進行最大似然估計 (Maximum Likelihood Estimation, MLE)。Baum-Welch 算法是EM (Expectation-Maximization) 算法的一種特例,利用前后項概率信息迭代地依次進行計算條件期望的 E 步驟和最大化條件期望的 M 步驟。
語言模型
語言模型主要是刻畫人類語言表達的方式習慣,著重描述了詞與詞在排列結構上的內在聯系。在語音識別解碼的過程中,在詞內轉移參考發聲詞典、詞間轉移參考語言模型,好的語言模型不僅能夠提高解碼效率,還能在一定程度上提高識別率。語言模型分為規則模型和統計模型兩類,統計語言模型用概率統計的方法來刻畫語言單位內在的統計規律,其設計簡單實用而且取得了很好的效果,已經被廣泛用于語音識別、機器翻譯、情感識別等領域。
最簡單又卻又最常用的語言模型是 N 元語言模型 (N-gram Language Model,N-gram LM) 。N 元語言模型假設當前在給定上文環境下,當前詞的概率只與前N-1 個詞相關。于是詞序列 w1, . . . , wm 的概率 P(w1, . . . , wm) 可以近似為
為了得到公式中的每一個詞在給定上文下的概率,我們需要一定數量的該語言文本來估算。可以直接使用包含上文的詞對在全部上文詞對中的比例來計算該概率,即
對于在文本中未出現的詞對,我們需要使用平滑方法來進行近似,如 Good-Turing估計或 Kneser-Ney 平滑等。
解碼與字典
解碼器是識別階段的核心組件,通過訓練好的模型對語音進行解碼,獲得最可能的詞序列,或者根據識別中間結果生成識別網格 (lattice) 以供后續組件處理。解碼器部分的核心算法是動態規劃算法 Viterbi。由于解碼空間非常巨大,通常我們在實際應用中會使用限定搜索寬度的令牌傳遞方法 (token passing)。
傳統解碼器會完全動態生成解碼圖 (decode graph),如著名語音識別工具HTK(HMM Tool Kit) 中的 HVite 和 HDecode 等。這樣的實現內存占用較小,但考慮到各個組件的復雜性,整個系統的流程繁瑣,不方便高效地將語言模型和聲學模型結合起來,同時更加難以擴展。現在主流的解碼器實現會一定程度上使用預生成的有限狀態變換器 (Finite State Transducer, FST) 作為預加載的靜態解碼圖。這里我們可以將語言模型 (G),詞匯表(L),上下文相關信息 (C),隱馬爾可夫模型(H)四個部分分別構建為標準的有限狀態變換器,再通過標準的有限狀態變換器操作將他們組合起來,構建一個從上下文相關音素子狀態到詞的變換器。這樣的實現方法額外使用了一些內存空間,但讓解碼器的指令序列變得更加整齊,使得一個高效的解碼器的構建更加容易。同時,我們可以對預先構建的有限狀態變換器進行預優化,合并和剪掉不必要的部分,使得搜索空間變得更加合理
語音識別技術的工作原理
首先,我們知道聲音實際上是一種波。常見的mp3等格式都是壓縮格式,必須轉成非壓縮的純波形文件來處理,比如Windows PCM文件,也就是俗稱的wav文件。wav文件里存儲的除了一個文件頭以外,就是聲音波形的一個個點了。下圖是一個波形的示例。
圖中,每幀的長度為25毫秒,每兩幀之間有25-10=15毫秒的交疊。我們稱為以幀長25ms、幀移10ms分幀。
分幀后,語音就變成了很多小段。但波形在時域上幾乎沒有描述能力,因此必須將波形作變換。常見的一種變換方法是提取MFCC特征,根據人耳的生理特性,把每一幀波形變成一個多維向量,可以簡單地理解為這個向量包含了這幀語音的內容信息。這個過程叫做聲學特征提取。
至此,聲音就成了一個12行(假設聲學特征是12維)、N列的一個矩陣,稱之為觀察序列,這里N為總幀數。觀察序列如下圖所示,圖中,每一幀都用一個12維的向量表示,色塊的顏色深淺表示向量值的大小。
接下來就要介紹怎樣把這個矩陣變成文本了。首先要介紹兩個概念:
音素:單詞的發音由音素構成。對英語,一種常用的音素集是卡內基梅隆大學的一套由39個音素構成的音素集。漢語一般直接用全部聲母和韻母作為音素集,另外漢語識別還分有調無調,不詳述。
狀態:這里理解成比音素更細致的語音單位就行啦。通常把一個音素劃分成3個狀態。
語音識別是怎么工作的呢?實際上一點都不神秘,無非是:
第一步,把幀識別成狀態。
第二步,把狀態組合成音素。
第三步,把音素組合成單詞。
如下圖所示:
圖中,每個小豎條代表一幀,若干幀語音對應一個狀態,每三個狀態組合成一個音素,若干個音素組合成一個單詞。也就是說,只要知道每幀語音對應哪個狀態了,語音識別的結果也就出來了。
那每幀音素對應哪個狀態呢?有個容易想到的辦法,看某幀對應哪個狀態的概率最大,那這幀就屬于哪個狀態。比如下面的示意圖,這幀在狀態S3上的條件概率最大,因此就猜這幀屬于狀態S3。
那這些用到的概率從哪里讀取呢?有個叫“聲學模型”的東西,里面存了一大堆參數,通過這些參數,就可以知道幀和狀態對應的概率。獲取這一大堆參數的方法叫做“訓練”,需要使用巨大數量的語音數據。
但這樣做有一個問題:每一幀都會得到一個狀態號,最后整個語音就會得到一堆亂七八糟的狀態號,相鄰兩幀間的狀態號基本都不相同。假設語音有1000幀,每幀對應1個狀態,每3個狀態組合成一個音素,那么大概會組合成300個音素,但這段語音其實根本沒有這么多音素。如果真這么做,得到的狀態號可能根本無法組合成音素。實際上,相鄰幀的狀態應該大多數都是相同的才合理,因為每幀很短。
解決這個問題的常用方法就是使用隱馬爾可夫模型(Hidden Markov Model,HMM)。這東西聽起來好像很高深的樣子,實際上用起來很簡單:
第一步,構建一個狀態網絡。
第二步,從狀態網絡中尋找與聲音最匹配的路徑。
這樣就把結果限制在預先設定的網絡中,避免了剛才說到的問題,當然也帶來一個局限,比如你設定的網絡里只包含了“今天晴天”和“今天下雨”兩個句子的狀態路徑,那么不管說些什么,識別出的結果必然是這兩個句子中的一句。
那如果想識別任意文本呢?把這個網絡搭得足夠大,包含任意文本的路徑就可以了。但這個網絡越大,想要達到比較好的識別準確率就越難。所以要根據實際任務的需求,合理選擇網絡大小和結構。
搭建狀態網絡,是由單詞級網絡展開成音素網絡,再展開成狀態網絡。語音識別過程其實就是在狀態網絡中搜索一條最佳路徑,語音對應這條路徑的概率最大,這稱之為“解碼”。路徑搜索的算法是一種動態規劃剪枝的算法,稱之為Viterbi算法,用于尋找全局最優路徑。
這里所說的累積概率,由三部分構成,分別是:
觀察概率:每幀和每個狀態對應的概率
轉移概率:每個狀態轉移到自身或轉移到下個狀態的概率
語言概率:根據語言統計規律得到的概率
其中,前兩種概率從聲學模型中獲取,最后一種概率從語言模型中獲取。語言模型是使用大量的文本訓練出來的,可以利用某門語言本身的統計規律來幫助提升識別正確率。語言模型很重要,如果不使用語言模型,當狀態網絡較大時,識別出的結果基本是一團亂麻。
這樣基本上語音識別過程就完成了,這就是語音識別技術的工作原理。
語音識別技術的工作流程
一般來說,一套完整的語音識別系統其工作過程分為7步:
1、對語音信號進行分析和處理,除去冗余信息。
2、提取影響語音識別的關鍵信息和表達語言含義的特征信息。
3、緊扣特征信息,用最小單元識別字詞。
4、按照不同語言的各自語法,依照先后次序識別字詞。
5、把前后意思當作輔助識別條件,有利于分析和識別。
6、按照語義分析,給關鍵信息劃分段落,取出所識別出的字詞并連接起來,同時根據語句意思調整句子構成。
7、結合語義,仔細分析上下文的相互聯系,對當前正在處理的語句進行適當修正。
語音識別原理有三點:
1、對語音信號中的語言信息編碼是按照幅度譜的時間變化來進行;
2、由于語音是可以閱讀的,也就是說聲學信號可以在不考慮說話人說話傳達的信息內容的前提下用多個具有區別性的、離散的符號來表示;
3、語音的交互是一個認知過程,所以絕對不能與語法、語義和用語規范等方面分裂開來。
預處理,其中就包括對語音信號進行采樣、克服混疊濾波、去除部分由個體發音的差異和環境引起的噪聲影響,此外還會考慮到語音識別基本單元的選取和端點檢測問題。反復訓練是在識別之前通過讓說話人多次重復語音,從原始語音信號樣本中去除冗余信息,保留關鍵信息,再按照一定規則對數據加以整理,構成模式庫。再者是模式匹配,它是整個語音識別系統的核心部分,是根據一定規則以及計算輸入特征與庫存模式之間的相似度,進而判斷出輸入語音的意思。
前端處理,先對原始語音信號進行處理,再進行特征提取,消除噪聲和不同說話人的發音差異帶來的影響,使處理后的信號能夠更完整地反映語音的本質特征提取,消除噪聲和不同說話人的發音差異帶來的影響,使處理后的信號能夠更完整地反映語音的本質特征。
審核編輯:黃飛
?
評論
查看更多