基于語音識(shí)別的IVR系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

責(zé)任編輯:hli

2012-01-18 10:07:08

摘自:互聯(lián)網(wǎng)

在使用接口函數(shù)前,首先調(diào)用CoInitialize(NULL)初始化COM對(duì)象,然后創(chuàng)建語音識(shí)別引擎、語法規(guī)則上下文和識(shí)別語法,并調(diào)用函數(shù)LoadCmdFromFile裝載文法識(shí)別規(guī)則。

1 引言

IVR系統(tǒng)(Interactive Voice Response),即交互式語音應(yīng)答系統(tǒng),它被應(yīng)用于呼叫中心(Call Center),以提高呼叫服務(wù)的質(zhì)量、減輕服務(wù)員的工作強(qiáng)度并節(jié)省費(fèi)用,是呼叫中心實(shí)現(xiàn)人機(jī)交互的重要門戶,在傳統(tǒng)的IVR系統(tǒng)中,用戶與系統(tǒng)交互的方式是通過電話的鍵盤。通常,用戶在進(jìn)入IVR系統(tǒng)后,會(huì)聽到相關(guān)的語音提示選單,根據(jù)自己的需要可以按下鍵盤上相關(guān)的按鍵。系統(tǒng)通過DTMF信號(hào)傳送用戶按下的鍵,同時(shí)也將用戶的請(qǐng)求傳送給系統(tǒng),從而觸發(fā)相關(guān)的語音信息。然而,傳統(tǒng)的電話僅能通過DTMF信號(hào),傳送有限的幾個(gè)數(shù)字及符號(hào)按鍵。這使得用戶與系統(tǒng)的交互界面受到很大的限制,同時(shí)也就使得IVR系統(tǒng)的信息查詢范圍變得相當(dāng)狹窄,用戶在實(shí)際使用時(shí)會(huì)感到諸多不便。

隨著計(jì)算機(jī)技術(shù)和人工智能總體技術(shù)的發(fā)展,自然語言理解不斷取得進(jìn)展。語音識(shí)別系統(tǒng)已成為一個(gè)越來越廣泛的應(yīng)用方向。由于電話網(wǎng)絡(luò)的普及性,自然語言處理系統(tǒng)在電話信道上的應(yīng)用已成為最重要的應(yīng)用之一。而且隨著移動(dòng)通信技術(shù)的發(fā)展和人們對(duì)于信息獲取的移動(dòng)性的需求不斷增加,市場(chǎng)對(duì)于電話語音識(shí)別系統(tǒng)的需求也不斷的增加。因此在新一代呼叫中心的IVR系統(tǒng)中引入了語音識(shí)別技術(shù)作為用戶的輸入手段,用戶可以直接用語音與系統(tǒng)進(jìn)行交互,這樣大大提高了工作效率。

2 系統(tǒng)流程及主要模塊

本系統(tǒng)目標(biāo)是支持多用戶并發(fā)查詢車輛違章信息和駕駛證信息。用戶使用自然的語言說出需查詢信息的類別和車牌號(hào)碼,系統(tǒng)識(shí)別后將識(shí)別結(jié)果反饋給用戶,經(jīng)用戶確認(rèn)后,系統(tǒng)把識(shí)別結(jié)果作為后臺(tái)數(shù)據(jù)庫(kù)查詢的關(guān)鍵字進(jìn)行查詢,并將查詢結(jié)果播放給用戶。其流程見圖1。本系統(tǒng)主要包括以下幾個(gè)模塊:

  話路處理模塊:以并發(fā)的方式控制和管理各電話話路。

  語音識(shí)別模塊:負(fù)責(zé)查詢類別和車牌號(hào)碼的識(shí)別。

  后臺(tái)數(shù)據(jù)庫(kù)查詢模塊:將語音識(shí)別的結(jié)果作為數(shù)據(jù)庫(kù)查詢的關(guān)鍵字進(jìn)行查詢。

  圖1 車輛違章信息和駕駛證信息查詢系統(tǒng)流程圖

