基于語音識別的IVR系統(tǒng)的設(shè)計與實現(xiàn)
1 引言
IVR系統(tǒng)(Interactive Voice Response),即交互式語音應答系統(tǒng),它被應用于呼叫中心(Call Center),以提高呼叫服務的質(zhì)量、減輕服務員的工作強度并節(jié)省費用,是呼叫中心實現(xiàn)人機交互的重要門戶,在傳統(tǒng)的IVR系統(tǒng)中,用戶與系統(tǒng)交互的方式是通過電話的鍵盤。通常,用戶在進入IVR系統(tǒng)后,會聽到相關(guān)的語音提示選單,根據(jù)自己的需要可以按下鍵盤上相關(guān)的按鍵。系統(tǒng)通過DTMF信號傳送用戶按下的鍵,同時也將用戶的請求傳送給系統(tǒng),從而觸發(fā)相關(guān)的語音信息。然而,傳統(tǒng)的電話僅能通過DTMF信號,傳送有限的幾個數(shù)字及符號按鍵。這使得用戶與系統(tǒng)的交互界面受到很大的限制,同時也就使得IVR系統(tǒng)的信息查詢范圍變得相當狹窄,用戶在實際使用時會感到諸多不便。
隨著計算機技術(shù)和人工智能總體技術(shù)的發(fā)展,自然語言理解不斷取得進展。語音識別系統(tǒng)已成為一個越來越廣泛的應用方向。由于電話網(wǎng)絡的普及性,自然語言處理系統(tǒng)在電話信道上的應用已成為最重要的應用之一。而且隨著移動通信技術(shù)的發(fā)展和人們對于信息獲取的移動性的需求不斷增加,市場對于電話語音識別系統(tǒng)的需求也不斷的增加。因此在新一代呼叫中心的IVR系統(tǒng)中引入了語音識別技術(shù)作為用戶的輸入手段,用戶可以直接用語音與系統(tǒng)進行交互,這樣大大提高了工作效率。
2 系統(tǒng)流程及主要模塊
本系統(tǒng)目標是支持多用戶并發(fā)查詢車輛違章信息和駕駛證信息。用戶使用自然的語言說出需查詢信息的類別和車牌號碼,系統(tǒng)識別后將識別結(jié)果反饋給用戶,經(jīng)用戶確認后,系統(tǒng)把識別結(jié)果作為后臺數(shù)據(jù)庫查詢的關(guān)鍵字進行查詢,并將查詢結(jié)果播放給用戶。其流程見圖1。本系統(tǒng)主要包括以下幾個模塊:
話路處理模塊:以并發(fā)的方式控制和管理各電話話路。
語音識別模塊:負責查詢類別和車牌號碼的識別。
后臺數(shù)據(jù)庫查詢模塊:將語音識別的結(jié)果作為數(shù)據(jù)庫查詢的關(guān)鍵字進行查詢。
圖1 車輛違章信息和駕駛證信息查詢系統(tǒng)流程圖
3 話路處理模塊的實現(xiàn)
本系統(tǒng)的硬件部分是由電話語音卡和一臺PC機組成,語音卡通過其提供的語音處理和信令處理能力,來實現(xiàn)用戶的接入請求和掛機信號的檢測,并負責錄音和回放語音。本系統(tǒng)采用的是東進D161A語音卡。該語音卡可接入16條模擬電話線,提供16路以內(nèi)的話路并行處理能力。其主要功能有:(1)自動增益控制及語音信號的壓擴變換;(2)采集和播放各種格式的電話語音信號,實現(xiàn)A律PCM、μ律PCM、ADPCM等算法;(3)辨識和產(chǎn)生DTMF信號;(4)ITU-TSS G3傳真功能。
話路處理的主要任務是電話振鈴檢測,播放系統(tǒng)提示語音信息,接受用戶的按鍵請求和語音請求,與后臺數(shù)據(jù)庫模塊通訊,檢索結(jié)果的語音合成和播放。整個模塊有點類似于一個有限狀態(tài)機,在程序設(shè)計時要跟蹤系統(tǒng)所處的狀態(tài)進行相應的動作,并進入下一個狀態(tài),其程序流程如圖2所示。
本系統(tǒng)話路處理模塊的關(guān)鍵部分是語音數(shù)據(jù)的實時采集。東進語音卡在這方面提供了一系列接口函數(shù),如:StartRecordFile、StartRecordFileNew、VR_StartRecord等。這幾個函數(shù)都能夠?qū)崿F(xiàn)對通道的錄音,所不同的是前兩個函數(shù)將語音數(shù)據(jù)保存到磁盤文件,后一個函數(shù)則將語音數(shù)據(jù)保存到存儲器緩沖區(qū)。由于我們要實現(xiàn)的是一個實時語音識別系統(tǒng),因此我們采用后者來采集語音數(shù)據(jù)。在開始錄音之前,我們首先調(diào)用VR_SetEcrMode函數(shù)啟動回聲抑制功能,然后每隔一段時間調(diào)用一次VR_GetRecordData函數(shù)取得錄音數(shù)據(jù),并將其送入語音識別引擎。當語音識別引擎有識別結(jié)果返回時,停止錄音,并根據(jù)識別結(jié)果轉(zhuǎn)入下一個狀態(tài)。
4 語音識別模塊的實現(xiàn)
語音識別系統(tǒng)的開發(fā)可以采用基于模板匹配的動態(tài)時間規(guī)整(DTW)、基于統(tǒng)計參數(shù)模型的隱馬爾可夫模型(HMM),神經(jīng)網(wǎng)絡等技術(shù),他們都是針對某些具體應用的,其模型參數(shù)的獲得需要對大規(guī)模的樣本進行學習,對于非特定人語音識別往往需要采集數(shù)百人的語音樣本,其工作量是相當大的。隨著語音研究的不斷發(fā)展,已經(jīng)出現(xiàn)了眾多的語音識別開發(fā)工具:如Microsoft Speech SDK,IBM ViaVoice等。他們都提供了語音識別和語音合成的二次開發(fā)平臺,并且微軟的Speech SDK是完全免費的,它具有識別率高,識別速度快,可移植性好,支持多種語言等優(yōu)點。因此它被廣泛應用于各個領(lǐng)域。
4.1 Microsoft Speech SDK 5.1簡介
SAPI SDK是微軟公司免費提供的語音應用開發(fā)工具包,這個SDK中包含了語音應用設(shè)計接口(SAPI)、微軟的連續(xù)語音識別引擎(MCSR)以及微軟的語音合成(TTS)引擎等等。目前的5.1版本一共可以支持3種語言的識別 (英語,漢語和日語)以及2種語言的合成(英語和漢語)。SAPI中還包括對于低層控制和高度適應性的直接語音管理、訓練向?qū)А⑹录?、語法編譯、資源、語音識別(SR)管理以及TTS管理等強大的設(shè)計接口。
語音識別的功能主要由一系列COM接口協(xié)調(diào)完成。其中主要的接口有下面這些:
IspRecognizer接口:用于創(chuàng)建語音識別引擎的實例,識別引擎有兩種:獨占引擎(InProcRecognizer)和共享引擎(SharedRecognizer)。獨占的引擎對象是在本程序的進程中創(chuàng)建,只能由本應用程序使用,而共享的引擎是在一個單獨的進程中創(chuàng)建,可以供多個應用程序共同使用。
IspRecoContext接口:主要用于接受和發(fā)送與語音識別消息相關(guān)的事件消息,裝載和卸載識別語法資源
IspRecoGrammar接口:通過這個接口,應用程序可以載入并激活語法規(guī)則,而語法規(guī)則里定義了待識別的單詞、短語和句子。通常語法規(guī)則有兩種:聽寫語法(DictationGrammer)和命令控制語法(CommandandControlGrammer)。聽寫語法用于連續(xù)語音識別,可以識別出引擎詞典中大量的詞匯;命令控制語法用于識別用戶自定義的詞匯。
IspPhrase接口:通過這個接口,應用程序可以獲得識別信息,如:如識別結(jié)果、識別的規(guī)則、語義標示和屬性信息等。
IspAudioPlug接口:通過這個接口,應用程序可以將內(nèi)存中的語音數(shù)據(jù)送到語音識別引擎,進行識別。
4.2 識別模塊的具體實現(xiàn)
由于命令控制語法方式可以限制識別的詞匯量,并且這種識別技術(shù)不需要對說話人事先進行訓練,因此在實際應用中具有較高的魯棒性和較高的識別效率。本系統(tǒng)的識別詞匯包括:“車輛信息查詢”、“駕駛證信息查詢”和26個英文字母10個數(shù)字,我們首先編寫了包含這些特定詞匯的語法文件。
在使用接口函數(shù)前,首先調(diào)用CoInitialize(NULL)初始化COM對象,然后創(chuàng)建語音識別引擎、語法規(guī)則上下文和識別語法,并調(diào)用函數(shù)LoadCmdFromFile裝載文法識別規(guī)則。微軟識別引擎是通過SAPI由事件觸發(fā)來通知上層的應用程序。可以調(diào)用SetInterest來注冊自己感興趣的事件。系統(tǒng)默認的事件為SPEI_RECOGNITION,該事件表明當前已有識別結(jié)果返回,這時上層應用程序可以通過調(diào)用ISpRecoResult接口的GetText方法獲得識別結(jié)果。
微軟識別引擎的語音輸入有多種方式,通常都是通過聲卡直接輸入,也可以通過其他語音輸入流。本系統(tǒng)的語音數(shù)據(jù)是從語音卡取得的實時數(shù)據(jù),將其存入內(nèi)存,然后通過調(diào)用ISpAudioPlug的SetData方法將其送入識別引擎。
4.3 系統(tǒng)實現(xiàn)的難點和解決方案
車牌的識別詞匯中包含10個數(shù)字和26個英文字母,這些詞匯的發(fā)音有許多是相同或相近的,比如:E和1,R和2,T和7,D和B,M和N,X和S。這些詞匯在識別時很容易產(chǎn)生誤識,有的甚至完全不能識別。如果單從算法上來考慮,是很難解決這些問題的。因此我們考慮從系統(tǒng)的流程出發(fā),當用戶認為識別有誤時,可以輸入識別錯誤的位數(shù),然后系統(tǒng)根據(jù)用戶的輸入,提供幾個備選結(jié)果,供用戶選擇,這樣極大的提高了系統(tǒng)識別率。
然而Microsoft Speech SDK 5.1在命令控制語法方式下是不提供多選的,只有在聽寫方式下才提供多選,但是聽寫方式下的詞匯量又無法限制。對此我們的想法是這樣的:當系統(tǒng)識別出結(jié)果以后,將有效語音段保存起來,并且把識別結(jié)果從命令控制方式下的詞匯量中移除,然后將保存有效語音段再次送入識別引擎,當系統(tǒng)識別出結(jié)果以后,再次重復以上步驟,直到識別出給定個數(shù)的結(jié)果。
5 操作方法
用戶用清晰、自然的語調(diào)說出需查詢信息的類別,如:車輛信息查詢、駕駛證信息查詢,系統(tǒng)識別模塊識別出結(jié)果后,轉(zhuǎn)入相應的信息查詢模塊。當用戶需要查詢車輛信息時,首先要求用清晰、較緩慢的語調(diào)說出車牌號,系統(tǒng)識別模塊識別出結(jié)果后,通過TTS將結(jié)果播放給用戶。這時用戶可以輸入車牌號碼中識別錯誤的位數(shù),系統(tǒng)根據(jù)用戶的輸入提供7個備選結(jié)果讓用戶進行選擇。用戶選擇確認無誤后,系統(tǒng)將結(jié)果遞交給后臺數(shù)據(jù)庫進行查詢,并將檢索到的信息播放給用戶。
6 試驗結(jié)果及分析
對于信息類別的識別由于其詞匯量少,音節(jié)較多,所以識別率很高,達到了100%。但是對于字母和數(shù)字的組合識別,由于其詞匯量較多,音節(jié)簡單,而且有大量相同和相近的詞匯,很容易受到噪聲的干擾,所以識別率不是很理想。然而,當我們提供七個備選結(jié)果后,即使在有一定噪音的環(huán)境下,系統(tǒng)的識別率達也能達到96%以上。由此表明該系統(tǒng)是穩(wěn)定的和實用的。