Kaldi中为什么要计算CMVN
CMVN是Cepstral Mean Variance Normalization的缩写,中文直译为倒谱均值方差归一化。这里插一句Cepstral这个词是就是谱(spectrum)这个单词的前4个字母倒过来。
在把MFCC送到解码器之前,kaldi会计算一个CMVN。为什么计算CMVN,下面给出一个理由
实际情况下,受不同麦克风及音频通道的影响,会导致相同音素的特征差别比较大,通过CMVN可以得到均值为0,方差为单位矩阵的标准特征。
CMVN是在某个范围内统计若干声学特征的均值和标准差,对范围的选择不同形成了不同的归一化方法,
1. 全局归一化(Global CMVN)
2. 说话人归一化(Speaker CMVN)
Kaldi中计算均值和方差的代码在compute-cmvn-stats.cc, 归一化在apply-cmvn.cc,对应的命令是
$> src/featbin/compute_cmvn_stats
$> src/featbin/apply_cmvn
在进行CMVN计算时,如果提供了句子和说话人的映射关系 – uut2spk,则进行说话人归一化,否则进行全局归一化。
CMVN的计算在train的阶段和decode阶段都需要计算。