【DWT】计算两不等序列相似度:DWT

note

  • DTW(DP-matching)用于计算两个不等长、但变化趋势相关的序列的相似度。论文给出了最优的对齐规则:对称权重 + 斜率约束P=1,让对齐更准,识别错误率降到了原来的2/3
  • 针对两个时长不同、采样点数量不一致的语音特征序列,用动态时间规整(DTW)找最优非线性对齐路径,消除语速波动带来的时间轴偏差。
  • 创新引入斜率约束(P=1),禁止路径过陡/过缓,避免短语音段错误匹配长语音段,同时采用对称权重设计,确保两个序列的所有特征都被纳入计算,对齐更合理。
  • 实验验证该优化后的DTW算法在孤立词识别任务上错误率仅为传统算法的2/3,成为后续DTW应用的经典标准方案。

文章目录

一、研究动机

论文:Dynamic Programming Algorithm Optimization for Spoken Word Recognition

作者:Hiroaki Sakoe, Seibi Chiba

会议/期刊:IEEE Transactions on Acoustics, Speech and Signal Processing

年份:1978

是语音识别领域中关于动态时间规整(DTW/DP‑matching)的经典文献,系统提出了带斜率约束的对称型DP算法并验证其优越性

  • 说话速率变化导致时间轴非线性波动:早期线性时间归一化无法处理复杂的非线性波动,影响孤立词识别准确率。
  • 已有DP‑matching缺乏系统性优化 :虽然DP可用于非线性时间对齐,但在对称/非对称形式选择权重设计斜率约束等方面缺乏理论分析与实验验证,不同研究组算法差异大、性能不明确。
  • 目标 :在通用等间隔采样、无先验语言学知识的前提下,给出一种最优的DP时间归一化算法,提升类别间判别能力并降低识别错误率。

二、论文核心

1. 时间归一化距离的一般定义

  • 将两段语音表示为特征向量序列
    A = a 1 , ... , a I A = a_1,\dots,a_I A=a1,...,aI, B = b 1 , ... , b J B = b_1,\dots,b_J B=b1,...,bJ。
  • 通过规整函数(warping function)
    F = { c ( k ) = ( i ( k ) , j ( k ) ) } F = \{c(k)=(i(k),j(k))\} F={c(k)=(i(k),j(k))} 建立时间点对应关系。
  • 定义时间归一化距离为沿规整路径的加权距离之和再除以权重总和:
    D ( A , B ) = min ⁡ F ∑ k = 1 K d ( i ( k ) , j ( k ) )   w ( k ) ∑ k = 1 K w ( k ) D(A,B)=\min_F \frac{\sum_{k=1}^K d(i(k),j(k))\,w(k)}{\sum_{k=1}^K w(k)} D(A,B)=Fmin∑k=1Kw(k)∑k=1Kd(i(k),j(k))w(k)
    其中 d ( i , j ) = ∥ a i − b j ∥ d(i,j)=\|a_i-b_j\| d(i,j)=∥ai−bj∥, w ( k ) w(k) w(k) 为非负权重。

2. 规整函数的约束条件

为保证时间对齐符合语音实际特性,对 ( F ) 施加多重约束:

  • 单调性 : i ( k − 1 ) ≤ i ( k ) ,   j ( k − 1 ) ≤ j ( k ) i(k-1)\le i(k),\,j(k-1)\le j(k) i(k−1)≤i(k),j(k−1)≤j(k)
  • 连续性:相邻步长不超过1(( i,j ) 每步最多+1)
  • 边界条件 : ( 1 , 1 ) (1,1) (1,1) 到 ( I , J ) (I,J) (I,J)
  • 调整窗口 : ∣ i ( k ) − j ( k ) ∣ ≤ r |i(k)-j(k)|\le r ∣i(k)−j(k)∣≤r,限制最大时间偏差
  • 斜率约束(核心创新)
    限制规整函数斜率,避免在对角方向前进步数不足时过度偏向 i 或 j 轴;用 P = n / m P=n/m P=n/m 度量约束强度( P P P 越大越刚性,线性对齐对应 P → ∞ P\to\infty P→∞)。

