日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

语音识别基础算法——动态时间规整算法

發布時間:2023/12/8 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 语音识别基础算法——动态时间规整算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文首發于:算法社區?dspstack.com,轉發請注明出處。

前言#

動態時間規整算法,Dynamic Time Wraping,縮寫為DTW,是語音識別領域的一個基礎算法。

算法的提出#

DTW的提出是為了解決或盡量解決在語音識別當中的孤立詞識別不正確的問題。該問題簡單描述為:在識別階段,將輸入語音的特征矢量時間序列依次與模板庫中的每個模板進行相似度比較,最后將相似度最高者作為識別結果輸出。但是,由于語音信號具有相當大的隨機性,即使是同一個人在不同時刻所講的同一句話、發的同一個音,也不可能具有完全相同的時間長度。而在進行模板匹配時,這些時間長度的變化會影響測度的估計,從而降低識別率。對此,日本學者?板倉(Itakura)將動態規劃(DP)算法的概念用于解決孤立詞識別時的說話速度不均勻的難題,提出了著名的動態時間規整算法或稱動態時間伸縮算法(DTW)。

算法的內容#

DTW的目標是從不同時間跨度的兩個數據求出它們之間的最小總累計距離,所以首先我們要找出輸入矢量和參考矢量之間的對應關系,從而根據對應的矢量來求出模板之間的最小累計距離。在求累計距離的每一步中,需要滿足以下條件的規整函數:

  • 邊界條件

    w(1) = 1,w(N) = M (3-1)

    即規整函數起點為(1,1),終點為(N,M),

  • 連續條件

    w(n + 1) = w(n) + 0/1/2,如果 w(n) <> w(n - 1) 成立 (3-2)

? ? ? ?w(n + 1) = w(n) + 1/2,如果 w(n) == w(n - 1) 成立 (3-3)

Tip:

  • 式(3-2)意思是 w() 的當前值和前一個 w() 值不相等,說明已經加過 1 或 2 ,則 w(n + 1) 的加上的值可為 0;式(3-3)則剛剛相反,w(n + 1) 的加上的值不能為 0,因為 w(n) 已經使用過 0;本質上,規整函數限制了最小累加距離的路徑走向。0/1/2代表了路徑走的步數,要么是當前矢量本身,要么是當前矢量的前一列的步數為 1和 2 的矢量(或點)。
  • n 的值與 N 相對應

使用規整函數的最小累計距離遞推公式:
DTW(n,m) = d((n,m)) + min { DTW(n - 1, m) * g(n - 1, m),DTW(n - 1, m - 1), DTW(n - 1, m - 2)} (3-4)
其中:

g(n - 1,m) = 1,如果 w(n - 1) <> w(n - 2) (3-5)

g(n - 1,m) = ∞,如果w(n - 1) == w(n - 2) (3-6)

Tip:這里的只能取前一列的矢量(點)的數據
根據式(3-2)和式(3-3),文字解釋為:當 DTW(n - 1, m) 不是來自 DTW(n - 2, m) 時,則去判斷 DTW(n - 1, m) [本身,步數為 0 ],DTW(n - 1, m - 1) [步數為 1 ],DTW(n - 1, m - 2) [步數為 2 ]

優點和注意點#

時間復雜度#

DTW算法的優勢在于:它解決了數據長度不同的兩數據序列的差異度表示方式。從計算的角度來說,式(3-4)可看出,橫軸每向前增加一步,僅參考前一列的累計距離,所以在計算時只保留前一列的累計距離即可,不必保留所有數據。這樣可以降低算法的時間復雜度;其原理在于,一個參考數據只與其距離相近的數據會比較相似,距離過遠的數據關系不大,所以就沒必要計算參考數據與對比數據的所有距離,而DTW算法本身就是在矩陣中運算的,其一般的計算點關系如圖

距離指標選擇#

相鄰矢量間距離指標的好壞絕對影響DTW算法的效果。在孤立詞識別當中,先用矢量量化技術,然后再對各分量使用歐拉
距離來度量和計算;由于DTW算法可應用不同的領域,所以不同的領域距離指標是不一樣的,甚至一般的統計距離:歐拉距離、Minkowski距離、Mahalanobis距離以及蘭氏距離等用在所碰到的問題上,達不到想要的效果。所以,此時就需要根據實際數據的特征來構造距離(這里的距離已經不是一般意義上的長度等)指標,去衡量兩個數據的相似程度

數據點約束#

雖說根據規整函數可以使計算復雜度降低,但是從遞推公式可知,要想知道終點的累計最短距離,還是要不斷計算前面的累計距離,那么如何才能更進一步的降低計算時間復雜度呢?答案就是對計算數據的范圍進行約束,下圖是平行四邊形約束

也就是說,計算的數據點坐標必須落在平行四邊形內部,否則就不用計算,至于平行四邊形的形狀可以根據實際數據來調試,一般不會相差很大,主要取決于平行四邊形鄰邊的角度,即斜率

