plda的计算公式如下:
假设语音数据由i个人构成,第i个人的第j条语音
x
i
j
=
u
+
F
h
i
j
+
G
W
i
j
+
ϵ
i
j
x_{ij} = u + Fh_{ij}+GW_{ij}+ϵ_{ij}
xij=u+Fhij+GWij+ϵij
理解这个公式:
u
u
u是指所有数据的均值
F
F
F是指各种身份的基底,包含了表示各种身份的特征
h
i
j
h_{ij}
hij是指说话人语音的特征
G
G
G是指误差空间,用来表示说话人不同语音之间不同变化的基底
W
i
j
W_{ij}
Wij是指说话人此条语音的特征
最后的残留噪声项
ϵ
i
j
ϵij
ϵij用来表示尚未解释的东西,该项为零均高斯分布,方差为
Σ
Σ
Σ
这个模型可以看成两个部分:等号右边前两项只跟说话人有关而跟说话人的具体某一条语音无关,称为信号部分,这描述了说话人类间的差异;
等号右边后两项描述了同一说话人的不同语音之间的差异,称为噪音部分。这样,我们用了这样两个假想变量来描述一条语音的数据结构。
我们注意到等号右边的中间两项分别是一个矩阵和一个向量的表示形式,这便是因子分析的又一核心部分。这两个矩阵F和G包含了各自假想变量空间中的基本因子,这些因子可以看做是各自空间的特征向量。比如,F的每一列就相当于类间空间的特征向量,G的每一列相当于类内空间的特征向量。而两个向量可以看做是分别在各自空间的特征表示,比如hi就可以看做是Xij在说话人空间中的特征表示。在识别打分阶段,如果两条语音的hi特征相同的似然度越大,那么这两条语音就更确定地属于同一个说话人。
模型训练:
模型训练的目标就是输入一堆数据 xij ,输出可以最大程度上表示该数据集的高斯分布的参数 θ=[μ,F,G,Σ]。
如果知道隐含变量 hi 和 wij ,那么我们很容易求得 (\theta = [\mu,F,G,\Sigma] ),反之亦然。这种鸡生蛋、蛋生鸡的问题最好的解决办法就是EM算法。
训练过程:
(1)均值处理:
计算所有训练数据 Xall 的均值 μ , 然后从训练数据中减去该均值 Xall=Xall−μ 。
然后,假如训练数据中共有 N 个人,则再计算 N 个人的均值 Nμ。
(2)初始化:
初始化之前,我们需要说明几个配置参数:特征维度记为 D ,即 μ 是 D×1 维的, Nμ 是 D×N 维的。 身份空间维度,需要我们预先指定,记为 NF ,即F 是 D×NF 维的,同时 hi 是 NF×1 维的。 噪声空间维度,需同样要预先指定,记为 NG ,即 G 是 D×NG维的,同时 wij 是 NG×1 维的。G 使用随机初始化;F 初始化:对每个人的均值数据 Nμ 进行PCA降维,降到 NF 维,赋值给 FΣ 初始化为 D×1 维的常量
EM算法:
LDA:
参考:
https://www.zhihu.com/search?type=content&q=plda
https://www.cnblogs.com/mmziscoming/p/5750853.html
https://zhuanlan.zhihu.com/p/22256777