通过前面对run.sh的初步学习,大概搞懂了Aishell的步骤,可以看到这篇文章【kaldi学习.4】Aishell V1(说话人识别、声纹识别)中的run.sh详解 - 简书,其中主要涉及到MFCC、UBM、I-vector、Plda这四个模型,今天这篇文章就是来了解其中一个模型I-vector。
MFCC、UBM的理论基础可以见这篇文章声纹识别(说话人识别).2 - 简书,MFCC是提取特征,UBM是通用背景模型。plda后期会讲。
I-vector
受到JFA理论的启发,Dehak提出了从GMM均值超矢量中提取一个更紧凑的矢量,称为I-Vector。即为Identity-Vector。
1 均值超矢量
均值超矢量(supervector)是GMM-UBM模型的最终结果。在GMM-UBM框架下,说话人模型是从UBM模型自适应得到的,过程中只改变了均值的大小,因此说话人之间的区别信息都蕴含在GMM的均值矢量中。将说话人GMM模型的每个高斯成分的均值堆叠起来,形成一个高维的超矢量,即为均值超矢量。假设语音声学特征参数的纬度为P,GMM的混合度为M(M个高斯成分),那么这个GMM的均值超矢量的维度为MP。均值超矢量生成过程如下图:
2 模型概述
在I-Vector模型中,我们采用全局差异空间(Total Variability Space,T),即包含了说话者之间的差异又包含了信道之间的差异。所以I-Vector的建模过程在GMM均值超矢量中不严格区分话者的影响和信道的影响。
给定说话人s的一段语音h,这一新的说话人及信道相关的GMM均值超矢量定义为如下公式:
其中,是说话人与信道独立的均值超矢量,即为UBM的均值超矢量,该超矢量与具体说话人以及信道无关;T为全局差异空间,为全局差异空间因子,它的后验均值,即为I-Vector矢量,它先验地服从标准正态分布。服从均值协方差矩阵为的正态分布。
在给定的公式(如下)中,M和m是我们可以计算的出的,而全局差异空间矩阵(T)和全局差异空间因子(w)是我们需要估计的。
在I-Vector的确认中,我们需要基于如下两个关键步骤:
1、全局差异空间矩阵T的估计
2、I-Vector的估计
这就是为什么在kaldi中,要先训练I-Vector,然后再提取I-Vector,训练时为了得到M、m、T,,然后根据,来提取I-Vector——。
3 全局差异空间矩阵T的估计
全局差异空间矩阵(T)认为所有给定的数据都来自不同的说话人,即使是一个说话人的多段语音也同样认为是来自不同人。
对于此我们的采用如下过程来估计T矩阵:
1、计算训练数据库中每个说话人所对应的Baum-Welch统计量
2、随机产生T的初始值。采用如下EM算法,迭代估计T矩阵
E-Step:计算隐变量的后验分布,的后验均值和后验相关矩阵的期望形式。
M-Step:最大似然值重估,重新更新T矩阵。
多次迭代(大概10次)之后,得到全局差异空间矩阵T。
具体计算过程
3.1 计算Baum-Welch统计量
给定说话人和他的特征矢量序列,假设GMM-UBM有个高斯分类,每一个高斯分量,本文定义混合权值、均值矢量、协方差矩阵对应的Baum-Welch统计量如下公式:
其中,在每一时刻,是特征矢量相对于每一个高斯分量的状态占有率,也就是在时刻落入状态的后延分布。计算公式如下:
其中,为UBM中分量的混合权值。在Baum-Welch统计量中,我们可以定义和为一阶、二阶中心统计量:
用Baum-Welch统计量表示为:
3.2 E步骤
计算隐变量的后验分布:
对说话人的第段语音,令为:
那么,在给定说话人第段语音的特征矢量和参数集的条件下,w s,h的后验分布是
均值为:,协方差矩阵为的高斯分布。
写成期望形式:
3.3 M步骤
最大似然值重估:
通过训练集计算如下统计量:
同样对于每一个高斯混合分量和特征参数的每一维,令,则说话人全局差异空间矩阵T的更新公式如下:
循环EM步骤后,全局差异空间矩阵训练完毕。
4 I-vector提取
得到T后,接下来就可以提取I-vector矢量,即式中的,具体过程如下:
1、计算数据库中每个目标说话人所对应的Baum-Welch统计量
2、读入已训练好的全局差异空间矩阵T
3、把已知的代入式中,求出,然后计算的后验均值,即I-vector。
参考:
https://blog.csdn.net/weixin_38206214/article/details/81541497
https://blog.csdn.net/weixin_38206214/article/details/81096092
网友评论