kaldi中现有的cmvn处理包含三种形式,即apply-cmvn、apply-cmvn-online、apply-cmvn-slide,这三种形式在使用时略有区别。
cmvn为倒谱均值方差归一化,大多数情况下只会对均值进行归一化,也可以写成cmn。
倒谱均值方差归一化,顾名思义,需要先通过compute-mfcc计算倒谱特征mfcc,然后通过compute-cmvn-stats计算相关的cmvn统计量
apply-cmvn:
- apply-cmvn归一化时,--utt2spk作为可选参数,该参数决定是对每个句子按照说话人归一化还是整体归一化,当utt2spk作为输入时,此时会分别统计每个说话人对应句子的归一化参数
- 然后对于输入句子的每一帧,将每一帧的各个维度利用上述统计的归一化参数进行归一化
apply-cmvn-online:
- apply-cmvn-online归一化时,同样可输入utt2spk作为参数,该参数决定了句子起始部分(小于cmvn_window,默认是600帧,6s)的cmvn计算统计量,当输入utt2spk,统计量来源于对应的说话人统计量;否则来源于全局统计量
- apply-cmvn-online对当前帧进行cmvn时使用的是前600frames的统计量,不够时会利用所属说话人的统计量或全局统计量;
- apply-cmvn-online对相关参数的默认设置在online-feature.h文件中
- 对于句子起始帧利用的统计量的默认的顺序为说话人和全局,具体在文件online-feature.cc中
其中,count_from_speaker表示需要补齐的帧数;speaker_count表示说话人统计量实际的帧数;spekaer_frames是指定的说话人统计量帧数参数。
apply-cmvn-slide
- 顾名思义,apply-cmvn-slide对前帧的归一化采取的是滑窗的形式,可以选择以当前帧作为中心帧的窗口进行均值和方差计算,或者之前的窗口内。一般窗口window大小为300帧
- 对于句子的前window内的帧的cmvn计算,采用的是从第0帧开始的window,同理最后windows帧采用的最后一帧往前的window
三者的区别