DTW(動態時間規準)演算法,孤立詞語音識別
轉一篇相似度匹配的文章,寫得不錯!
DTW為(Dynamic Time Warping,動態時間歸準)的簡稱。應用很廣,主要是在模板匹配中,比如說用於孤立詞語音識別,計算機視覺中的行為識別,資訊檢索等中。可能大家學過這些類似的課程都看到過這個演算法,公式也有幾個,但是很抽象,當時看懂了但不久就會忘記,因為沒有具體的例項來加深印象。
這次主要是用語音識別課程老師上課的一個題目來理解DTW演算法。
首先還是介紹下DTW的思想:假設現在有一個標準的參考模板R,是一箇中號維的向量,即R = {R(1),R(2),......,R(M),......, R(M)},每個分量可以是一個數或者是一個更小的向量。現在有一個才測試的模板T,是一個ñ維向量,即T = {T(1),T(2), ......,T(N),......,T(N)}同樣每個分量可以是一個數或者是一個更小的向量,注意中號不一定等於N,但是每個分量的維數應該相同。
由於中號不一定等於N,現在要計算ř和Ť的相似度,就不能用以前的歐式距離等類似的度量方法了。那用什麼方法呢?DTW就是為了解決這個問題而產生的。
首先我們應該知道- [R中的一個分量R(米)和Ť中的一個分量T(N)的維數是相同的,它們之間可以計算相似度(即距離)。在運用DTW前,我們要首先計算R的每一個分量和T中的每一個分量之間的距離,形成一個M N的矩陣。(為了方便,行數用將標準模板的維數M,列數為待測模板的維數N )。
然後下面的步驟該怎麼計算呢?用個例子來看看。
這個例子中假設標準模板 - [R為字母ABCDEF(6個),測試模板Ť為1234(4個).R和Ť中各元素之間的距離已經給出如下:
既然是模板匹配,所以各分量的先後匹配順序已經確定了,雖然不是一一對應的。現在題目的目的是要計算出測試模板Ť和標準模板 - [R之間的距離。因為2個模板的長度不同,所以其對應匹配的關係有很多種,我們需要找出其中距離最短的那條匹配路徑現假設題目滿足如下的約束:當從一個方格(第(i-1,J-1)或者(ⅰ -1,j)的或者(I,J-1))中到下一個方格(I,J),如果是橫著或者豎著的話其距離為d(I,J),如果是斜著對角線過來的則是2D(I,J)其約束條件如下影象所示:
其中克(I,J)表示2個模板都從起始分量逐次匹配,已經到了中號中的我分量和Ť中的Ĵ分量,並且匹配到此步是2個模板之間的距離。並且都是在前一次匹配的結果上加d(I,J)或者2D(I,J),然後取最小值。
所以我們將所有的匹配步驟標註後如下:
怎麼得來的呢?比如說g(1,1)= 4,當然前提都假設是g(0,0)= 0,就是說g(1,1)= g(0,0)+ 2d(1 ,1)= 0 + 2 2 = 4。
克(2,2)= 9是一樣的道理。首先如果從克(1,2)來算的話是克(2,2)= G(1,2)+ d(2,2)= 5 + 4 = 9,因為是豎著上去的。
如果從克(2,1)來算的話是克(2,2)= G(2,1)+ d(2,2)= 7 + 4 = 11,因為是橫著往右走的。
如果從g(1,1)來算的話,g(2,2)= g(1,1)+2 d(2,2)= 4 + 2 4 = 12.因為是斜著過去的。
綜上所述,取最小值為9。所有克(2,2)= 9。
當然在這之前要計算出克(1,1),G(2,1),G(1,2)。因此計算克(I,J)也是有一定順序的。
其基本順序可以體現在如下:
計算了第一排,其中每一個紅色的箭頭表示最小值來源的那個方向當計算了第二排後的結果如下:
最後都算完了的結果如下:
到此為止,我們已經得到了答案,即2個模板直接的距離為26. 我們還可以通過回溯找到最短距離的路徑,通過箭頭方向反推回去。如下所示:
到這裡,估計大家動手算一下就會明白了。其實很簡單,通過例子的學習後再回去看那些枯燥的理論公式就發現很容易了。
在實際應用中,比如說語音識別中的孤立詞識別,我們首先訓練好常見字的讀音,提取特徵後作為一個模板。當需要識別一個新來的詞的時候,也同樣提取特徵,然後和訓練資料庫中的每一個模板進行匹配,計算距離。求出最短距離的那個就是識別出來的字了。