無論在訓練和建立模板階段還是在識別階段,都先採用端點演算法確定語音的起點和終點。已存入模板庫的各個詞條稱為參考模板,乙個參考模板可表示為r=,m為訓練語音幀的時序標號,m=1為起點語音幀,m=m為終點語音幀,因此m為該模板所包含的語音幀總數,r(m)為第m幀的語音特徵向量。所要識別的乙個輸入詞條語音稱為測試模板,可表示為t=,n為測試語音幀的時序標號,n=1為起點語音幀,n=n為終點語音幀,因此n為該模板所包含的語音幀總數,t(n)為第n幀的語音特徵向量。參考模板與測試模板一般採用相同型別的特徵向量(如mfcc,lpc係數)、相同的幀長、相同的窗函式和相同的幀移。
假設測試和參考模板分別用t和r表示,為了比較它們之間的相似度,可以計算它們之間的距離 d[t,r],距離越小則相似度越高。為了計算這一失真距離,應從t和r中各個對應幀之間的距離算起。設n和m分別是t和r中任意選擇的幀號,d[t(n),r(m)]表示這兩幀特徵向量之間的距離。距離函式取決於實際採用的距離度量,在dtw演算法中通常採用歐氏距離。
若n=m則可以直接計算,否則要考慮將t(n)和r(m)對齊。對齊可以採用線性擴張的方法,如果n若把測試模板的各個幀號n=1~n在乙個二維直角座標系中的橫軸上標出,把參考模板的各幀號m=1~m在縱軸上標出,通過這些表示幀號的整數座標畫出一些縱橫線即可形成乙個網路,網路中的每乙個交叉點(n,m)表示測試模式中某一幀的交匯點。dp演算法可以歸結為尋找一條通過此網路中若干格點的路徑,路徑通過的格點即為測試和參考模板中進行計算的幀號。路徑不是隨意選擇的,首先任何一種語音的發音快慢都有可能變化,但是其各部分的先後次序不可能改變,因此所選的路徑必定是從左下角出發,在右上角結束
為了描述這條路徑,假設路徑通過的所有格點依次為(n1 ,m1 ),……,(ni ,mj ),……,(nn ,mm ),其中(n1 ,m1 )=(1,1),(nn ,mm )=(n,m)。路徑可以用函式m = oslash;(n )描述,其中n =i,i=1,2,……,n,ø(1)=1,ø(n)=m。為了使路徑不至於過傾斜,可以約束斜率在0.5~2的範圍內,如果路徑已經通過了格點(n ,m ),那麼下乙個通過的格點(n ,m )只可能是下列三種情況之一:
(n ,m )=(n +1,m)
(n ,m )=(n +1,m +1)
(n ,m )=(n ,m+1 )
用r表示上述三個約束條件。求最佳路徑的問題可以歸結為滿足約束條件r時,求最佳路徑函式m =ø(n ),使得沿路徑的積累距離達到最小值,即:
搜尋該路徑的方法如下:搜尋從(n, m)點出發,可以展開若干條滿足ŋ的路徑,假設可計算每條路徑達到(n, m)點時的總的積累距離,具有最小累積距離者即為最佳路徑。易於證明,限定範圍的任一格點(n, m)只可能有一條搜尋路徑通過。對於(n, m),其可達到該格點的前乙個格點只可能是(n-1, m)、(n-1, m -1)和(n, m-1),那麼(n, m)一定選擇這3個距離之路徑延伸而通過(n, m),這時此路徑的積累距離為:
d[(n,m)]=d[t(n),r(m)]+min
這樣可以從(n ,m )=(1,1)出發搜尋(n ,m ),對每乙個(n ,m )都儲存相應的距離,這個距離是當前格點的匹配距離與前乙個累計距離最小的格點(按照設定的斜率在三個格點中進行比較)。搜尋到(n ,m )時,只保留一條最佳路徑。如果有必要的話,通過逐點向前尋找就可以求得整條路徑。這套dp演算法便是dtw演算法。
dtw演算法可以直接按上面描述來實現,即分配兩個n×m的矩陣,分別為積累距離矩陣d和幀匹配距離矩陣d,其中幀匹配距離矩陣d(i,j)的值為測試模板的第i幀與參考模板的第j幀間的距離。d(n,m)即為最佳匹配路徑所對應的匹配距離
dtw演算法由於沒有乙個有效地用統計方法進行訓練的框架,也不容易將低層和頂層的各種知識用到語音識別演算法中,因此在解決大詞彙量、連續語音、非特定人語音識別問題時較之hmm演算法相形見絀。hmm是一種用引數表示的,用於描述隨機過程統計特性的概率模型。而對於孤立詞識別,hmm演算法和dtw演算法在相同條件下,識別效果相差不大, 又由於dtw演算法本身既簡單又有效,但hmm演算法要複雜得多。它需要在訓練階段提供大量的語音資料,通過反覆計算才能得到引數模型,而dtw演算法的訓練中幾乎不需要額外的計算。
dtw的一般演算法
實現dtw演算法的函式dtw.m
function dist = dtw(t,r)
n=size(t,2);
m=size(r,2);
%%幀匹配距離矩陣
d=zeros(n,m);
fori=1:n
forj=1:m
d(i,j)=(t(i)-r(j)).^2;
endend
%%累積距離矩陣
d=ones(n,m)*realmax;
%%動態規劃
fori=1:n
forj=1:m
ifi==1&&j==1;
d(i,j)=d(1,1);
d1=0;
d2=0;
d3=0;
endifi==1&&j>1
d1=d(i,j-1);
d2=realmax;
d3=realmax;
endifj==1&&i>1
d1=d(i-1,j);
d2=realmax;
d3=realmax;
endifi>1&&j>1
d1=d(i-1,j);
d2=d(i,j-1);
d3=d(i-1,j-1);
endd(i,j)=d(i,j)+min([d1,d2,d3]);
endend
dist=d(n,m);
程式中,首先申請兩個n×m的距陣d和d,分別為累積距離和幀匹配距離。這裡n和m為測試模板與參考模板的幀數。然後通過乙個迴圈計算兩個模板的幀匹配距離距陣d。接下來進行動態規劃,為每個格點(i,j)都計算其三個可能的前續格點的累積距離d1、d2和d3。考慮到邊界問題,有些前續格點可能不存在,因此要加入一些判斷條件。
最後利用最小值函式min,找到三個前續格點的累積距離的最小值作為累積距離,與當前幀的匹配距離d(i,j)相加,作為當前格點的累積距離。該計算過程一直達到格點(n,m),並將d(n,m)輸出,作為模板匹配的結果。
孤立詞識別方案主要有:
(1)採用動態規劃(dynamic programming)的方法。這是一種運算量較大,但技術上較簡單,正識率也較高的方法。其中的失真測度可以用歐氏距離(適於短時譜或倒譜引數),也可以用對數似然比距離(適於lpc引數).決策方法可用最近鄰域準則.
(2)採用向量量化(vector quantization)的方法.它既可用於語音通訊中的波形或引數的壓縮,也可用於語音識別.尤其有限狀態向量量化(fsvqj)方法,對於語音識別更為有效。決策方法一般用最小平均失真準則。
(3)採用隱馬爾柯夫模型(hmm)的方法,該模型的引數既可以用離散概率分布函式,也可以用最新的連續概率密度函式(如:正態高斯密度,高斯自回歸密度等)。決策方法則用最大後驗概率準則.
(4)採用混合技術的方法。例如:用向量量化作為第一級識別(作為預處理,從而得出若干候選的識別結果),然後,再用dtw或hmm方法做最後的識別,因此,可有vq(向量化)/dtw和vq/hmm等識別方法.
演算法筆記 遞迴 整數劃分問題
整數劃分問題 將正整數n表示成一系列正整數之和,n n1 n 2 n3 n k 其中,n 1 n 2 n k 1,k 1 正整數n的這種表示稱為正整數n的劃分。正整數n的不同劃分個數稱為正整數n的劃分數,記作p n 例如 正整數6有11總不同的劃分 6 5 1 4 2,4 1 1 3 3,3 2 1...
動態時間規整演算法DTW
動態時間規整演算法 dynamic time warping,dtw 最早由日本學者itakura提出,用於衡量兩個時間序列的相似度,也可用於將多個測試序列與標準序列對齊,從而實現序列長度的歸一化。主要應用於語音識別 手勢識別 步態識別等領域。在語言識別領域,同乙個詞,由於不同個體發音習慣及語速的差...
語音識別基礎演算法 動態時間規整演算法
本文首發於 演算法社群 dspstack.com,請註明出處。動態時間規整演算法,dynamic time wraping,縮寫為dtw,是語音識別領域的乙個基礎演算法。dtw的提出是為了解決或盡量解決在語音識別當中的孤立詞識別不正確的問題。該問題簡單描述為 在識別階段,將輸入語音的特徵向量時間序列...