五邑大學信息工程學院 梁興隆 張歆奕
現存的一些矢量量化方法一般都需要預先確定碼本大小,比如LBG[1],K-means算法等,然而在現實條件很難預先確定碼本大小。由中山大學賴劍煌教授和王長東提出的基于能量的競爭學習算法[2]應用在圖像分割中,這種算法能自動確定數據聚類個數,能夠保持類的大小(即一個類中所包含的樣本個數)和稀疏度(類中樣本的稀疏程度)均衡,并且具有自適應學習速率;本文嘗試將基于能量的競爭學習算法應用到特定人漢語數字0-9語音識別中,在基于能量的競爭學習算法確定初始化碼字中,筆者用廣度優先搜索鄰居的聚類算法進行了改進。
給定一個樣本集合X ={x1,...,xN},數據聚類算法試圖找到K個類{c1,....,cK}使得目標函數J的值最小。對于經典的競爭學習算法,聚類的數目K要預先設定并且目標函數是失真的測量,即使得每個樣本到被劃分到的類的距離平方和最小。

在式子(1)中,wk是ck類的原型,。T為中元素的數目,k(n)將xn劃分到ck(n)。目標函數JCCL是根據兩個假設而提出來的,一是各個類的先驗概率要相等,即:P( ck)=1/K,?k=1,...,K,二是每個類的協方差矩陣∑k和單位矩陣成比例,即:所以這種算法只適用于大小和稀疏度相同的類。為了適應大小和稀疏度不同的類,目標函數定義如下:

為了得到式子(2)的最小值,并且能夠自動估計出要聚類的數目K,我們采用基于能量的競爭學習算法。我們構建樣本集合的權重矩陣

在式子(3)中,ε是一個指示xi和xj是否相似的一個參數。ε最恰當的值是點與點之間歐氏距離的均值,即:
權重矩陣反映出了樣本之間距離的權重。點xi與點xj之間的距離越近,那么權重值Hij越大。
給定權重矩陣H后,我們接下來就定義樣本能量矢量e=[e1,...eN]T

這個定義考慮了待聚類的所有樣本之間距離的關系,所以樣本的能量具有全局的意義。
主點集:主點集y是樣本點集合x中具有較高能量的點所組成的集合,主點集中包含的點的數量是樣本集合中點的數量的一半,即:

邊緣點集:邊緣點集是樣本點集合中主點集的補集,即,

d( p, q)為對象p和對象q之間近似性的量化表示。估算d( p, q)的方法很多,如歐幾里德距離、曼哈頓距離、名考夫斯基距離、切比雪夫距離等。相異度矩陣用來存儲n個對象兩兩之間的近似性d( p, q)。給定對象p及距離參數ε,對于任意對象x,若d( p, x)≤ε,則稱x為p的直接鄰居,簡稱鄰居;對象p的所有鄰居的集合稱為p的全部鄰居,記為Dp。
設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。

既然主點集中不存在邊緣點,所以主點集中的對象根據這個算法會自動分為若干類。類間的平均距離要遠遠大于類內點與點之間的平均距離。在這里,參數ε的最佳取值為主點集點與點之間歐氏距離的均值,即:。主點集y被劃分為K個部分{?,...,cK},本文將這K個部分作為初始化的聚類,各個初始化聚類的均值{w1,...,wK}作為初始化的原型。

表2 基于EBCL和LBG算法的0-9數字識別用時比較

圖1 仿真實驗過程圖
原型{w1,...,wK}的更新要不斷重復下面三個步驟來完成:
(1)x選擇獲勝的原型:從樣本集合X隨機選取n,通過使下面的式子取得最小值來選取獲勝的原型:

(2)更新獲勝者:通過下面的式子來更新獲勝的wk(n):

在這個式子中,γ表示基于樣本能量的自適應學習速率,比如,我們可以在仿真中設置γ的取值為 γ=en/10。
(3)更新獲勝原型的能量:通過下式來更新獲勝原型的能量

