杜宇斌,趙 磊
(山東理工大學 計算機科學與技術學院, 山東 淄博 255049)
語音識別( Speech Recognition)是指讓機器聽懂人說的話,即準確地識別出語音的內容,根據(jù)其表達的信息來執(zhí)行人的各種意圖。它與計算機技術、語音語言處理、聲音信號處理、人工智能和概率統(tǒng)計學都有密切的聯(lián)系。近20年來,語音識別技術取得顯著進步,已經(jīng)開始走向市場[1]。但其遠不能達到人們理想的使用狀態(tài),只能在特定的領域發(fā)揮作用。這也使得語音識別技術的發(fā)展充滿前景和應用價值。
語音識別技術的研究始于20世紀50年代,由美國AT&T Bell實驗室最先實現(xiàn)了可識別10個英文數(shù)字的第一個語音識別系統(tǒng)Audrey。但真正取得實質性進展,并將其作為一個重要的課題開展研究則是在60年代末70年代初。這一時期的語音識別主要基于模型匹配原理,研究的領域局限在特定人、小詞匯表的孤立詞識別,實現(xiàn)了基于線性預測倒譜和DTW(Dynamic Time Warping,動態(tài)時間歸整)技術的特定人孤立詞語音識別系統(tǒng);同時提出了矢量量化(VQ—Vector Quantization)和隱馬爾科夫模型(HMM)理論[2],李開復博士于1988年發(fā)表了第一個基于隱馬爾科夫模型的語音識別系統(tǒng)Sphinx。最高水平的語音識別技術應該是非特定人類無限量詞匯的連續(xù)語音識別系統(tǒng)。本文在研究孤立詞語音識別的同時,也是為大詞匯量語音識別和連續(xù)語音識別奠定基礎。本文研究語音識別的原理、方法和工具,運用語音開發(fā)工具包HTK搭建非特定人、漢語小詞匯量的孤立詞語音識別系統(tǒng)。
語音識別的主要方式,是將一段段的語音信號轉換成相應的電腦能識別的符號或文本信息。語音識別系統(tǒng)主要由特征提取、聲學模型、語言模型和解碼四部分組成,如圖1所示。
圖1 語音識別組成部分Fig.1 Composition of speech recognition
1)特征提?。喝怂l(fā)出的語音信號無法直接被計算機識別利用,需要進行一系列的預處理。將聲音中最有效的信息提取出來,把其他無用的信息除掉(背景噪音、情緒等等)。盡可能地將具有辨識度的聲音保留下來,為后面的模型訓練提供可以處理的特征向量。預處理工作包括對所采集的聲音信號進行預加重,分幀,加窗等操作,將語音信號從時域轉換到頻域[3]。利用DCT(Discrete Cosine Transform,離散余弦變換)等手段提取特征參數(shù)。
2)聲學模型:每一個單詞的發(fā)音方式都有所不同,需要對不同的單詞分別建立其聲學模型。將上一步中提取的特征參數(shù)放入合適的聲學模型中,聲學模型根據(jù)聲學特性計算每一個特征向量在聲學特征上的參數(shù)值。經(jīng)過訓練,得到每個單詞所對應的聲學模型。
3)語言模型:人的交流都遵循一定的語法規(guī)則,語言模型可以告知計算機如何理解人的說話方式。根據(jù)語言學相關的理論和語法規(guī)則,計算該聲音信號對應詞組序列的概率。根據(jù)建立好的字典和語料庫,對詞組序列進行解碼,輸出聲學模型最有可能對應的字符序列。
4)解碼:將待識別的語音信號進行特征提取,與聲學模型和語言模型進行對比匹配得到識別結果。
特征提取作為語音識別的首要步驟,提取出的特征參數(shù)對模型訓練和匹配解碼有直接影響。梅爾倒譜系數(shù)(Mel-scale Frequency Cepstral Coefficients,簡稱MFCC)作為特征提取的重要方法,在語音識別領域有很好的表現(xiàn)。它的優(yōu)勢在于做到了基于人耳的聽覺特性,先將線性頻譜映射到基于聽覺感知的梅爾非線性頻譜中,然后轉換到倒譜上。由于該特征不依賴于信號的性質,不會對輸入信號做出任何假設和限制[4]。因此,MFCC參數(shù)可以更好地保留語音信號中的有效信息,并且穩(wěn)定。自20世紀90年代以來一直應用于語音信號的特征提取。
梅爾頻率倒譜系數(shù)的提取主要有以下幾個步驟:
1)對原始信號進行預加重、分幀和加窗的預處理工作。
2)每一個所加的短時分析窗,通過傅里葉變換(FFT)得到對應的頻譜。
3)將上面的頻譜通過梅爾濾波器組得到梅爾頻譜。
4)對梅爾頻譜進行倒譜分析,獲得梅爾頻率倒譜系數(shù)MFCC作為該幀語音的特征參數(shù)。
隱馬爾科夫模型( Hidden Markov Model, HMM)屬于統(tǒng)計學和概率學的混合模型,用于描述具有隱含未知參數(shù)的馬爾科夫過程,是結構最簡單的動態(tài)貝葉斯網(wǎng)絡。由于HMM在語音識別中具有良好的穩(wěn)定性和識別率,被視為經(jīng)典模型一直沿用。
隱馬爾科夫模型模擬的是雙重隨機過程,與語音信號相似,包括可觀測的隨機過程和隱藏的隨機過程,如圖2所示。
圖2 隱馬爾可夫模型的隨機過程Fig.2 Stochastic process of Hidden Markov Model
上面空白圓圈xt-2,xt-1,xt表示每個時刻的隱含狀態(tài),下面陰影圓圈yt-2,yt-1,yt表示每個時刻的可見狀態(tài),上面的空白圓圈構成了隱含隨機狀態(tài)鏈,也就是隱馬爾科夫鏈;下面的陰影圓圈構成了可見狀態(tài)鏈,也就是馬爾科夫鏈。上方的橫向箭頭代表了隱含狀態(tài)之間的轉換概率,而下方的縱向箭頭則代表由隱含狀態(tài)到可見狀態(tài)的轉換概率。HMM可以用5個元素來描述,包括2個狀態(tài)集合(隱含狀態(tài)、可觀測狀態(tài))和3個概率矩陣(初始狀態(tài)概率矩陣、隱含狀態(tài)轉移概率矩陣、觀測狀態(tài)轉移概率矩陣)[5]。
在HMM中,按觀測狀態(tài)轉移概率分布可分為離散HMM(Discrete HMM,DHMM)和連續(xù)HMM(Continuous HMM,CHMM):DHMM符合上文所述的HMM基本結構,觀測狀態(tài)轉移概率是按觀測狀態(tài)離散分布的,對應于一個轉移概率矩陣;而CHMM則有所不同,它的狀態(tài)轉移概率分布是連續(xù)值,可以用概率密度函數(shù)表示。在孤立詞的語音識別中,HTK采用連續(xù)HMM,用高斯概率密度函數(shù)表示轉移概率。
語音樣本的錄制和標記采用了HTK提供的HSLab函數(shù),它提供了一個集成的聲音處理工具,可以將語音樣本保存為sig格式文件。 在界面中顯示錄制好的聲音波形,其中幅值較高的部分是共振峰,保存了語音的關鍵信息。通過語音標記,將其中的有效信息截取出來進行模型訓練。每一條語音需要做3個標記:以單詞“啟動”的聲音為例,3個標記分別為語音段的標記“qidong”和其前后各一個靜音段的標記“sil”。在作標記的過程中語音段不能重疊,否則在模型訓練中該樣本數(shù)據(jù)無法被用來訓練。本系統(tǒng)對每個單詞采樣10次,每個單詞由4人參與錄制,共20個單詞總計200個樣本。標記好的語音數(shù)據(jù)如圖3所示。
圖3 語音的標注Fig.3 Voice annotation
在HTK中提取的特征參數(shù)是梅爾頻率倒譜系數(shù)(MFCC),一共需要定義39個特征參數(shù),包括13個MFCC系數(shù),13個一階差分系數(shù)和13個二階差分系數(shù)。在特征提取之前需要編寫特征參數(shù)配置文件analysis.conf,具體內容如下:
SOURCEFORMAT=HTK #指定輸入語音的格式
TARGETKIND=MFCC_0_D_A #定義梅爾倒譜參數(shù)
WINDOWSIZE=250000.0 #定義窗長為25 ms
TARGETRATE=100000.0 #定義相鄰窗的滑動長度
NUMCEPS=13 #定義13個MFCC特征參數(shù)
USEHAMMING=T #定義窗函數(shù)為漢寧窗
PREEMCOEF=0.97 #設置預加重系數(shù)
NUMCHANS=26 #設置梅爾頻譜的頻道數(shù)量
CEPLIFTER=22 #設置倒譜所用梅爾濾波器個數(shù)
HTK采用Hcopy函數(shù)進行特征提取,在命令行輸入Hcopy-A-D-C analysis.conf-S targetlist.txt完成對目標語音數(shù)據(jù)的特征提取工作。其中,analysis.conf是MFCC參數(shù)配置文件,targetlist.txt是數(shù)據(jù)位置配置文件。將所要提取的語音文件的路徑名和提取后文件的存放路徑一同寫入文件targetlist.txt中,Hcopy函數(shù)依據(jù)此文件中的路徑名抽取相應位置的語音文件,將提取出的特征參數(shù)以特定的數(shù)據(jù)格式儲存為MFCC文件,保存在targetlist.txt文件所指定的位置。需要對錄制的200個樣本都進行特征提取,得到200個特征文件。HTK生成的MFCC文件由頭文件和數(shù)據(jù)域組成,數(shù)據(jù)域中包括幀數(shù)、采樣周期、每一幀的字節(jié)數(shù)、參數(shù)類型和參數(shù)值等[6]。
2.3.1 模型初始化
HTK采用隱馬爾科夫模型進行建模,需要定義模型的5個基本元素:觀測狀態(tài)、隱含狀態(tài)、初始概率矩陣、隱含狀態(tài)轉移矩陣、觀測狀態(tài)轉移矩陣[7]。在本系統(tǒng)中,每一個訓練樣本MFCC文件為一個觀測狀態(tài),包含39維的特征向量;隱含狀態(tài)由模型初始化定義,與觀測狀態(tài)對應;因HTK要求有一個初始狀態(tài)節(jié)點,所以初始概率矩陣無需給出;隱含狀態(tài)轉移矩陣表示10個隱含狀態(tài)之間的轉移概率,可按要求設定其值;觀測狀態(tài)轉移矩陣由高斯分布的均值矩陣和方差矩陣替代,每個狀態(tài)只包含1個高斯分布,由模型訓練得到高斯密度函數(shù)[8]。
模型訓練需要手工對每一個單詞建立HMM初始模型。除此之外,語音中的靜音部分也需要建立1個模型。為每個模型創(chuàng)建一個文件,共21個模型文件,將其保存在hmm0文件夾中。以單詞“啟動”為例,以文本文件(.txt)方式寫入,保存為hmm_qidong(無后綴)文件。文件內容如下:
~o
~h "qidong" #模型的名稱
由此可以具體得知HMM模型的拓撲結構,并且可以通過修改其結構來優(yōu)化語音識別系統(tǒng)的性能。
2.3.2 迭代訓練
在整個語音識別系統(tǒng)中,迭代訓練出的聲學模型將直接影響系統(tǒng)的識別率及穩(wěn)定性。HTK中HMM的迭代訓練,對每個訓練樣本及其對應的單詞或句子,采用維特比算法,不斷迭代更新HMM矩陣參數(shù)及其狀態(tài)轉移概率,最后達到收斂。迭代過程如圖4所示。
圖4 迭代訓練過程Fig.4 Iterative training process
模型參數(shù)估計采用HRest工具,每調用該工具1次則完成一輪的參數(shù)重新估計。本系統(tǒng)進行3次迭代訓練,需要調用3次HRest命令。以單詞“啟動”的訓練為例,在命令行輸入HRest-A-D-T 1-S trainlist.txt-M hmms/hmm1-H hmm0/hmm_qidong-l qidong-L lab qidong。
與targetlist.txt不同,單獨建立配置文件trainlist.txt,只存放每個樣本的MFCC文件路徑名。由此文件尋找“啟動”相應的10個訓練樣本,投入文件夾hmm0里對應qidong的模型中訓練。將10個qidong樣本1次迭代訓練后的模型文件hmm_qidong保存在hmm1的文件夾中。每一個單詞投入10個樣本進行訓練,共200個樣本分別對20個單詞進行訓練。共進行3次迭代訓練,最后得到的模型文件hmm_qidong保存在hmm3文件夾中,該文件夾中的21個模型是每一個單詞(包括靜音模型)迭代3次后的收斂模型。收斂后的模型文件可通過記事本方式打開,初始化的模型參數(shù)經(jīng)過迭代訓練已經(jīng)被修改。迭代訓練中的參數(shù)收斂如圖5所示。
圖5 迭代訓練中的參數(shù)收斂Fig.5 Parameter convergence in iterative training
其中,每一次迭代后,變量change都會減小,說明模型訓練的似然值在收斂。當change值不再變化時,模型的參數(shù)訓練完成。若change值在一次迭代中沒有收斂為0,則說明模型中的參數(shù)訓練還存在誤差,還需再一次的迭代訓練,直到change值變?yōu)?,說明已經(jīng)收斂。當然,訓練的樣本越多,意味著需要迭代的次數(shù)也越多,訓練出來的模型的穩(wěn)定性和識別率將會越好。
建立語法網(wǎng)絡是實現(xiàn)語音識別系統(tǒng)人機交互的最后一步,對于任意一個語音識別系統(tǒng)需要定義該識別任務的語法,并生成待識別的網(wǎng)絡,識別網(wǎng)絡包括所有可能識別的單詞或句子。在連續(xù)語音識別中,還需要建立語言模型。語言模型是根據(jù)上下文推測單詞或句子可能表達的含義,其作用在于消除語言中的多音字和同音詞的問題,在聲學模型給出發(fā)音語序之后,從候選的文字字典中尋找出概率最大的字符串序列[9]。孤立詞的語音識別中,不涉及連續(xù)語音中上下文推測語義的問題,主要包括建立語法規(guī)則和詞典及創(chuàng)建任務網(wǎng)絡三部分的任務。
2.4.1 建立語法規(guī)則
在綁定單詞模型之前,要定義語法識別器的基本結構。孤立詞的語法定義格式為:停頓(靜音),說出單詞,再停頓(靜音)。HTK中提供了編寫語法的一般規(guī)則,需要將編寫好的語法保存為文本文件gram.txt。本文定義的語法文件內容如下:
$WORD=啟動 | 關閉 | 導航 | 音樂 | 空調 | 微信 | 泊車 | 無人駕駛 | 天窗 | 右轉 | 左轉 | 倒車 | 直行 | 接聽 | 遠光燈 | 近光燈 | 打電話 | 車內照明 | 道路信息 | 車窗鎖閉;
({START_SIL}[$WORD]{END_SIL})
其中$WORD表示可以替換的單詞,在本系統(tǒng)中有20個命令詞,下面的{START_SIL}[$WORD]{END_SIL}表示輸出的語法規(guī)范,也就是上文所提到的,前后為停頓(靜音),中間為發(fā)出的單詞語音?;ɡㄌ柋硎纠锩娴膯卧~所綁定的模型可以出現(xiàn)很多次,方括號表示所綁定的單詞模型只能出現(xiàn)一次。
2.4.2 建立詞典
詞典的建立是為了將最終識別的結果與隱馬爾科夫模型描述的單詞名稱建立對應關系,也就是將單詞與訓練好的模型綁定。HTK中詞典文件dict.txt綁定模型的格式如下:
導航 daohang
音樂 yinyue
空調 kongtiao
微信 weixin
左邊是單詞,右邊是與之綁定的模型名稱(本系統(tǒng)中模型的命名是單詞拼音或拼音縮寫)。
2.4.3 創(chuàng)建任務網(wǎng)絡
任務語法網(wǎng)絡是單詞識別的網(wǎng)絡,計算機將語音信號采樣并提取特征后通過任務網(wǎng)絡找出匹配的單詞。在HTK中運用Hparse函數(shù)來創(chuàng)建語法網(wǎng)絡。在DOS窗口中輸入Hparse -A -D -T 1 dict.txt gram.txt net.slf, 用上文中編寫好的詞典文件dict.txt和語法文件gram.txt構建出任務網(wǎng)絡并寫入net.slf文件。net.slf文件中生成的語法網(wǎng)絡結構如圖6所示。
圖6 語法網(wǎng)絡結構Fig.6 Syntax network structure
孤立詞識別的過程在隱馬爾科夫模型中屬于評估問題,而連續(xù)語音的識別過程屬于解碼問題。在HTK中,評估問題和解碼問題都是采用Hvite函數(shù)進行識別,但對應的算法有所不同,孤立詞的識別采用前向后向算法來尋找匹配輸入語音的最大概率模型。對于輸入的原始語音先進行信號處理,提取其特征參數(shù)。通過前向后向算法計算出最有可能生成此語音的HMM模型,也就是找到概率最大的HMM模型作為該語音的輸出模型。依據(jù)已經(jīng)寫好的語法規(guī)則將與此模型綁定好的單詞輸出到DOS命令窗口。HTK提供了交互操作的方式,將收集到的語音信號自動進行計算分析,直接輸出識別結果。輸入命令Hvite-A-D-T 1-C directin.conf-g-H hmmsdef.mmf-w net.slf dict.txt hmmlist.txt。
directin.conf是處理輸入語音信號的文件,用于設置特征提取的相關參數(shù)。directin.conf與上文中提取樣本特征參數(shù)的配置文件analysis.conf略有不同,需要額外配置如下參數(shù):
SOURCERATE=625.0 #采樣率是16 kHz(16 000個采樣點/s,1個點是1/160 000 s=625*100 ns,100 ns是HTK的時間單位。在前面的特征提取中采樣率默認為16 kHz,本文件需要特別說明)
SOURCEKIND=HAUDIO #采樣的文件種類是HTK所錄制的語音文件
hmmsdef.mmf是所有模型參數(shù)的集合文件,將hmm3文件中每個收斂模型的參數(shù)復制到1個新建文本中并保存為MMF文件。hmmlist.txt是HMM模型列表,將21個模型名(相應命令的拼音或縮寫)寫入此文件。net.slf和dict.txt是之前所建立的語法網(wǎng)絡和詞典。命令輸入后,操作者每說出1個單詞,計算機屏幕將自動顯示所識別的結果。
語音識別系統(tǒng)搭建完成后,就可對計算機講話進行識別。運行交互識別的命令后,命令行會出現(xiàn)“READY[1]>”,此時便可以通過麥克風等設備進行聲音錄入,然后按任意鍵結束錄音,程序會自動進行識別并將結果顯示在屏幕上,再出現(xiàn)“READY[2]>”等待下一次錄音及識別。例如,對麥克風說出“啟動”,再按下回車,識別結果如圖7所示。
圖7 “啟動”識別結果Fig.7 The result of recognition for “QiDong”
由此可見,前面的“START_SIL”和后面的“END_SIL”是之前定義的靜音模型名稱,在開始識別的靜音為“START_SIL”,說出命令后的靜音為“END_SIL”。中間便是系統(tǒng)所識別出的HMM模型對應的單詞。
影響語音識別系統(tǒng)識別率的主要因素是訓練模型[10],根據(jù)隱馬爾科夫模型的特點,進行如下測試內容:在理想說話環(huán)境(無噪音,26 dB)和噪音環(huán)境(實驗室外,54 dB)下,將作為訓練樣本的說話人(第一組)進行測試,再隨機找出4個非訓練樣本的說話人(第二組)進行測試。20個命令詞每人輪流說一遍。測試結果見表1—表4。
表1 理想說話環(huán)境下第一組測試結果
Tab.1 Test results of the first group under the ideal speaking context
說話人正確錯誤總計正確率/%男一(山東)20020100男二(山東)1822090男三(廣東)1642080女一(河南)1912095
表2 噪音環(huán)境下第一組測試結果
Tab.2 Test results of the first group under the noise environment
說話人正確錯誤總計正確率/%男一(山東)1282060男二(山東)1192055男三(廣東)10102050女一(河南)7132035
表3 理想說話環(huán)境下第二組測試結果
Tab.3 Test results of the second group under the ideal speaking context
說話人正確錯誤總計正確率/%男一(浙江)1642080男二(云南)1732085女一(山西)1732085女二(山東)1642080
表4 噪音環(huán)境下第二組測試結果
Tab.4 Test results of the second group under the noise environment
說話人正確錯誤總計正確率/%男一(浙江)8122040男二(云南)10102050女一(山西)5152025女二(山東)7132035
此外,再針對每一個單詞做一次縱向比較。在正常說話語境(含低頻噪音,35 dB)下,隨機找出10個人輪流說一遍20個單詞,測試結果見表5。
表5 單詞識別測試結果
Tab.5 Test results of word recognition
單詞正確錯誤正確率/%啟動9190關閉9190導航8280音樂100100空調9190微信7370泊車9190天窗7370右轉8280左轉6460倒車8280直行100100接聽9190遠光燈7370近光燈5550打電話7370車內照明9190道路信息8280車窗鎖閉7370無人駕駛8280
1)本系統(tǒng)實現(xiàn)了非特定人、漢語孤立詞的語音識別。在正常說話語境下,單詞的平均識別率為80%。
2)經(jīng)過訓練的說話人作為語音樣本的識別率在90%左右,比一般說話人高10個百分點。
3)對于單詞集合中發(fā)音差異大的單詞識別率明顯更高,近音詞對識別有一定干擾。
4)在孤立詞識別中,HMM在正常的語音環(huán)境下的識別率具有良好的穩(wěn)定性。但在噪音環(huán)境下,識別率會急劇下降。