五邑大學(xué)信息工程學(xué)院 梁興隆 張歆奕
現(xiàn)存的一些矢量量化方法一般都需要預(yù)先確定碼本大小,比如LBG[1],K-means算法等,然而在現(xiàn)實條件很難預(yù)先確定碼本大小。由中山大學(xué)賴劍煌教授和王長東提出的基于能量的競爭學(xué)習(xí)算法[2]應(yīng)用在圖像分割中,這種算法能自動確定數(shù)據(jù)聚類個數(shù),能夠保持類的大小(即一個類中所包含的樣本個數(shù))和稀疏度(類中樣本的稀疏程度)均衡,并且具有自適應(yīng)學(xué)習(xí)速率;本文嘗試將基于能量的競爭學(xué)習(xí)算法應(yīng)用到特定人漢語數(shù)字0-9語音識別中,在基于能量的競爭學(xué)習(xí)算法確定初始化碼字中,筆者用廣度優(yōu)先搜索鄰居的聚類算法進行了改進。
給定一個樣本集合X ={x1,...,xN},數(shù)據(jù)聚類算法試圖找到K個類{c1,....,cK}使得目標函數(shù)J的值最小。對于經(jīng)典的競爭學(xué)習(xí)算法,聚類的數(shù)目K要預(yù)先設(shè)定并且目標函數(shù)是失真的測量,即使得每個樣本到被劃分到的類的距離平方和最小。
在式子(1)中,wk是ck類的原型,。T為中元素的數(shù)目,k(n)將xn劃分到ck(n)。目標函數(shù)JCCL是根據(jù)兩個假設(shè)而提出來的,一是各個類的先驗概率要相等,即:P( ck)=1/K,?k=1,...,K,二是每個類的協(xié)方差矩陣∑k和單位矩陣成比例,即:所以這種算法只適用于大小和稀疏度相同的類。為了適應(yīng)大小和稀疏度不同的類,目標函數(shù)定義如下:
為了得到式子(2)的最小值,并且能夠自動估計出要聚類的數(shù)目K,我們采用基于能量的競爭學(xué)習(xí)算法。我們構(gòu)建樣本集合的權(quán)重矩陣
在式子(3)中,ε是一個指示xi和xj是否相似的一個參數(shù)。ε最恰當?shù)闹凳屈c與點之間歐氏距離的均值,即:
權(quán)重矩陣反映出了樣本之間距離的權(quán)重。點xi與點xj之間的距離越近,那么權(quán)重值Hij越大。
給定權(quán)重矩陣H后,我們接下來就定義樣本能量矢量e=[e1,...eN]T
這個定義考慮了待聚類的所有樣本之間距離的關(guān)系,所以樣本的能量具有全局的意義。
主點集:主點集y是樣本點集合x中具有較高能量的點所組成的集合,主點集中包含的點的數(shù)量是樣本集合中點的數(shù)量的一半,即:
邊緣點集:邊緣點集是樣本點集合中主點集的補集,即,
d( p, q)為對象p和對象q之間近似性的量化表示。估算d( p, q)的方法很多,如歐幾里德距離、曼哈頓距離、名考夫斯基距離、切比雪夫距離等。相異度矩陣用來存儲n個對象兩兩之間的近似性d( p, q)。給定對象p及距離參數(shù)ε,對于任意對象x,若d( p, x)≤ε,則稱x為p的直接鄰居,簡稱鄰居;對象p的所有鄰居的集合稱為p的全部鄰居,記為Dp。
設(shè)n個對象p1, p2,...,pn-1,pn滿足pn僅是pn-1的鄰居,p1僅是p2的鄰居,pk是pk-1和pk+1(1<k<n)的鄰居,則p3,p4,...,pn都是p1的間接鄰居。對象p所有間接鄰居的集合稱為p的全部間接鄰居,記為Ip。
既然主點集中不存在邊緣點,所以主點集中的對象根據(jù)這個算法會自動分為若干類。類間的平均距離要遠遠大于類內(nèi)點與點之間的平均距離。在這里,參數(shù)ε的最佳取值為主點集點與點之間歐氏距離的均值,即:。主點集y被劃分為K個部分{?,...,cK},本文將這K個部分作為初始化的聚類,各個初始化聚類的均值{w1,...,wK}作為初始化的原型。
表2 基于EBCL和LBG算法的0-9數(shù)字識別用時比較
圖1 仿真實驗過程圖
原型{w1,...,wK}的更新要不斷重復(fù)下面三個步驟來完成:
(1)x選擇獲勝的原型:從樣本集合X隨機選取n,通過使下面的式子取得最小值來選取獲勝的原型:
(2)更新獲勝者:通過下面的式子來更新獲勝的wk(n):
在這個式子中,γ表示基于樣本能量的自適應(yīng)學(xué)習(xí)速率,比如,我們可以在仿真中設(shè)置γ的取值為 γ=en/10。
(3)更新獲勝原型的能量:通過下式來更新獲勝原型的能量
在式子(9)中,fk(n)表示原型wk(n獲勝的頻率。nk表示wk贏得的次數(shù)的累加和,那么一個聚類中所包含的樣本數(shù)量越多,樣本與樣本之間的距離越小,那么這個類所對應(yīng)的原型的能量越大,反之則小。結(jié)合式子(9)和式子(2)可以看出來,獲勝原型能量的更新能夠保持一個類的大小和稀疏度比較均衡。
用特定說話人進行漢語數(shù)字“0-9”的發(fā)音進行測試。實驗方案:用coolpro2軟件錄音,設(shè)定的采樣頻率fs=16000HZ;每個樣本點用16bit量化;聲道選擇為單聲道;對每個數(shù)字分別進行50次錄音,前15個錄音用于訓(xùn)練,最后35個錄音進行測試。試驗中每個數(shù)字語音建立一個碼本,提取每個數(shù)字語音(比如數(shù)字語音“1”)的15個訓(xùn)練樣本的特征矢量,然后將這15個訓(xùn)練樣本的特征矢量形成一個集合,將使用基于能量的競爭學(xué)習(xí)算法對這個集合進行聚類得到這個數(shù)字的碼本。依次得到10個語音數(shù)字的碼本作為參考模板。語音特征參數(shù)采用20維的梅爾倒譜系數(shù)(Mel-Frequency-CepstrumCoefficents,MFCC[4])。Matlab仿真實驗過程如圖1所示。
端點檢測:端點檢測[5](Endpoint-Detection)的目標時要決定語音信號開始和結(jié)束的位置。常用的方法分為時域方法和頻域方法,前者計算量比較小,適合計算能力較差的微電腦平臺;后者計算量比較大。本文采用時域方法,以音量為主,過零率[6]為輔來進行端點檢測。端點檢測方法簡述如下:
(1)以高音量門檻值(τu)為標準,決定端點。
(2)將端點前后延伸到低音量門檻值(τl)處。
(3)再將端點前后延伸到過零率門檻(τzc)處,以包含語音中的氣音部分。
預(yù)加重:將語音信號通過一個高通濾波器H(z)=1-a*z-1,a介于0.9和1.0之間,仿真中采用的值為0.96。
分幀:每幀包含256個采樣點,相鄰兩幀重疊218個采樣點。
加窗:采用漢明窗,窗函數(shù)為:
將每一幀乘上漢明窗,以增加左端和右端的連續(xù)性。
模板匹配方法:設(shè)待識別語音提取的特征矢量序列為 o1, o2, o3,...oT,然后用訓(xùn)練好的碼本進行計算:
本文的仿真結(jié)果和經(jīng)典的矢量量化的LBG算法進行了對比。表1對比了兩個算法的識別率,表2對比了兩種算法碼本大小以及仿真程序運行一次所需的時間。
本文將EBCL學(xué)習(xí)算法運用在特定人的數(shù)字語音識別中,這個算法的優(yōu)點就是能夠自動初始化,自動確定碼本的大小,這是此算法相對于以往的矢量量化算法所不具備的優(yōu)點。從表1可以看出基于EBCL的數(shù)字語音識別可以達到較高的識別率,比經(jīng)典的LBG算法的識別率還要高;LBG算法在碼本提取中需要事先確定碼本大小而EBCL能夠自動確定碼本大小,從表2中可以看出,在識別率相當?shù)那闆r下,用EBCL算法獲得的每個數(shù)字語音的碼本大小不盡相同而LBG算法獲得的碼本大小是固定的;EBCL獲得的碼本的大小相對于LBG的更小,這樣使得碼本存儲空間更小,EBCL算法識別時間更短。將此算法運用到非特定人數(shù)字語音識別中時我們今后工作的重點。
[1]劉剛,劉晶,王泉.使用新的碼字分割方法的快速LBG算法[J].計算機工程與應(yīng)用,2009,45(28):199-202.
[2]Chang-DongWang,Jiang-HuangLai.Energybasedcompeti tivelearning[J].Neurocomputing,2011,74:2265-2275.
[3]錢江波,懂逸生.一種基于廣度優(yōu)先搜索鄰居的聚類算法[J].東南大學(xué)學(xué)報,2004,34(1):109-113.
[4]蔡蓮紅,黃德智,蔡銳.現(xiàn)代語音技術(shù)基礎(chǔ)與應(yīng)用[M].北京:清華大學(xué)出版社,2003:236-238.
[5][6]胡光銳,韋曉東.基于倒譜特征的帶噪語音端點檢測[J].電子學(xué)報,2000,28(10):95-98.