計算例子#

最后,給出一個簡單的例子,講下DTW的計算過程。
時間序列為:
d1 = {1,3,3,5,2},d2 = {0,2,3,6,4,1}
第一列:
DTW(1,1) = 1 + 0 = 1;
DTW(1,2) = 1 + min {DTW(0,2), DTW(0,1), DTW(0,0)} = 1 + 0 = 1;
DTW(1,3) = 2 + min {DTW(0,3), DTW(0,2), DTW(0,1)} = 2 + 0 = 2;
DTW(1,4) = 5 + min {DTW(0,4), DTW(0,3), DTW(0,2)} = 5 + 0 = 5;
DTW(1,5) = 3 + min {DTW(0,5), DTW(0,4), DTW(0,3)} = 3 + 0 = 3;
DTW(1,6) = 0 + min {DTW(0,6), DTW(0,5), DTW(0,4)} = 0 + 0 = 0;
第二列:
DTW(2,1) = 3 + min {DTW(1,1), DTW(1,0), DTW(1,-1)} = 3 + 1 = 4;
DTW(2,2) = 1 + min {DTW(1,2), DTW(1,1), DTW(1,0)} = 1 + 1 = 2;
DTW(2,3) = 0 + min {DTW(1,3), DTW(1,2), DTW(1,1)} = 0 + 1 = 1;
DTW(2,4) = 3 + min {DTW(1,4), DTW(1,3), DTW(1,2)} = 3 + 1 = 4;
DTW(2,5) = 1 + min {DTW(1,5), DTW(1,4), DTW(1,3)} = 1 + 2 = 3;
DTW(2,6) = 2 + min {DTW(1,6), DTW(1,5), DTW(1,4)} = 2 + 0 = 2;(這列符合w(n-1) == w(n-2))
第三列:
DTW(3,1) = 3 + min {DTW(2,1), DTW(2,0), DTW(2,-1)} = 3 + 4 = 7;
DTW(3,2) = 1 + min {DTW(2,2), DTW(2,1), DTW(2,0)} = 1 + 2 = 3;
DTW(3,3) = 0 + min {DTW(2,3), DTW(2,2), DTW(2,1)} = 0 + 1 = 1;(這列符合w(n-1) == w(n-2))
DTW(3,4) = 3 + min {DTW(2,4), DTW(2,3), DTW(2,2)} = 3 + 1 = 4;
DTW(3,5) = 1 + min {DTW(2,5), DTW(2,4), DTW(2,3)} = 1 + 1 = 2;
DTW(3,6) = 2 + min {DTW(2,6)∞, DTW(2,5), DTW(2,4)} = 2 + 3 = 5;
第四列:
DTW(4,1) = 5 + min {DTW(3,1), DTW(3,0), DTW(3,-1)} = 5 + 7 = 12;(這列符合w(n-1) == w(n-2))
DTW(4,2) = 3 + min {DTW(3,2), DTW(3,1), DTW(3,0)} = 3 + 3 = 6;(這列符合w(n-1) == w(n-2))
DTW(4,3) = 2 + min {DTW(3,3)∞, DTW(3,2), DTW(3,1)} = 2 + 3 = 5;
DTW(4,4) = 1 + min {DTW(3,4), DTW(3,3), DTW(3,2)} = 1 + 1 = 2;
DTW(4,5) = 1 + min {DTW(3,5), DTW(3,4), DTW(3,3)} = 1 + 1 = 2;
DTW(4,6) = 4 + min {DTW(3,6), DTW(3,5), DTW(3,4)} = 4 + 2 = 6;
第五列:
DTW(5,1) = 2 + min {DTW(4,1), DTW(4,0), DTW(4,-1)} = 2 + ∞ = ∞ ;
DTW(5,2) = 0 + min {DTW(4,2), DTW(4,1), DTW(4,0)} = 0 + 12 = 12;
DTW(5,3) = 1 + min {DTW(4,3), DTW(4,2), DTW(4,1)} = 1 + 5 = 6;
DTW(5,4) = 4 + min {DTW(4,4), DTW(4,3), DTW(4,2)} = 4 + 2 = 6;(這列符合w(n-1) == w(n-2))
DTW(5,5) = 2 + min {DTW(4,5), DTW(4,4), DTW(4,3)} = 2 + 2 = 4;(這列符合w(n-1) == w(n-2))
DTW(5,6) = 1 + min {DTW(4,6), DTW(4,5), DTW(4,4)} = 1 + 2 = 3;
最終以表格形式給出計算結果:

DTW(5,6) 就是最終的累計最短距離,也就是兩個數據的差異度表示

本文首發于:算法社區?dspstack.com,轉發請注明出處。

總結

以上是生活随笔為你收集整理的语音识别基础算法——动态时间规整算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。