3. 对称形式与非对称形式的权重设计

  • 对称形式
    w ( k ) = ( i ( k ) − i ( k − 1 ) ) + ( j ( k ) − j ( k − 1 ) ) w(k) = (i(k)-i(k-1)) + (j(k)-j(k-1)) w(k)=(i(k)−i(k−1))+(j(k)−j(k−1)),归一化系数 N = I + J N=I+J N=I+J
    → 满足 D ( A , B ) = D ( B , A ) D(A,B)=D(B,A) D(A,B)=D(B,A),且最小权重为1,不会遗漏特征向量。
  • 非对称形式
    w ( k ) = ( i ( k ) − i ( k − 1 ) ) w(k) = (i(k)-i(k-1)) w(k)=(i(k)−i(k−1))(或仅对 j), N = I N=I N=I(或 J J J)
    → 可能出现 w ( k ) = 0 w(k)=0 w(k)=0,导致部分特征被排除,理论上不利于均衡比较。

论文从理论与实验两方面论证对称形式更优,尤其在无/弱斜率约束时。

4. DP 递推算法与斜率约束的具体化

  • 给出初始条件与DP方程:
    g 1 ( c ( 1 ) ) = d ( c ( 1 ) ) w ( 1 ) g_1(c(1)) = d(c(1)) w(1) g1(c(1))=d(c(1))w(1),
    g k ( c ( k ) ) = min ⁡ c ( k − 1 ) g k − 1 ( c ( k − 1 ) ) + d ( c ( k ) ) w ( k ) g_k(c(k)) = \min_{c(k-1)}g_{k-1}(c(k-1)) + d(c(k)) w(k) gk(c(k))=minc(k−1)gk−1(c(k−1))+d(c(k))w(k)
  • 针对 P = 0, 1/2, 1, 2 等斜率约束,分别给出对称/非对称形式的具体DP方程与可达前驱点集合(见表Ⅰ),并对非对称形式做加权改进以避免零权重问题。

三、实验结果

实验基于日语数字(10词 )与日语地名(50词)孤立词数据,10名说话人、多重复,采用带通滤波器组+18ms采样+自动增益控制,Chebyshev距离,强制决策最近邻分类。

实验一:对称/非对称与斜率约束对比(日语数字)

  • 对称形式明显优于非对称形式;
  • 随斜率约束增强( P P P 增大),两者差距缩小;
  • 对称形式在 ( P\le1 ) 性能几乎不受影响,非对称形式在 ( P=1 ) 达到最优
  • ( P>1 ) 后性能下降(过度约束退化为近似线性对齐);
  • 线性时间归一化错误率约 0.8%,而最优DP算法更低。

实验二:对称形式在地名集上的斜率约束(日语地名)

  • 地名集存在易混淆词对(如 Chiba--Shiga 等);
  • 对称形式在 P ≈ 1 P\approx1 P≈1 达到最优,证明斜率约束对提升判别有效;
  • 说明即使在对称形式下,适当斜率约束仍有益,尤其在词汇量大、混淆度高时。

实验三:与同期其他DP算法对比

对比算法包括:Sakoe--Chiba(1973)、Velichko--Zagoruyko、White--Neely、Itakura 及线性方法,结果(错误率 %)如下:

算法 日语数字 日语地名
本文对称 P=1 0.2 0.8
本文非对称 P=1 0.3 1.3
Sakoe--Chiba(1973) 0.3 1.5
White--Neely 0.33 1.3
Itakura 0.4 1.3
Velichko--Zagoruyko 2.0 2.7
线性方法 0.87 5.9

本文提出的"对称形式 + 斜率约束 P=1"在两项任务上均取得最低错误率 ,相比次优算法错误数减少约至 2/3


