張鶴鳴,鄧 軍
(中國(guó)電子科技集團(tuán)公司第三十研究所,四川 成都 610041)
語音識(shí)別技術(shù),又稱為自動(dòng)語音識(shí)別(Automatic Speech Recognition,ASR),它是以語音為研究對(duì)象,通過語音信號(hào)處理和模式識(shí)別讓機(jī)器理解人類語言,并將其轉(zhuǎn)換為計(jì)算機(jī)可輸入的數(shù)字信號(hào)的一門技術(shù)。語音識(shí)別技術(shù)將繁瑣的輸入勞動(dòng)交給機(jī)器處理,在解放人類雙手的同時(shí),還可以有效提高人機(jī)交互效率,在信息化高度發(fā)達(dá)的今天,已經(jīng)成為信息社會(huì)不可或缺的組成部分。
語音識(shí)別引擎是ASR技術(shù)的核心模塊,它可以工作在識(shí)別模式和命令模式。在識(shí)別模式下,引擎系統(tǒng)在后臺(tái)提供詞庫和識(shí)別模板,用戶無需對(duì)識(shí)別語法進(jìn)行改動(dòng),根據(jù)引擎提供的語法模式即可完成既定的人機(jī)交互操作;但在命令模式下,用戶需要構(gòu)建自己的語法詞典,引擎系統(tǒng)根據(jù)用戶構(gòu)建的語法詞典,將匹配度最高的識(shí)別結(jié)果提供給用戶。
今天,ASR技術(shù)已經(jīng)被應(yīng)用到各種智能終端,為人們提供了一種嶄新的人機(jī)交互體驗(yàn),但多數(shù)都是基于在線引擎實(shí)現(xiàn)。本文針對(duì)離線網(wǎng)絡(luò)環(huán)境,結(jié)合特定領(lǐng)域內(nèi)的應(yīng)用場(chǎng)景,提出了一套實(shí)用性強(qiáng),成本較低的語音識(shí)別解決方案,實(shí)現(xiàn)非特定人連續(xù)語音識(shí)別功能。第二章本文從方案的主要功能模塊入手,對(duì)涉及到的關(guān)鍵要素進(jìn)行詳細(xì)的分析描述,同時(shí)對(duì)實(shí)現(xiàn)過程中的關(guān)鍵事項(xiàng)進(jìn)行具體分析,并提出應(yīng)對(duì)措施。第三章根據(jù)方案設(shè)計(jì)語音撥號(hào)軟件,并對(duì)語音撥號(hào)軟件的功能進(jìn)行科學(xué)的測(cè)試驗(yàn)證。最后一章對(duì)全文進(jìn)行總結(jié)。
(1)主要功能劃分
在特定領(lǐng)域內(nèi)的語音識(shí)別,主要以命令發(fā)布為主,以快捷實(shí)現(xiàn)人機(jī)交互為目的。比如在電話通信領(lǐng)域,我們常以“呼叫某某某”、“幫我查找某某某電話”為語音輸入,這些輸入語音語法結(jié)構(gòu)單一,目的明確,場(chǎng)景性較強(qiáng),本方案決定采用命令模式實(shí)現(xiàn)語音識(shí)別功能。方案主要包括四個(gè)功能模塊:語音控制模塊、音頻采集模塊、語音識(shí)別離線引擎和應(yīng)用數(shù)據(jù)庫模塊,各模塊的主要功能及要求如圖1所示。
圖1 低成本語音識(shí)別解決方案功能模塊
語音控制模塊作為方案實(shí)現(xiàn)的核心模塊,主要用于實(shí)現(xiàn)語音識(shí)別的控制管理功能,包括語法詞典的構(gòu)建、語音識(shí)別引擎的初始化配置、音頻數(shù)據(jù)的采集控制和基本語義的解析等;應(yīng)用數(shù)據(jù)庫是用戶的數(shù)據(jù)中心,作為語音識(shí)別數(shù)據(jù)的源頭,語音控制模塊從中提取用戶關(guān)鍵數(shù)據(jù),并以此為基礎(chǔ)構(gòu)建本地語法詞典;語音識(shí)別離線引擎是語音轉(zhuǎn)換為文字的關(guān)鍵模塊,支持在離線的情況下,根據(jù)本地構(gòu)建的語法網(wǎng)絡(luò),完成非特定人連續(xù)語音識(shí)別功能,同時(shí)具備語音數(shù)據(jù)前、后端點(diǎn)檢測(cè)、聲音除噪處理、識(shí)別門限設(shè)置等基本功能;音頻采集在本方案中屬于輔助模塊,具備靈活、便捷的語音控制接口,支持在不同采樣要求和采樣環(huán)境中,對(duì)實(shí)時(shí)音頻數(shù)據(jù)的采集。
(2)關(guān)鍵要素分析
本方案工作于離線的網(wǎng)絡(luò)環(huán)境中,語音數(shù)據(jù)的采集、識(shí)別和語義的解析等功能都在終端完成,因此設(shè)備性能的優(yōu)化和語音識(shí)別的精準(zhǔn)度尤為重要。在具體的實(shí)現(xiàn)過程中,存在以下要素需要重點(diǎn)關(guān)注。
1)用戶構(gòu)建的語法文檔在引擎系統(tǒng)初始化時(shí),編譯成語法網(wǎng)絡(luò)送往語音識(shí)別器,語音識(shí)別器根據(jù)語音數(shù)據(jù)的特征信息,在識(shí)別網(wǎng)絡(luò)上進(jìn)行路徑匹配,識(shí)別并提取用戶語音數(shù)據(jù)的真實(shí)信息,因此語法文檔的語法結(jié)構(gòu)是否合理,直接關(guān)系到識(shí)別準(zhǔn)確率的高低;
2)應(yīng)用數(shù)據(jù)庫是作為語音識(shí)別數(shù)據(jù)的源頭,其中的關(guān)鍵數(shù)據(jù)如果有變化,需要及時(shí)同步更新本地語法詞典,以保證離線語音識(shí)別的精準(zhǔn)度;
3)音頻數(shù)據(jù)在離線引擎中的解析占用CPU資源,因此音頻采集模塊在數(shù)據(jù)采集時(shí),需要開啟靜音檢測(cè)功能,將首端的靜音切除,不僅可以為語音識(shí)別排除干擾,同時(shí)能有效降低離線引擎對(duì)處理器的占用率;
4)為保證功能的實(shí)用性和語音識(shí)別的精準(zhǔn)度,需要在語音采集過程中增加異常處理操作。首先在離線引擎中需要開啟后端靜音檢測(cè)功能,若在規(guī)定時(shí)間內(nèi),未收到有效語音數(shù)據(jù),則自動(dòng)停止本次語音識(shí)別;其次,需要在離線引擎中開啟識(shí)別門限控制,如果識(shí)別結(jié)果未能達(dá)到所設(shè)定的門限,則本次語音識(shí)別失??;
5)通過語音識(shí)別接口,向引擎系統(tǒng)獲取語音識(shí)別結(jié)果時(shí),需要反復(fù)調(diào)用以取得引擎系統(tǒng)的識(shí)別狀態(tài),在這個(gè)過程中,應(yīng)適當(dāng)降低接口的調(diào)用頻率,以防止CPU資源的浪費(fèi)。
語音呼叫軟件廣泛應(yīng)用于電話通信領(lǐng)域,是一款典型的在特定領(lǐng)域內(nèi),實(shí)現(xiàn)非特定人連續(xù)語音識(shí)別功能的應(yīng)用軟件。由于其部署場(chǎng)景較多,部分場(chǎng)景處于離線的網(wǎng)絡(luò)環(huán)境中,適合采用本方案進(jìn)行軟件設(shè)計(jì)。
在語音呼叫軟件中,語音識(shí)別準(zhǔn)確率的高低是影響方案可行性的關(guān)鍵要素,離線引擎作為語音識(shí)別的核心,它的工作性能直接關(guān)系到軟件的可用性。本軟件在實(shí)現(xiàn)過程中,選用業(yè)界口碑較好的訊飛離線語音識(shí)別庫,該庫采用巴科斯范式語言描述語音識(shí)別的語法,可以支持的離線命令詞的集合,滿足語音撥號(hào)軟件的工作需求。其中,編寫的語法文檔[1]主要部分如下:
!start <callstart>;
<callstart>:[<want>]<dial>;
<want>:我想 |我要 |請(qǐng) |幫我 ;
<dial>:<dialpre><contact>[<dialsuf>];
<dialpre>:給 !id(10001)|打給 !id(10001)|打電話給!id(10001)|撥打!id(10001)|呼叫!id(10001);
<dialsuf>:打電話!id(10001)|打個(gè)電話 !id(10001)|撥打電話!id(10001)|撥電話!id(10001)|撥個(gè)電話!id(10001)|的電話!id(10001);
<contact>:丁偉 |李平 ;
本文件覆蓋了電話呼叫過程中的基本語法,其中<contact>中的數(shù)據(jù),需要根據(jù)用戶數(shù)據(jù)庫進(jìn)行補(bǔ)充,其它 <want>、<dialpre>、<dialsuf> 中的內(nèi)容,用戶根據(jù)自己的生活習(xí)慣和工作需要進(jìn)行完善。另外,語音撥號(hào)軟件的應(yīng)用數(shù)據(jù)庫為電話薄數(shù)據(jù)庫,電話薄中的用戶姓名是構(gòu)建語法文檔的關(guān)鍵數(shù)據(jù);音頻采集模塊采用增強(qiáng)型Linux聲音架構(gòu)ALSA庫實(shí)現(xiàn)。
圖2 語音撥號(hào)軟件工作流程
語音撥號(hào)軟件的工作流程如圖2所示,電話薄數(shù)據(jù)庫、語音識(shí)別控制模塊、訊飛離線識(shí)別引擎和ALSA庫相互配合,共同完成語音識(shí)別的啟動(dòng)、識(shí)別和結(jié)束。具體流程如下:
(1)構(gòu)建BNF文檔:控制模塊搜索本地電話薄數(shù)據(jù)庫,導(dǎo)出用戶數(shù)據(jù)信息,按照巴科斯范式語法,生成基于本地?cái)?shù)據(jù)庫的語法文檔;
(2)初始化離線引擎:初始化訊飛離線語音庫,根據(jù)本地生成的語法文檔,構(gòu)建語法網(wǎng)絡(luò),輸入語音識(shí)別器中;
(3)初始化聲音驅(qū)動(dòng):根據(jù)離線引擎的要求,初始化ALSA庫;
(4)啟動(dòng)數(shù)據(jù)采集:如果有用戶有語音識(shí)別請(qǐng)求,語音控制模塊啟動(dòng)實(shí)時(shí)語音采集程序;
(5)靜音切除:在語音數(shù)據(jù)的前端,可能存在部分靜音數(shù)據(jù),ALSA庫開啟靜音檢測(cè)功能,將靜音數(shù)據(jù)切除后傳送至語音識(shí)別引擎;
(6)語音識(shí)別狀態(tài)檢測(cè):語音控制模塊定時(shí)檢測(cè)引擎系統(tǒng)的語音識(shí)別狀態(tài),當(dāng)離線引擎有結(jié)果輸出時(shí),提取語音識(shí)別結(jié)果;
(7)結(jié)束語音采集:語音控制模塊通知ALSA,終止實(shí)時(shí)語音數(shù)據(jù)的采集;
(8)語義解析:語音控制模塊根據(jù)語音識(shí)別的結(jié)果,完成語義解析,根據(jù)<dialpre>和<dialsuf>的內(nèi)容,確定用戶需求,根據(jù)<contact>的內(nèi)容,確認(rèn)用戶信息;
(9)語音識(shí)別結(jié)束:語音控制模塊將語義解析的結(jié)果上傳至用戶模塊,同時(shí)結(jié)束本次語音識(shí)別。
語音識(shí)別準(zhǔn)確率的高低是影響方案可行性的關(guān)鍵要素,根據(jù)項(xiàng)目需求,分別在中等、低等噪音的辦公室環(huán)境中,對(duì)語音撥號(hào)軟件功能進(jìn)行科學(xué)的測(cè)試驗(yàn)證。測(cè)試人員共20人,主要來自四川、陜西、河南等地,以正常交流的語速進(jìn)行測(cè)試。測(cè)試數(shù)據(jù)中包括90組電話薄數(shù)據(jù)庫中存在的數(shù)據(jù),10組數(shù)據(jù)庫中不存在的數(shù)據(jù)[2],測(cè)試結(jié)果如表1所示。
表1 語音撥號(hào)軟件測(cè)試結(jié)果
本文提出的語音識(shí)別解決方案,可以在離線的環(huán)境中實(shí)現(xiàn)連續(xù)語音識(shí)別功能,不僅適應(yīng)性較強(qiáng),而且能夠降低使用成本。根據(jù)表1的測(cè)試結(jié)果表明,本方案語音識(shí)別正確率較高,可以滿足項(xiàng)目需求并達(dá)到實(shí)用的程度。