基于語(yǔ)音識別的IVR系統的設計與實(shí)現
4 語(yǔ)音識別模塊的實(shí)現
語(yǔ)音識別系統的開(kāi)發(fā)可以采用基于模板匹配的動(dòng)態(tài)時(shí)間規整(DTW)、基于統計參數模型的隱馬爾可夫模型(HMM),神經(jīng)網(wǎng)絡(luò )等技術(shù),他們都是針對某些具體應用的,其模型參數的獲得需要對大規模的樣本進(jìn)行學(xué)習,對于非特定人語(yǔ)音識別往往需要采集數百人的語(yǔ)音樣本,其工作量是相當大的。隨著(zhù)語(yǔ)音研究的不斷發(fā)展,已經(jīng)出現了眾多的語(yǔ)音識別開(kāi)發(fā)工具:如Microsoft Speech SDK,IBM ViaVoice等。他們都提供了語(yǔ)音識別和語(yǔ)音合成的二次開(kāi)發(fā)平臺,并且微軟的Speech SDK是完全免費的,它具有識別率高,識別速度快,可移植性好,支持多種語(yǔ)言等優(yōu)點(diǎn)。因此它被廣泛應用于各個(gè)領(lǐng)域。
4.1 Microsoft Speech SDK 5.1簡(jiǎn)介
SAPI SDK是微軟公司免費提供的語(yǔ)音應用開(kāi)發(fā)工具包,這個(gè)SDK中包含了語(yǔ)音應用設計接口(SAPI)、微軟的連續語(yǔ)音識別引擎(MCSR)以及微軟的語(yǔ)音合成(TTS)引擎等等。目前的5.1版本一共可以支持3種語(yǔ)言的識別 (英語(yǔ),漢語(yǔ)和日語(yǔ))以及2種語(yǔ)言的合成(英語(yǔ)和漢語(yǔ))。SAPI中還包括對于低層控制和高度適應性的直接語(yǔ)音管理、訓練向導、事件、語(yǔ)法編譯、資源、語(yǔ)音識別(SR)管理以及TTS管理等強大的設計接口。
語(yǔ)音識別的功能主要由一系列COM接口協(xié)調完成。其中主要的接口有下面這些:
IspRecognizer接口:用于創(chuàng )建語(yǔ)音識別引擎的實(shí)例,識別引擎有兩種:獨占引擎(InProcRecognizer)和共享引擎(SharedRecognizer)。獨占的引擎對象是在本程序的進(jìn)程中創(chuàng )建,只能由本應用程序使用,而共享的引擎是在一個(gè)單獨的進(jìn)程中創(chuàng )建,可以供多個(gè)應用程序共同使用。
IspRecoContext接口:主要用于接受和發(fā)送與語(yǔ)音識別消息相關(guān)的事件消息,裝載和卸載識別語(yǔ)法資源
IspRecoGrammar接口:通過(guò)這個(gè)接口,應用程序可以載入并激活語(yǔ)法規則,而語(yǔ)法規則里定義了待識別的單詞、短語(yǔ)和句子。通常語(yǔ)法規則有兩種:聽(tīng)寫(xiě)語(yǔ)法(DictationGrammer)和命令控制語(yǔ)法(CommandandControlGrammer)。聽(tīng)寫(xiě)語(yǔ)法用于連續語(yǔ)音識別,可以識別出引擎詞典中大量的詞匯;命令控制語(yǔ)法用于識別用戶(hù)自定義的詞匯。
IspPhrase接口:通過(guò)這個(gè)接口,應用程序可以獲得識別信息,如:如識別結果、識別的規則、語(yǔ)義標示和屬性信息等。
IspAudioPlug接口:通過(guò)這個(gè)接口,應用程序可以將內存中的語(yǔ)音數據送到語(yǔ)音識別引擎,進(jìn)行識別。
4.2 識別模塊的具體實(shí)現
由于命令控制語(yǔ)法方式可以限制識別的詞匯量,并且這種識別技術(shù)不需要對說(shuō)話(huà)人事先進(jìn)行訓練,因此在實(shí)際應用中具有較高的魯棒性和較高的識別效率。本系統的識別詞匯包括:“車(chē)輛信息查詢(xún)”、“駕駛證信息查詢(xún)”和26個(gè)英文字母10個(gè)數字,我們首先編寫(xiě)了包含這些特定詞匯的語(yǔ)法文件。
在使用接口函數前,首先調用CoInitialize(NULL)初始化COM對象,然后創(chuàng )建語(yǔ)音識別引擎、語(yǔ)法規則上下文和識別語(yǔ)法,并調用函數LoadCmdFromFile裝載文法識別規則。微軟識別引擎是通過(guò)SAPI由事件觸發(fā)來(lái)通知上層的應用程序??梢哉{用SetInterest來(lái)注冊自己感興趣的事件。系統默認的事件為SPEI_RECOGNITION,該事件表明當前已有識別結果返回,這時(shí)上層應用程序可以通過(guò)調用ISpRecoResult接口的GetText方法獲得識別結果。
微軟識別引擎的語(yǔ)音輸入有多種方式,通常都是通過(guò)聲卡直接輸入,也可以通過(guò)其他語(yǔ)音輸入流。本系統的語(yǔ)音數據是從語(yǔ)音卡取得的實(shí)時(shí)數據,將其存入內存,然后通過(guò)調用ISpAudioPlug的SetData方法將其送入識別引擎。
4.3 系統實(shí)現的難點(diǎn)和解決方案
車(chē)牌的識別詞匯中包含10個(gè)數字和26個(gè)英文字母,這些詞匯的發(fā)音有許多是相同或相近的,比如:E和1,R和2,T和7,D和B,M和N,X和S。這些詞匯在識別時(shí)很容易產(chǎn)生誤識,有的甚至完全不能識別。如果單從算法上來(lái)考慮,是很難解決這些問(wèn)題的。因此我們考慮從系統的流程出發(fā),當用戶(hù)認為識別有誤時(shí),可以輸入識別錯誤的位數,然后系統根據用戶(hù)的輸入,提供幾個(gè)備選結果,供用戶(hù)選擇,這樣極大的提高了系統識別率。
然而Microsoft Speech SDK 5.1在命令控制語(yǔ)法方式下是不提供多選的,只有在聽(tīng)寫(xiě)方式下才提供多選,但是聽(tīng)寫(xiě)方式下的詞匯量又無(wú)法限制。對此我們的想法是這樣的:當系統識別出結果以后,將有效語(yǔ)音段保存起來(lái),并且把識別結果從命令控制方式下的詞匯量中移除,然后將保存有效語(yǔ)音段再次送入識別引擎,當系統識別出結果以后,再次重復以上步驟,直到識別出給定個(gè)數的結果。
5 操作方法
用戶(hù)用清晰、自然的語(yǔ)調說(shuō)出需查詢(xún)信息的類(lèi)別,如:車(chē)輛信息查詢(xún)、駕駛證信息查詢(xún),系統識別模塊識別出結果后,轉入相應的信息查詢(xún)模塊。當用戶(hù)需要查詢(xún)車(chē)輛信息時(shí),首先要求用清晰、較緩慢的語(yǔ)調說(shuō)出車(chē)牌號,系統識別模塊識別出結果后,通過(guò)TTS將結果播放給用戶(hù)。這時(shí)用戶(hù)可以輸入車(chē)牌號碼中識別錯誤的位數,系統根據用戶(hù)的輸入提供7個(gè)備選結果讓用戶(hù)進(jìn)行選擇。用戶(hù)選擇確認無(wú)誤后,系統將結果遞交給后臺數據庫進(jìn)行查詢(xún),并將檢索到的信息播放給用戶(hù)。
6 試驗結果及分析
對于信息類(lèi)別的識別由于其詞匯量少,音節較多,所以識別率很高,達到了100%。但是對于字母和數字的組合識別,由于其詞匯量較多,音節簡(jiǎn)單,而且有大量相同和相近的詞匯,很容易受到噪聲的干擾,所以識別率不是很理想。然而,當我們提供七個(gè)備選結果后,即使在有一定噪音的環(huán)境下,系統的識別率達也能達到96%以上。由此表明該系統是穩定的和實(shí)用的。
評論