四、分析与结论

  • 对称形式优势:理论上有对称性、无特征排除;实验上在各约束条件下均优于或等价于非对称形式,尤其弱约束时差距明显。
  • 斜率约束的作用
    • 防止过度扭曲导致异类词误配(如短辅音段对齐长元音);
    • ( P=1 ) 在性能与计算复杂度间取得最佳平衡(DP方程较简单);
    • 对对称形式在困难任务(地名)中同样有效。
  • 综合结论
    在等间隔采样、无额外语言学先验条件下,对称型DP‑matching + 斜率约束 ( P=1 ) 是最优的时间归一化算法,较同期多种DP方法识别错误显著更低,且利于硬件实时实现(文末已构建300ms处理60地名的DP处理器)。

五、Python代码示例

python 复制代码
import numpy as np

# 视频A每帧特征
A = np.array([1, 2, 3, 4, 5])

# 视频B每帧特征(播放慢一点)
B = np.array([1, 2, 2, 3, 4, 5])

m = len(A)
n = len(B)

# DP矩阵
dp = np.full((m + 1, n + 1), np.inf)
dp[0, 0] = 0

for i in range(1, m + 1):
    for j in range(1, n + 1):

        # 当前两帧距离
        cost = abs(A[i-1] - B[j-1])

        dp[i, j] = cost + min(
            dp[i-1, j],      # 删除
            dp[i, j-1],      # 插入
            dp[i-1, j-1]     # 匹配
        )

print(dp)
print("DTW distance =", dp[m, n])

结果:

python 复制代码
[[ 0. inf inf inf inf inf inf]
 [inf  0.  1.  2.  4.  7. 11.]
 [inf  1.  0.  0.  1.  3.  6.]
 [inf  3.  1.  1.  0.  1.  3.]
 [inf  6.  3.  3.  1.  0.  1.]
 [inf 10.  6.  6.  3.  1.  0.]]
DTW distance = 0.0

如果使用fastdwt:

python 复制代码
import numpy as np
from fastdtw import fastdtw
from scipy.spatial.distance import euclidean

A = np.array([[1],[2],[3],[4],[5]])

B = np.array([[1],[2],[2],[3],[4],[5]])

distance, path = fastdtw(
    A,
    B,
    dist=euclidean
)

print(distance)
print(path)

Reference

1 https://www.music-ir.org/mirex/wiki/MIREX_HOME

2 librosa.sequence.dtw官方文档:https://librosa.org/doc/0.10.2/generated/librosa.sequence.dtw.html

相关推荐
坚持编程的菜鸟1 天前
模拟实现memmove
c语言·算法·模拟实现memmove
wabs6661 天前
关于图论【最短路径之Dijkstra算法(堆优化版)|卡码网47.参加科学大会的思考】
数据结构·算法·图论·优先级队列·邻接表·小顶堆·卡码网
坚持编程的菜鸟1 天前
编写判断大小端程序
c语言·算法·判断大小端
papaofdoudou1 天前
判断排列逆序奇偶性的乘积判别法(范德蒙德符号法)
人工智能·算法
linux-hzh1 天前
百日算法修炼 · Day 03
java·算法
问商十三载1 天前
RAG 检索效果差怎么排查?2026 五层诊断法完整指南
开发语言·人工智能·windows·python·算法
嵌入式老牛1 天前
三相电气量采集模块设计(三)非同步采样时的精度提升
算法·精度·计量
今天AI了吗1 天前
精细化落地教程:TimechoAI调参标准+数据清洗规范+误差归因+阈值适配全维度指南
大数据·人工智能·算法
zephyr051 天前
从递归到迭代:二叉树非递归前中后序遍历详解
算法
Dr.kangder1 天前
嵌入式总线设备解析——TTE总线应用与实践
开发语言·网络·算法·嵌入式·多任务·同步机制