在式子(9)中,fk(n)表示原型wk(n獲勝的頻率。nk表示wk贏得的次數的累加和,那么一個聚類中所包含的樣本數量越多,樣本與樣本之間的距離越小,那么這個類所對應的原型的能量越大,反之則小。結合式子(9)和式子(2)可以看出來,獲勝原型能量的更新能夠保持一個類的大小和稀疏度比較均衡。
用特定說話人進行漢語數字“0-9”的發音進行測試。實驗方案:用coolpro2軟件錄音,設定的采樣頻率fs=16000HZ;每個樣本點用16bit量化;聲道選擇為單聲道;對每個數字分別進行50次錄音,前15個錄音用于訓練,最后35個錄音進行測試。試驗中每個數字語音建立一個碼本,提取每個數字語音(比如數字語音“1”)的15個訓練樣本的特征矢量,然后將這15個訓練樣本的特征矢量形成一個集合,將使用基于能量的競爭學習算法對這個集合進行聚類得到這個數字的碼本。依次得到10個語音數字的碼本作為參考模板。語音特征參數采用20維的梅爾倒譜系數(Mel-Frequency-CepstrumCoefficents,MFCC[4])。Matlab仿真實驗過程如圖1所示。
端點檢測:端點檢測[5](Endpoint-Detection)的目標時要決定語音信號開始和結束的位置。常用的方法分為時域方法和頻域方法,前者計算量比較小,適合計算能力較差的微電腦平臺;后者計算量比較大。本文采用時域方法,以音量為主,過零率[6]為輔來進行端點檢測。端點檢測方法簡述如下:
(1)以高音量門檻值(τu)為標準,決定端點。
(2)將端點前后延伸到低音量門檻值(τl)處。
(3)再將端點前后延伸到過零率門檻(τzc)處,以包含語音中的氣音部分。
預加重:將語音信號通過一個高通濾波器H(z)=1-a*z-1,a介于0.9和1.0之間,仿真中采用的值為0.96。
分幀:每幀包含256個采樣點,相鄰兩幀重疊218個采樣點。
加窗:采用漢明窗,窗函數為:

將每一幀乘上漢明窗,以增加左端和右端的連續性。
模板匹配方法:設待識別語音提取的特征矢量序列為 o1, o2, o3,...oT,然后用訓練好的碼本進行計算:

本文的仿真結果和經典的矢量量化的LBG算法進行了對比。表1對比了兩個算法的識別率,表2對比了兩種算法碼本大小以及仿真程序運行一次所需的時間。
本文將EBCL學習算法運用在特定人的數字語音識別中,這個算法的優點就是能夠自動初始化,自動確定碼本的大小,這是此算法相對于以往的矢量量化算法所不具備的優點。從表1可以看出基于EBCL的數字語音識別可以達到較高的識別率,比經典的LBG算法的識別率還要高;LBG算法在碼本提取中需要事先確定碼本大小而EBCL能夠自動確定碼本大小,從表2中可以看出,在識別率相當的情況下,用EBCL算法獲得的每個數字語音的碼本大小不盡相同而LBG算法獲得的碼本大小是固定的;EBCL獲得的碼本的大小相對于LBG的更小,這樣使得碼本存儲空間更小,EBCL算法識別時間更短。將此算法運用到非特定人數字語音識別中時我們今后工作的重點。
[1]劉剛,劉晶,王泉.使用新的碼字分割方法的快速LBG算法[J].計算機工程與應用,2009,45(28):199-202.
[2]Chang-DongWang,Jiang-HuangLai.Energybasedcompeti tivelearning[J].Neurocomputing,2011,74:2265-2275.
[3]錢江波,懂逸生.一種基于廣度優先搜索鄰居的聚類算法[J].東南大學學報,2004,34(1):109-113.
[4]蔡蓮紅,黃德智,蔡銳.現代語音技術基礎與應用[M].北京:清華大學出版社,2003:236-238.
[5][6]胡光銳,韋曉東.基于倒譜特征的帶噪語音端點檢測[J].電子學報,2000,28(10):95-98.