隨著移動設備的快速發展,迫切需要一種更友好、更便捷的用戶操作系統。自動語音識別系統能夠提供便利的人機交互,將成為一種主要方法。目前,實驗室環境中自動語音識別系統已經取得了很好的效果,但需要很大的存儲空間和運算資源。當自動語音識別應用于移動設備時,必須對模型和識別策略進行相應改進,才能滿足其對運算速度、內存資源和功耗的要求。為了解決這個問題,本文將結合英語語音的特點,設計并實現嵌入式英語語音識別系統,完成中等詞匯量的孤立詞實時識別任務。 1 硬件平臺 嵌入式系統的軟硬件高度結合,針對系統的特定任務,要量體裁衣、去除冗余,使得系統能夠在高性能、高效率、高穩定性的同時,保證低成本和低功耗。因此,系統硬件平臺的選用是影響系統整體性能的關鍵因素。系統采用Infineon公司Unispeech 80D51語音處理專用芯片作為核心的硬件平臺,該芯片集成了一個16位定點DSP核(OAK)、一個8位MCU核(M8051 E-Warp)、兩路ADC、兩路DAC、104KB的SRAM以及高靈活性的MMU等器件。其中DSP最高工作頻率可達100MHz,MCU最高工作頻率為50MHz。 由于系統的語音處理專用芯片UniSpeech集成了大部分的功能單元,片外所需元件很少,因此系統硬件平臺的板級結構非常簡單。圖1為硬件平臺的板級結構圖。 專用芯片只需外接: (1)EPROM:存放系統程序; (2)Flash Memory:存放語音識別系統需要的聲學模型參數和系統中的語音提示、語音回放數據; (3)語音輸入器件:可直接外接麥克風,接收語音信號; (4)語音輸出器件:可直接外接揚聲器或耳機,輸出系統的提示音; (5)電源:通過電壓變換芯片,為電路板上各芯片提供需要的電壓; (6)USB接口:該板級語音識別模塊提供了USB接口,以提高該嵌入式系統和通用計算機系統之間數據交換的速度; (7)鍵盤:提供外接鍵盤接口,方便系統控制; (8)液晶:可外接一塊液晶顯示屏,以輸出識別結果; (9)其他設備接口:為了增強該語音信號處理模塊的功能擴展性,UniSpeech提供了豐富的I/O資源,共有100條通用I/O,系統也預留了這些I/O接口,以方便與其他設備連接。 2 算法研究 2.1 兩階段識別算法 在英語語音識別系統中,常用的聲學模型基本單元是單詞(Word)、上下文無關音素(Monophone)、上下文相關音素(Triphone,Biphone)和音節(Syllable)。單詞模型由于其靈活性太差及計算時間和占用內存隨待識別單詞數的增加而線性增長,所以在嵌入式語音識別系統中很少應用。Monophone模型具有模型簡單、狀態數較少、識別速度快、內存占用少且與識別詞匯量無關等優點,但其對發音的相關性描述不夠精確,一選識別率不高。Triphone和Syllable模型對發音相關性能準確建模,但模型數量巨大、狀態數較多、識別速度慢、內存占用多。為了解決內存占用量與識別速度之間的矛盾,本文采用了兩階段搜索算法,其基本流程如圖2所示。 在第一階段識別中,采用monophone模型和靜態識別網絡,得到多候選詞條;在第二階段識別中,根據第一階段輸出的多候選詞條,構建新的識別網絡,采用triphone模型,進行精確識別,得到最終的識別結果。由于第二階段識別的詞條數較少,與只采用triphone模型的一階段識別相比,識別速度大大提高;同時,第二階段識別可重用第一階段的內存資源,也減少了識別系統的內存占用量。 2.2 特征提取與選擇 在連續語音識別系統中,通常采用39維的MFCC(Mel Frequency Cepstral Coefficient)特征,甚至再加入一些特征。但是,考慮到嵌入式系統有限的硬件資源,在不降低識別率的基礎上,應盡量減少特征的維數。本文采用最小互信息改變準則MMIC(Minimum Mutual Information Change)進行特征選擇。一階段采用22維MFCC特征(9 MFCC,6 ΔMFCC,4 Δ2MFCC,E,ΔE,Δ2E),二階段采用26維MFCC特征(10 MFCC,7 ΔMFCC,6 Δ2MFCC,E,ΔE,Δ2E)。 2.3 數據的輸入輸出 對于硬件系統,如果數據的讀入速度較慢,則對運算速度影響就很大。在保證系統高識別率的前提下,系統的內存消耗量和識別時間常常是一對矛盾體,很難保證兩者同時達到理想狀態。如果僅僅考慮節省內存,將每個詞條識別網絡和相應的狀態逐個讀入,計算匹配分數,這樣雖然可以最大限度地節省內存的使用量,但是數據的多次讀入占用了大量時間,并且反復計算同一個轉移概率,也對識別時間影響很大。另一方面,如果僅僅考慮運算速度,一次性將所有詞條的識別網絡和所有狀態模型讀入內存,雖然僅需一次數據讀入,運算速度大大提高,但卻對內存提出了更高要求。為了更好地利用系統的硬件資源,本系統首先逐個讀入狀態模型,計算所有觀察矢量在各狀態模型下的輸出概率,存放在內存中;然后逐條讀入識別網絡,選取路徑似然度最高的詞條作為最終的識別結果。這樣綜合了前面兩種方案的優點,適應了硬件系統的要求。 2.4 兩階段端點檢測 端點檢測是嵌入式語音識別中最基本的模塊。端點檢測是否準確直接影響系統的運算復雜度和系統的識別性能。因此在不增加復雜運算量的前提下,希望端點檢測能盡量準確,而且能適應嵌入式系統多變的應用環境。本文使用了一種有效的兩階段端點檢測方法。在第一階段使用圖像分割中經常使用的邊緣檢測濾波器方法,得到一個能包含語音段同時又比較寬松的端點結果;在第二階段,對第一階段的結果進行再判決,使用直方圖統計方法得到靜音段的能量聚類中心,并用這個中心能量值對整句能量序列進行中心削波,對削波后的能量序列進行最終判決。通常最終的結果會在第二階段端點檢測的基礎上作適當的放松,前后放松4~5幀(大約64~80ms),這些放松在求取特征的差分分量時是很有必要的。 在實驗室環境下(信噪比大于25dB),以8kHz采樣頻率錄制了20人(其中男、女各10人)的語音數據。對于12 000句原始錄制語音或帶噪語音,對傳統的固定能量閾值方法和兩階段檢測方法進行了比較測試。測試的性能如表1所示。 傳統的固定閾值方法就是針對環境噪聲設定一個固定的能量閾值進行端點檢測。實驗表明,兩階段檢測方法無論在安靜環境中還是在包含一定噪聲的環境中,都比固定能量閾值的端點檢測方法有更好的性能。此方法能夠進一步改善嵌入式語音識別系統的識別性能。 2.5 束搜索 英語語音發音快、單詞長、狀態數多,因而搜索時間長。要實現實時識別,就不能在所有的語音數據都得到后再進行解碼識別。在兩級識別網絡中,第一階段要在大量的詞條中搜索,而第二階段只在N_BEST詞條中搜索,相對時間占用量很少。為了滿足實時要求,本系統在獲取語音信號的同時進行提取特征和第一階段識別。根據硬件的內存容量,考慮到匹配分數所占用的內存,選取每20幀(320ms)的語音完成一次搜索。由于所搜索的詞條并沒有結束,不能求出最終對應于詞條的分數。因此,必須保留每次搜索中每個詞條的每個節點的匹配分數,這帶來了新的內存開銷。 解決方法是在第一階段識別網絡中加入束搜索(Beam Search)快速算法。該算法假設:Viterbi解碼過程中的最佳路徑在任何時刻都能保證較高的似然度,在搜索過程中對網絡進行剪枝,只保留匹配分數最大的有限個路徑,以減少運算量和內存消耗。但是,要獲得匹配分數最大的幾個狀態,在每次搜索過程中都要對匹配分數進行排序,這使運算負擔加重,在實際中不可取。為了解決這一問題,結合本系統識別網絡的特點,采用了一種滑動窗束搜索算法。對于每一個詞條網絡,在Viterbi解碼過程中,近似地認為真實路徑總是當前匹配分數最優的路徑的近鄰路徑。因此,設置了一個固定寬度的窗,在所有時刻,窗中的路徑總包含了該時刻似然度最高的路徑及其相鄰路徑,而那些落在窗外的路徑則將被剪枝。由于模型狀態不可跨越,因此,下一個活躍路徑的位置,只可能是上一個活躍路徑的原有位置或者滑動一格。由于中間的匹配分數相同,比較滑動窗兩端的匹配分數即可決定下一個滑動窗的位置。這樣可大大減小比較的運算量,提高運算速度。 由于語音信號隨機性較強,束搜索的這種假設并不總符合真實情況,因此,過窄的束寬很容易導致最后識別結果的錯誤。以三對角高斯模型為例,語音庫為10個男生的命令詞。窗寬與識別率的關系如表2所示。 可以看出,當窗寬為15時,識別率基本沒有下降。這個結果與候選詞條的長度有關,詞條的狀態數越多,最優結果在搜索過程中“露出”窗外的可能性也就越大。綜合束搜索對系統率和識別時間兩方面的影響,選定了束寬為10的滑動窗算法作為系統的束搜索算法。 3 實驗結果 實驗訓練集采用LDC WSJ1訓練庫(SI_TR_S),包括200人的連續語音,共61個小時,降采樣為8kHz,16位量化。測試集為由WSJ1測試集(CDTest和HSDTest)得到的525個短句(每句包含2個單詞),候選詞條為535個,包括637個不同的單詞發音,同樣降采樣為8kHz,16位量化。 表3為一階段識別和兩階段識別的識別率、識別時間和內存占用量比較。從表3可以看出,與直接進行的一階段識別相比,兩階段識別通過采用兩階段端點檢測方法、MMIC特征選擇算法、特征提取和解碼同步的束搜索算法,極大地提高了識別率,減少了內存占用量和識別時間。 本文提出了一種基于定點DSP的嵌入式英語孤立詞識別系統,采用兩階段識別的連續HMM模型。其中第一階段為實時識別,第二階段為非實時識別。通過采用新穎的兩階段端點檢測方法、最小互信息改變準則特征選擇算法、特征提取和解碼同步的束搜索算法,進一步提高了識別性能、減少了內存占用量和計算復雜度。 |