語音識別基礎演算法 動態時間規整演算法

2021-09-02 15:26:16 字數 3352 閱讀 8034

本文首發於:演算法社群 dspstack.com,**請註明出處。

動態時間規整演算法,dynamic time wraping,縮寫為dtw,是語音識別領域的乙個基礎演算法。

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

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

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

tip:

使用規整函式的最小累計距離遞推公式:

dtw(n,m) = d((n,m)) + min (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 = ,d2 =

第一列:

dtw(1,1) = 1 + 0 = 1;

dtw(1,2) = 1 + min = 1 + 0 = 1;

dtw(1,3) = 2 + min = 2 + 0 = 2;

dtw(1,4) = 5 + min = 5 + 0 = 5;

dtw(1,5) = 3 + min = 3 + 0 = 3;

dtw(1,6) = 0 + min = 0 + 0 = 0;

第二列:

dtw(2,1) = 3 + min = 3 + 1 = 4;

dtw(2,2) = 1 + min = 1 + 1 = 2;

dtw(2,3) = 0 + min = 0 + 1 = 1;

dtw(2,4) = 3 + min = 3 + 1 = 4;

dtw(2,5) = 1 + min = 1 + 2 = 3;

dtw(2,6) = 2 + min = 2 + 0 = 2;(這列符合w(n-1) == w(n-2))

第三列:

dtw(3,1) = 3 + min = 3 + 4 = 7;

dtw(3,2) = 1 + min = 1 + 2 = 3;

dtw(3,3) = 0 + min = 0 + 1 = 1;(這列符合w(n-1) == w(n-2))

dtw(3,4) = 3 + min = 3 + 1 = 4;

dtw(3,5) = 1 + min = 1 + 1 = 2;

dtw(3,6) = 2 + min = 2 + 3 = 5;

第四列:

dtw(4,1) = 5 + min = 5 + 7 = 12;(這列符合w(n-1) == w(n-2))

dtw(4,2) = 3 + min = 3 + 3 = 6;(這列符合w(n-1) == w(n-2))

dtw(4,3) = 2 + min = 2 + 3 = 5;

dtw(4,4) = 1 + min = 1 + 1 = 2;

dtw(4,5) = 1 + min = 1 + 1 = 2;

dtw(4,6) = 4 + min = 4 + 2 = 6;

第五列:

dtw(5,1) = 2 + min = 2 + ∞ = ∞ ;

dtw(5,2) = 0 + min = 0 + 12 = 12;

dtw(5,3) = 1 + min = 1 + 5 = 6;

dtw(5,4) = 4 + min = 4 + 2 = 6;(這列符合w(n-1) == w(n-2))

dtw(5,5) = 2 + min = 2 + 2 = 4;(這列符合w(n-1) == w(n-2))

dtw(5,6) = 1 + min = 1 + 2 = 3;

最終以**形式給出計算結果:

dtw(5,6) 就是最終的累計最短距離,也就是兩個資料的差異度表示

本文首發於:演算法社群 dspstack.com,**請註明出處。

falsk 基礎 語音識別與語音合成()

首先搜尋進入官網。然後建立乙個語音應用 管理應用之後 語音合成 然後新建乙個py檔案 from aip import aipspeech 14454183 api key txnugcisenveb93i70eswwb4 secret key dzdok3dcueuxe28atfgioqzxvd91...

語音識別基礎知識

最近學習過程中整理的語音識別的基礎知識的筆記 語音識別本質上是一種模式識別的過程,未知語音的模式與已知語音的參考模式逐一進行比較,最佳匹配的參考模式被作為識別結果。當今語音識別技術的主流演算法 主要有基於動態時間規整 dtw 演算法 基於非引數模型的向量量化 vq 方法 基於引數模型的隱馬爾可夫模型...

智慧型家居中語音識別演算法研究 語音識別之DTW演算法

一 語音識別 在介紹dtw演算法之前,首先簡單了解一下語音識別的操作步驟。主要有5個步驟,具體流程如圖1所示。圖1 語音識別流程圖 1預處理 提取真正需要分析的音訊訊號,主要包括靜音切除和聲音分幀兩部分操作。其中靜音切除部分主要採用的是語音活動檢測 voice activity detection,...