3 話路處理模塊的實(shí)現(xiàn)

本系統(tǒng)的硬件部分是由電話語音卡和一臺(tái)PC機(jī)組成,語音卡通過其提供的語音處理和信令處理能力,來實(shí)現(xiàn)用戶的接入請(qǐng)求和掛機(jī)信號(hào)的檢測(cè),并負(fù)責(zé)錄音和回放語音。本系統(tǒng)采用的是東進(jìn)D161A語音卡。該語音卡可接入16條模擬電話線,提供16路以內(nèi)的話路并行處理能力。其主要功能有:(1)自動(dòng)增益控制及語音信號(hào)的壓擴(kuò)變換;(2)采集和播放各種格式的電話語音信號(hào),實(shí)現(xiàn)A律PCM、μ律PCM、ADPCM等算法;(3)辨識(shí)和產(chǎn)生DTMF信號(hào);(4)ITU-TSS G3傳真功能。

  話路處理的主要任務(wù)是電話振鈴檢測(cè),播放系統(tǒng)提示語音信息,接受用戶的按鍵請(qǐng)求和語音請(qǐng)求,與后臺(tái)數(shù)據(jù)庫(kù)模塊通訊,檢索結(jié)果的語音合成和播放。整個(gè)模塊有點(diǎn)類似于一個(gè)有限狀態(tài)機(jī),在程序設(shè)計(jì)時(shí)要跟蹤系統(tǒng)所處的狀態(tài)進(jìn)行相應(yīng)的動(dòng)作,并進(jìn)入下一個(gè)狀態(tài),其程序流程如圖2所示。

  本系統(tǒng)話路處理模塊的關(guān)鍵部分是語音數(shù)據(jù)的實(shí)時(shí)采集。東進(jìn)語音卡在這方面提供了一系列接口函數(shù),如:StartRecordFile、StartRecordFileNew、VR_StartRecord等。這幾個(gè)函數(shù)都能夠?qū)崿F(xiàn)對(duì)通道的錄音,所不同的是前兩個(gè)函數(shù)將語音數(shù)據(jù)保存到磁盤文件,后一個(gè)函數(shù)則將語音數(shù)據(jù)保存到存儲(chǔ)器緩沖區(qū)。由于我們要實(shí)現(xiàn)的是一個(gè)實(shí)時(shí)語音識(shí)別系統(tǒng),因此我們采用后者來采集語音數(shù)據(jù)。在開始錄音之前,我們首先調(diào)用VR_SetEcrMode函數(shù)啟動(dòng)回聲抑制功能,然后每隔一段時(shí)間調(diào)用一次VR_GetRecordData函數(shù)取得錄音數(shù)據(jù),并將其送入語音識(shí)別引擎。當(dāng)語音識(shí)別引擎有識(shí)別結(jié)果返回時(shí),停止錄音,并根據(jù)識(shí)別結(jié)果轉(zhuǎn)入下一個(gè)狀態(tài)。

  圖2 話路處理流程

4 語音識(shí)別模塊的實(shí)現(xiàn)

語音識(shí)別系統(tǒng)的開發(fā)可以采用基于模板匹配的動(dòng)態(tài)時(shí)間規(guī)整(DTW)、基于統(tǒng)計(jì)參數(shù)模型的隱馬爾可夫模型(HMM),神經(jīng)網(wǎng)絡(luò)等技術(shù),他們都是針對(duì)某些具體應(yīng)用的,其模型參數(shù)的獲得需要對(duì)大規(guī)模的樣本進(jìn)行學(xué)習(xí),對(duì)于非特定人語音識(shí)別往往需要采集數(shù)百人的語音樣本,其工作量是相當(dāng)大的。隨著語音研究的不斷發(fā)展,已經(jīng)出現(xiàn)了眾多的語音識(shí)別開發(fā)工具:如Microsoft Speech SDK,IBM ViaVoice等。他們都提供了語音識(shí)別和語音合成的二次開發(fā)平臺(tái),并且微軟的Speech SDK是完全免費(fèi)的,它具有識(shí)別率高,識(shí)別速度快,可移植性好,支持多種語言等優(yōu)點(diǎn)。因此它被廣泛應(yīng)用于各個(gè)領(lǐng)域。

