GMM模型可以较好的对说话人进行建模,但它还存在几个问题:
- GMM Supervector 作为一个高维的特征向量,必然包含了很多冗余的信息(高维数据常见的问题)
- 在训练和测试环境一致的情况下,GMM可以取得很好的性能。但由于声音采集过程中,信道具有多样性且容易收到其它噪声的干扰,导致与训练环境不匹配,此时GMM的性能会急剧下降。
而因子分析方法可以很好的将高维冗余复杂的信息简化为较少的足够表征原有观测信息的几个因子,实现数据的降维。针对上述问题,大神 P. Kenny 提出JFA方法用于说话人识别,相比于之前的方案,进一步的提升了性能。
JFA认为,GMM Supervector中建模的差异信息由说话人差异信息和信道差异信息两部分组成,即
其中,\(s\) 为说话人相关的超矢量,表示说话人之间的差异。 \(c\)为信道相关的超矢量,表示信道之间的差异。 \(M\) 为 GMM 超矢量。
JFA通过分别对说话人差异和信道差异的子空间建模,这样就可以去除信道的干扰,得到对说话人的更精确的描述。
1 JFA算法详解
对于给定的某个speaker的超矢量 \(s\),将其按如下分解
其中:
- \(m\):说话人无关超矢量(UBM超矢量)
- \(V\): 本征音矩阵,低秩
- \(U\): 本征信道矩阵,低秩
- \(D\): 残差矩阵(且为对角阵)
- \(y\): 说话人因子, 服从\(N(0,1)\)先验分布
- \(x\): 信道因子,服从\(N(0,1)\)先验分布
- \(z\): 说话人相关的残差因子,服从\(N(0,1)\)先验分布
1.1 Training
JFA的训练过程主要分为以下三步:
- 假设 \(U\) 和 \(D\) 都为 \(0\), 训练本征音矩阵 \(V\)
- 根据训练好的本征音矩阵 \(V\),假设 \(D\) 为 \(0\),训练本征信道矩阵 \(D\)
- 根据训练好的 \(V\) 和 \(U\),训练残差矩阵 \(D\)
1.1.1 训练本征音矩阵\(V\)
对于本征音矩阵 \(V\) 的训练,分为下面几步:
- 针对每个speaker \(s\) 和 GMM component \(c\),对所有的utterance \(Y\) 计算其充分统计量(Baum-Welch统计量)
- 0阶统计量
其中 \(\gamma_{t}(c)\) 为 \(Y_t\)帧在speaker \(s\)的GMM模型的第 \(c\) 个component上的后验概率
- 1阶统计量
- 2阶统计量
只保留对角线上的元素,使得\(S_c(s)\)为对角阵。
-
计算1阶和2阶中心统计量
其中\(m_c\)是UBM模型中第\(c\)个component的均值。
-
将所有component的上述统计量合并到一个大的矩阵中
其中\(C\)为GMM的component数量,\(I\)为单位矩阵。
-
E-step, 初始化说话人因子\(y\) 令
可以导出\(y(s)\)服从如下分布
也就是说\(y(s)\)的均值为
其中\(\Sigma\)为UBM模型的协方差矩阵,上述公式的详细推导见 【Reference 2】.
-
M-step. 最大似然重估
-
估计\(V\)矩阵
-
更新协方差矩阵\(\Sigma\)(可选)
- 迭代STEPS 4~6(或4~7),即可得到本征音矩阵\(V\),将其代入step 4,即可得到说话人因子。
1.1.2 训练本征信道矩阵\(U\)
本征信道矩阵\(U\)的训练与本征音矩阵的训练过程基本一致,唯一的不同在于计算中心统计量时需要减除说话人因子的影响,即
1.1.3 训练残差矩阵\(D\)
残差矩阵\(D\)的训练与前述训练过程也基本一致,只有两个不同的地方:
-
计算中心统计量时需要减除说话人因子和信道因子的影响,即
-
由于\(D\)时对角阵,因此在M-Step更新矩阵\(A_c\)和\(\Bbb{C}\)时,需要取其对角元素构成对角阵,即
1.2 Evaluate
在估计的时候,得分的计算采用马氏距离,如下: