馮 君
(濱州學(xué)院,山東 濱州 256603)
如今手機(jī)已成為人們?nèi)粘I钪胁豢苫蛉钡囊徊糠?,智能手機(jī)提供給用戶與之進(jìn)行交互的多種方式,但最自然的交互方式仍然是語音。智能手機(jī)市場提供了許多關(guān)于語音識別的應(yīng)用。本文基于科大訊飛語音識別引擎實(shí)現(xiàn)了一款語音識別應(yīng)用VoiceMessage。應(yīng)用的主要目標(biāo)是允許用戶輸入語音信息并將信息轉(zhuǎn)換為期望的文本信息,從而使得用戶可以不用打字就可以快速地得到文本信息,大大節(jié)省了時(shí)間。
現(xiàn)代語音識別技術(shù)主要采用模式識別的基本流程,如圖1所示:
圖1 語音識別流程
首先準(zhǔn)備要訓(xùn)練的訓(xùn)練數(shù)據(jù)集,然后提取數(shù)據(jù)的特征并且利用數(shù)據(jù)的這些特征進(jìn)行模型的訓(xùn)練,最后根據(jù)訓(xùn)練好的模型進(jìn)行測試應(yīng)用。
在模型訓(xùn)練好了之后,對待測的語音信號進(jìn)行信號處理,從中提取出有利于識別的信息,也就是特征提取。隨后,以音頻信號為輸入形式,進(jìn)行語音增強(qiáng)處理,消除噪音,反映語音的本質(zhì),完成語音信號從時(shí)域到頻域的轉(zhuǎn)化,并將特征提取給聲學(xué)模型,生成聲學(xué)模型得分,用語言模型決定序列的可能性,也即語言模型得分。解碼器計(jì)算這兩個(gè)得分,識別結(jié)果就是輸出分?jǐn)?shù)最高的詞序列,如圖2所示。
圖2 識別結(jié)果計(jì)算流程
用公式表示如下:
其中W表示識別的文本序列,X表示語音數(shù)據(jù),基于給定的X,語音識別求得最大后驗(yàn)概率的文本序列,利用貝葉斯公式將此文本序列的后驗(yàn)概率展開為兩部分,一是先驗(yàn)概率,另一個(gè)是似然概率,然后對這兩部分進(jìn)行建模,得出語言模型和聲學(xué)模型,再在搜索空間Ω中,通過其得分,求取概率最大的文本序列。
從物理意義來理解語言模型就是體現(xiàn)字或詞出現(xiàn)的先驗(yàn)概率,從各種候選詞順序、詞的語義信息狀態(tài)序列中,判斷哪一個(gè)比較合理。
傳統(tǒng)語言模型采用N-gram方式:
語言模型實(shí)際是對文本序列的先驗(yàn)概率進(jìn)行建模,一個(gè)詞出現(xiàn)的概率與第一個(gè)詞后,第二個(gè)詞出現(xiàn)的概率相乘,依此類推。
基于N-階馬爾科夫假設(shè)的全概率空間:就是每個(gè)詞出現(xiàn)的概率只關(guān)聯(lián)到最近的N個(gè)歷史詞。那么公式2中的每一項(xiàng)就可以做如下近似:
則有:
聲學(xué)模型的建模也即對似然概率部分的建模,即給定文本序列之后生成對應(yīng)語音的概率,是整個(gè)語音識別中最核心的部分,也是最復(fù)雜的部分。某些訓(xùn)練數(shù)據(jù)由于具有共性,可共享給不同的建模單元,為了避免這個(gè)問題,需要轉(zhuǎn)換文本序列成為對應(yīng)的發(fā)音序列,由于發(fā)音的不定長特性,就需要引入HMM模型,將每一個(gè)語音幀都對應(yīng)于HMM模型的每一個(gè)狀態(tài),如此無論多長的語音幀都能表達(dá)為HMM模型中的一個(gè)狀態(tài)序列,最后只要將每一個(gè)狀態(tài)與語音序列中的每一幀進(jìn)行一一對應(yīng),再將對應(yīng)關(guān)系以一定的概率來表達(dá)。由于語音是非常復(fù)雜多變的,不同說話人在說同樣句子時(shí)會(huì)表現(xiàn)出非常大的差異性,而在不同的環(huán)境噪聲的情況下,這樣的語音也是表現(xiàn)出非常多的復(fù)雜性,因此最后特征狀態(tài)序列到語音的建模通常會(huì)采用比較復(fù)雜的概率模型來實(shí)現(xiàn)。在1980年左右采用GMM-HMM即高斯混合模型的方式來表達(dá)概率分布,由于當(dāng)時(shí)的計(jì)算條件,數(shù)據(jù)量都不是很大,所以GMM是較好的方案,它能夠有效的在數(shù)據(jù)量較少的情況下進(jìn)行聲學(xué)模型的訓(xùn)練。在2010左右,出現(xiàn)了新的替代方案DNN-HMM,DNN也是經(jīng)歷了幾個(gè)階段的發(fā)展,首先是前饋神經(jīng)網(wǎng)絡(luò),后來發(fā)現(xiàn)其對時(shí)序的表達(dá)并不是很好,所以后來又提出了遞歸神經(jīng)網(wǎng)絡(luò),它將前后時(shí)刻的神經(jīng)網(wǎng)絡(luò)的狀態(tài)進(jìn)行了連接,從而使得在每一時(shí)刻都能看到非常長的上下文的知識,從而提高了概率模型的表達(dá)能力,為了更高的穩(wěn)定性,后來又提出了卷積神經(jīng)網(wǎng)絡(luò)做聲學(xué)模型,卷積神經(jīng)網(wǎng)絡(luò)能夠看到長時(shí)以來的同時(shí),又通過空間結(jié)構(gòu)逐層遞進(jìn)的關(guān)系使得聲學(xué)模型會(huì)更加的穩(wěn)定,也是逐漸成為現(xiàn)代最杰出的聲學(xué)模型結(jié)構(gòu)。
語音識別通常是采用動(dòng)態(tài)規(guī)劃算法來進(jìn)行識別的,在語音識別具體的應(yīng)用中,采用的是Viterbi搜索的方法,語音識別問題就是變相求解最優(yōu)路徑。對于求出全部中間路徑節(jié)點(diǎn)的Viterbi的值,其計(jì)算公式為:
有了該值之后,就可以從路徑的最后一個(gè)節(jié)點(diǎn)開始往前不斷的回溯找到最優(yōu)路徑。
首先,使用Androidstudio創(chuàng)建一個(gè)新項(xiàng)目,切換到project視圖。將下載的Android_iat1140_5ea3dfe2(后面的編號和APPID是一致的)中l(wèi)ibs目錄中的Msc.jar包復(fù)制到新建項(xiàng)目的libs目錄下,并且右鍵jar選擇 Add As Library。
然后,右鍵點(diǎn)擊main,依次選擇new->Directory,建立一個(gè)名為jniLibs的目錄,將下載好的SDK中的libs目錄下剩下的文件全部復(fù)制到j(luò)niLibs目錄中。
接著,集成資源文件,右鍵點(diǎn)擊main,依次選擇new->Directory,建立 assets 目錄,然后將 Android_iat1140_5ea3dfe2下assets下的所有文件復(fù)制到剛剛創(chuàng)建的assets目錄中。
注意要在AndroidManifest.xml文件中添加如下訪問權(quán)限,如圖3所示。
圖3 需要添加的網(wǎng)絡(luò)訪問權(quán)限
初始化即創(chuàng)建語音配置對象,只有初始化后才可以使用MSC的各項(xiàng)服務(wù)。建議將初始化放在程序入口處 (如 Application、Activity的 onCreate方法),初始化代碼如下:
SpeechUtility.createUtility (context,SpeechConstant.APPID+"=5ea3dfe2");
UI設(shè)計(jì)如圖4所示,最外層采用相對布局RelativeLayout,內(nèi)嵌兩個(gè)水平方向的線性布局Linear-Layout,利用屬性android:weight實(shí)現(xiàn)屏幕適配。
在VoiceMessageActivity類中封裝initSpeech方法,核心代碼如下:
圖4 UI布局
識別的結(jié)果是以JSON格式返回的,如語音輸入“今天天氣很好”,返回的JSON數(shù)據(jù)為:
{"sn":1,"ls":false,"bg":0,"ed":0,"ws":[{"bg":80,"cw":[{"sc":0.0,"w":"今天"}]},{"bg":140,"cw":[{"sc":0.0,"w":"天氣"}]},{"bg":188,"cw":[{"sc":0.0,"w":"很好"}]}]}
{"sn":2,"ls":true,"bg":0,"ed":0,"ws": [{"bg":0,"cw":[{"sc":0.0,"w":"。"}]}]}
可以使用在線JSON查看器如https://www.sojson.com/editor.html查看格式化之后的數(shù)據(jù)。
各個(gè)JSON字段的含義如表1所示。
表1 JSON字段說明
首先,使用gson技術(shù)對返回的JSON格式的數(shù)據(jù)進(jìn)行解析,選擇File-Project Structure-Dependencies,搜索 gson,添加 gson 包。
然后,封裝Sound類,代碼如下“
最后,封裝解析數(shù)據(jù)的方法parseSound,代碼如下:
首先,在語音對應(yīng)的ImageView組件中增加onClick屬性,代碼如下:
然后,在VoiceMessageActivity中定義voicetomessage方法
經(jīng)測試,如果在 voicetomessage方法中直接調(diào)用initSpeech方法,每次運(yùn)行應(yīng)用程序時(shí),都會(huì)引發(fā)SecurityException,調(diào)試器的錯(cuò)誤如下:
java.lang.SecurityException:“gps”location provider requiresACCESS_COARSE_LOCATION orACCESS_FINE_LOCATIONpermission.
這是因?yàn)閍ndroid6.0之后對一些危險(xiǎn)權(quán)限必須運(yùn)行時(shí)動(dòng)態(tài)權(quán)限申請,所以在
VoiceMessageActivity中增加動(dòng)態(tài)權(quán)限申請的方法checkVoice(),當(dāng)用戶點(diǎn)擊語音識別圖片時(shí),首先彈出動(dòng)態(tài)權(quán)限認(rèn)證提示框,只有用戶通過了相應(yīng)的權(quán)限,才會(huì)彈出初始化語音對話框。
語音識別在移動(dòng)設(shè)備中的集成使得智能手機(jī)的使用更加的便捷,使用這樣的系統(tǒng)開啟了無數(shù)的可能性。VoiceMessage應(yīng)用將語音轉(zhuǎn)化為文本信息給指定的聯(lián)系人發(fā)送短消息,除了為移動(dòng)設(shè)備的當(dāng)前用戶提供便利的操作之外,老年人和有各種殘疾的人將有機(jī)會(huì)參與到科技活動(dòng)中,感受到智能手機(jī)的好處。