4.1 Microsoft Speech SDK 5.1簡(jiǎn)介

SAPI SDK是微軟公司免費(fèi)提供的語音應(yīng)用開發(fā)工具包,這個(gè)SDK中包含了語音應(yīng)用設(shè)計(jì)接口(SAPI)、微軟的連續(xù)語音識(shí)別引擎(MCSR)以及微軟的語音合成(TTS)引擎等等。目前的5.1版本一共可以支持3種語言的識(shí)別 (英語,漢語和日語)以及2種語言的合成(英語和漢語)。SAPI中還包括對(duì)于低層控制和高度適應(yīng)性的直接語音管理、訓(xùn)練向?qū)А⑹录?、語法編譯、資源、語音識(shí)別(SR)管理以及TTS管理等強(qiáng)大的設(shè)計(jì)接口。

  語音識(shí)別的功能主要由一系列COM接口協(xié)調(diào)完成。其中主要的接口有下面這些:

  IspRecognizer接口:用于創(chuàng)建語音識(shí)別引擎的實(shí)例,識(shí)別引擎有兩種:獨(dú)占引擎(InProcRecognizer)和共享引擎(SharedRecognizer)。獨(dú)占的引擎對(duì)象是在本程序的進(jìn)程中創(chuàng)建,只能由本應(yīng)用程序使用,而共享的引擎是在一個(gè)單獨(dú)的進(jìn)程中創(chuàng)建,可以供多個(gè)應(yīng)用程序共同使用。

  IspRecoContext接口:主要用于接受和發(fā)送與語音識(shí)別消息相關(guān)的事件消息,裝載和卸載識(shí)別語法資源

  IspRecoGrammar接口:通過這個(gè)接口,應(yīng)用程序可以載入并激活語法規(guī)則,而語法規(guī)則里定義了待識(shí)別的單詞、短語和句子。通常語法規(guī)則有兩種:聽寫語法(DictationGrammer)和命令控制語法(CommandandControlGrammer)。聽寫語法用于連續(xù)語音識(shí)別,可以識(shí)別出引擎詞典中大量的詞匯;命令控制語法用于識(shí)別用戶自定義的詞匯。

  IspPhrase接口:通過這個(gè)接口,應(yīng)用程序可以獲得識(shí)別信息,如:如識(shí)別結(jié)果、識(shí)別的規(guī)則、語義標(biāo)示和屬性信息等。

  IspAudioPlug接口:通過這個(gè)接口,應(yīng)用程序可以將內(nèi)存中的語音數(shù)據(jù)送到語音識(shí)別引擎,進(jìn)行識(shí)別。

4.2 識(shí)別模塊的具體實(shí)現(xiàn)

