动态时间规整算法(DTW)是最近接触的一种提取时间序列模板方法。本文主要是一些自己的学习记录,并适当地加入自己的理解。若有见解不一致之处,欢迎交流。
1 动态时间规整(DTW)基本思想
先从单词语音时间序列的规整问题引入DTW的基本思想。
假设下图两个时间序列对应的是同一个单词的发音(实则不是,只是为了便于理解)。黑色的线表示两个时间序列的相似的点(用幅度差异刻画时间序列点的相似性,幅度差异越小,相似性越高)。由于不同人语速上存在差异,某些人可能会把字母‘A’发得很长(延长发音),某些人却发得较短(短促发音),这样同一个字母展现出来的时间序列上就存在着很大的差异,如图中绿色圈出的时间波形所示。因此就需要对原始的两个时间序列进行规整,即对时间序列进行延伸和缩短,提取两个时间序列的相似性,从而对语音进行识别。
图1 动态时间规整基本思想
图2 时间序列规整结果
图2对应的就是原始时间序列的规整结果。
所以动态时间规整的思想就是:通过对两个时间序列点之间的相似性进行比较(图1黑线),对原始时间序列进行拉伸到相同时间长度(原始时间序列的长度很可能不一致),进而比较两个时间序列的相似性。
动态时间规整要解决的问题就是:找到一条最优的规整路径 W = ϖ 1 , ϖ 2 . . . ϖ k W = {\varpi _1},{\varpi _2}...{\varpi _k} W=ϖ1,ϖ2...ϖk,其中 w k = ( i , j ) {w_k} = (i,j) wk=(i,j),即认为时间序列1的第i个点和时间序列2的第j个点是相似的。所有相似点的距离之和作为规整路径距离,用规整路径距离来衡量两个时间序列的相似性。规整路径距离越小,相似度越高。
2 动态规划解DTW问题
假设原始时间序列为X,Y,它们的时间长度分别为 ∣ X ∣ \left| X \right| ∣X∣和 ∣ Y ∣ \left| Y \right| ∣Y∣。对于规整路径 W = ϖ 1 , ϖ 2 . . . ϖ k W = {\varpi _1},{\varpi _2}...{\varpi _k} W=ϖ1,ϖ2...ϖk