【kaldi学习.5】I-vector的主要理论

通过前面对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均值超矢量定义为如下公式:M_{s,h}=m_u+T\omega _{s,h}

其中,m_u是说话人与信道独立的均值超矢量,即为UBM的均值超矢量,该超矢量与具体说话人以及信道无关;T为全局差异空间,\omega 为全局差异空间因子,它的后验均值,即为I-Vector矢量,它先验地服从标准正态分布。M_{s,h}服从均值m_u协方差矩阵为TT^*的正态分布。

在给定的公式(如下)中,M和m是我们可以计算的出的,而全局差异空间矩阵(T)和全局差异空间因子(w)是我们需要估计的。

在I-Vector的确认中,我们需要基于如下两个关键步骤:

1、全局差异空间矩阵T的估计

2、I-Vector的估计

这就是为什么在kaldi中,要先训练I-Vector,然后再提取I-Vector,训练时为了得到M、m、T,\omega ,然后根据\omega ,来提取I-Vector——\omega _{s,h}

3 全局差异空间矩阵T的估计

全局差异空间矩阵(T)认为所有给定的数据都来自不同的说话人,即使是一个说话人的多段语音也同样认为是来自不同人。

对于此我们的采用如下过程来估计T矩阵:

1、计算训练数据库中每个说话人所对应的Baum-Welch统计量

2、随机产生T的初始值。采用如下EM算法,迭代估计T矩阵

E-Step:计算隐变量\omega 的后验分布,\omega _{s,h}的后验均值和后验相关矩阵的期望形式。

M-Step:最大似然值重估,重新更新T矩阵。

多次迭代(大概10次)之后,得到全局差异空间矩阵T。

具体计算过程

3.1 计算Baum-Welch统计量

给定说话人s和他的特征矢量序列Y_1,Y_2...,假设GMM-UBM有C个高斯分类,每一个高斯分量c,本文定义混合权值、均值矢量、协方差矩阵对应的Baum-Welch统计量如下公式:

N_c(s)=\sum_{t}^{}\gamma _t(c)

F_c(s)=\sum_{t}^{}\gamma _t(c)Y_t

S_c(s)=diag(\sum_{t}^{}\gamma _t(c)Y_tY_t^*)

其中,在每一时刻t\gamma _t(c)是特征矢量Y_t相对于每一个高斯分量c的状态占有率,也就是在t时刻Y_t落入c状态的后延分布。计算公式如下:

\gamma _t(c)=\frac{w_cp_c(Y_t)}{\sum\nolimits_{j=1}^C w_jp_j(Y_t) }

其中,w_c为UBM中c分量的混合权值。在Baum-Welch统计量中,我们可以定义\tilde{F} _c(s)\tilde{S} _c(s)为一阶、二阶中心统计量:

\tilde{F} _c(s)=\sum_{t}^{}\gamma _t(c)(Y_t-m_c)

\tilde{S} _c(s)=diag(\sum_{t}^{}\gamma _t(c)(Y_t-m_c) (Y_t-m_c)^*)

用Baum-Welch统计量表示为:

\tilde{F} _c(s)=F_c(s)-N_c(s)m_c

\tilde{S} _c(s)={S} _c(s)-diag(F_c(s)m_c^*+m_cF_c(s)^*-N_c(s)m_cm_c^*)

3.2 E步骤

计算隐变量\omega 的后验分布:

对说话人s的第h段语音,令l(s)为:l_T(s)=I+T^*\sum\nolimits_{}^{-1} NN(s)T

那么,在给定说话人sh段语音的特征矢量和参数集(V,\Sigma  )的条件下,w s,h的后验分布是

均值为:l^{-1}(s)T^*\Sigma ^{-1}F_h(s) ,协方差矩阵为l^{-1}(s)的高斯分布。

写成期望形式:

E[\omega _{s,h}]=l^{-1}(s)T^*\Sigma ^{-1}\tilde{F} _h(s)

E[\omega _{s,h}\omega _{s,h}]=E[\omega _{s,h}]E[\omega _{s,h}^*]+l^{-1}(s)

3.3 M步骤

最大似然值重估:

通过训练集计算如下统计量:

\phi _c=\sum_{s}^{} \sum_{h}^{} N_{c.h}(s)E[\omega _{s,h}\omega _{s,h}^*],(c=1,...C)

\Omega =\sum_{s}^{} \sum_{h}^{}\tilde{F} _h(s) [\omega _{s,h}^*]

同样对于每一个高斯混合分量c=1...C和特征参数的每一维f=1...P,令i=(c-1)P+f,则说话人全局差异空间矩阵T的更新公式如下:

T_i\phi _c=\Omega _i,(i=1,...CP)

循环EM步骤后,全局差异空间矩阵T训练完毕。

4 I-vector提取

得到T后,接下来就可以提取I-vector矢量,即式中的w_{s,h},具体过程如下:

1、计算数据库中每个目标说话人所对应的Baum-Welch统计量

2、读入已训练好的全局差异空间矩阵T

3、把已知的代入式中M_{s,h}=m_u+T\omega _{s,h},求出w_{s,h},然后计算w_{s,h}的后验均值,即I-vector。



参考:

https://blog.csdn.net/weixin_38206214/article/details/81541497

https://blog.csdn.net/weixin_38206214/article/details/81096092

https://www.zhihu.com/question/63978977

推荐阅读更多精彩内容