由于命令控制語法方式可以限制識(shí)別的詞匯量,并且這種識(shí)別技術(shù)不需要對(duì)說話人事先進(jìn)行訓(xùn)練,因此在實(shí)際應(yīng)用中具有較高的魯棒性和較高的識(shí)別效率。本系統(tǒng)的識(shí)別詞匯包括:“車輛信息查詢”、“駕駛證信息查詢”和26個(gè)英文字母10個(gè)數(shù)字,我們首先編寫了包含這些特定詞匯的語法文件。

  在使用接口函數(shù)前,首先調(diào)用CoInitialize(NULL)初始化COM對(duì)象,然后創(chuàng)建語音識(shí)別引擎、語法規(guī)則上下文和識(shí)別語法,并調(diào)用函數(shù)LoadCmdFromFile裝載文法識(shí)別規(guī)則。微軟識(shí)別引擎是通過SAPI由事件觸發(fā)來通知上層的應(yīng)用程序??梢哉{(diào)用SetInterest來注冊(cè)自己感興趣的事件。系統(tǒng)默認(rèn)的事件為SPEI_RECOGNITION,該事件表明當(dāng)前已有識(shí)別結(jié)果返回,這時(shí)上層應(yīng)用程序可以通過調(diào)用ISpRecoResult接口的GetText方法獲得識(shí)別結(jié)果。

  微軟識(shí)別引擎的語音輸入有多種方式,通常都是通過聲卡直接輸入,也可以通過其他語音輸入流。本系統(tǒng)的語音數(shù)據(jù)是從語音卡取得的實(shí)時(shí)數(shù)據(jù),將其存入內(nèi)存,然后通過調(diào)用ISpAudioPlug的SetData方法將其送入識(shí)別引擎。

4.3 系統(tǒng)實(shí)現(xiàn)的難點(diǎn)和解決方案

車牌的識(shí)別詞匯中包含10個(gè)數(shù)字和26個(gè)英文字母,這些詞匯的發(fā)音有許多是相同或相近的,比如:E和1,R和2,T和7,D和B,M和N,X和S。這些詞匯在識(shí)別時(shí)很容易產(chǎn)生誤識(shí),有的甚至完全不能識(shí)別。如果單從算法上來考慮,是很難解決這些問題的。因此我們考慮從系統(tǒng)的流程出發(fā),當(dāng)用戶認(rèn)為識(shí)別有誤時(shí),可以輸入識(shí)別錯(cuò)誤的位數(shù),然后系統(tǒng)根據(jù)用戶的輸入,提供幾個(gè)備選結(jié)果,供用戶選擇,這樣極大的提高了系統(tǒng)識(shí)別率。

  然而Microsoft Speech SDK 5.1在命令控制語法方式下是不提供多選的,只有在聽寫方式下才提供多選,但是聽寫方式下的詞匯量又無法限制。對(duì)此我們的想法是這樣的:當(dāng)系統(tǒng)識(shí)別出結(jié)果以后,將有效語音段保存起來,并且把識(shí)別結(jié)果從命令控制方式下的詞匯量中移除,然后將保存有效語音段再次送入識(shí)別引擎,當(dāng)系統(tǒng)識(shí)別出結(jié)果以后,再次重復(fù)以上步驟,直到識(shí)別出給定個(gè)數(shù)的結(jié)果。

5 操作方法

用戶用清晰、自然的語調(diào)說出需查詢信息的類別,如:車輛信息查詢、駕駛證信息查詢,系統(tǒng)識(shí)別模塊識(shí)別出結(jié)果后,轉(zhuǎn)入相應(yīng)的信息查詢模塊。當(dāng)用戶需要查詢車輛信息時(shí),首先要求用清晰、較緩慢的語調(diào)說出車牌號(hào),系統(tǒng)識(shí)別模塊識(shí)別出結(jié)果后,通過TTS將結(jié)果播放給用戶。這時(shí)用戶可以輸入車牌號(hào)碼中識(shí)別錯(cuò)誤的位數(shù),系統(tǒng)根據(jù)用戶的輸入提供7個(gè)備選結(jié)果讓用戶進(jìn)行選擇。用戶選擇確認(rèn)無誤后,系統(tǒng)將結(jié)果遞交給后臺(tái)數(shù)據(jù)庫(kù)進(jìn)行查詢,并將檢索到的信息播放給用戶。

6 試驗(yàn)結(jié)果及分析

  對(duì)于信息類別的識(shí)別由于其詞匯量少,音節(jié)較多,所以識(shí)別率很高,達(dá)到了100%。但是對(duì)于字母和數(shù)字的組合識(shí)別,由于其詞匯量較多,音節(jié)簡(jiǎn)單,而且有大量相同和相近的詞匯,很容易受到噪聲的干擾,所以識(shí)別率不是很理想。然而,當(dāng)我們提供七個(gè)備選結(jié)果后,即使在有一定噪音的環(huán)境下,系統(tǒng)的識(shí)別率達(dá)也能達(dá)到96%以上。由此表明該系統(tǒng)是穩(wěn)定的和實(shí)用的。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)