两个人分别说了同一个单词,但是由于语速、语气、语调等等各不相同,会导致采样得到的数据无法对齐。但是两段语音采样的第一个采样值和最后一个采样值肯定是两两对应的。
给出两个序列:
Warping通常采用动态规划算法。为了对齐这两个序列,我们需要构造一个nxm的矩阵网格,矩阵元素(i,j)表示qi和cj两个点的距离d(qi,cj),一般采用欧式距离,d(qi,cj)=(qi-cj)2(也可以理解为失真度)。每一个矩阵元素(i,j)表示点qi和cj的对齐。
DP(dynamicprogramming)算法可以归结为寻找一条通过此网格中若干格点的路径,路径通过的格点即为两个序列进行计算的对齐的点。
有三个性质:
1)边界条件:w1=(1,1)和wK=(m,n)。两个人分别说了同一个单词,但是由于语速、语气、语调等等各不相同,会导致采样得到的数据无法对齐。但是两段语音采样的第一个采样值和最后一个采样值肯定是两两对应的。因此所选的路径必定是从左下角出发,在右上角结束。
2)连续性:如果wk-1=(a',b'),那么对于路径的下一个点wk=(a,b)需要满足(a-a')<=1和(b-b')<=1。也就是不可能跨过某个点去匹配,只能和自己相邻的点对齐。这样可以保证Q和C中的每个坐标都在W中出现。
由连续性和单调性可知,每次格点(i,j)前进方向只有三种:(i+1,j),(i,j+1)或(i+1,j+1)。我们的目的是使得下面的规整代价最小的路径:
分母中的K主要是用来对不同的长度的规整路径做补偿。
这里我们定义一个累加距离(cumulativedistances)。从(0,0)点开始匹配这两个序列Q和C,每到一个点,之前所有的点计算的距离都会累加。到达终点(n,m)后,这个累积距离就是我们上面说的最后的总的距离,也就是序列Q和C的相似度。
示例:
对于两个序列:
X:3,5,6,7,7,1
Y:3,6,6,7,8,1,1
有距离矩阵:
X和Y的距离矩阵:
然后根据距离矩阵生成1损失矩阵(CostMatrix)或者叫累积距离矩阵McMc,其计算方法如下:
DTW就是要去解决,普通的欧氏距离,对不对齐的两个序列无法进行相似度对比的问题。解决的方法就是动态规划,但是并没有生成更加多余的点,而是进行了复制。
DTW实质上是通过对轨迹点的复制实现的对轨迹局部的拉伸或者缩放,下图展示地非常清楚:
DTW通过迭代的方式计算轨迹之间的距离(找到图4b所示的最佳的轨迹),是一个经典的动态规划问题,其算法复杂度是O(m×n),依旧很高。后期必然需要相应的修建策略才能达到好的效果。
虽然没有使用映射,但是由于使用了重复,最终的结果仍然不是严格的metric,无法使用metric的方法!(DTW“loosely”satisesthetriangleinequality.Itappearsthatthisobservationisnottrueingeneral,asonaveragenearly30%ofallthetripletsdonotsatisfythetriangleinequality.)
“复制“其实就是在重复使用某些点。以此实现了对localtimeshifting的处理。
没有阈值限制,其最终目的只有找到最好的路径,但是此路径的总距离大小可能会很大。假如不对离群点进行处理,此算法依旧将会对离群点、异常点很敏感。
算法需要第一个点和最后一个点是对应的。
错误示例:
(1)没有设置阈值
此处出现了特定的localtimeshifting,会导致T2和T3明明是一条轨迹,但是最终出现的结果会是T1和T3的相似度要比T1和T2差很多。而且最终的结果是绝对的,即得到的只有一个绝对的数字,但从这个数字上是无法进一步消除这个误差的。
(2)直接使用的是原有的轨迹点,重复使用,且不会跳过任何一个点,因此对噪声点的抑制并不好。
优点:使用动态规划的思想,实现了对某些点的重复使用,确保重复使用的点达成的路径最优的,从而较为高效地解决了数据不对齐的问题。