PLDA的原理和em训练(为了be user friendly开始用latex写公式)

最近一直在学习和操作PLDA,感觉这个算法太有才了,对身份验证如人脸识别,声纹识别,OCR都有用.

先对自己的工作和面试别人以及被面试有一份感悟:

1.数学太重要了,有些人看论文难啃的原因就是公式看不懂,公式看不懂就是数学不好,后面要慢慢补起来

2.感觉工程能力太重要,不管是在工作中还是面试,算法最终能否实现还是要看你的手上的活.这是我的弱项,慢慢补

3.很多面试官不管候选人简历,直接问一些候选人没接触过的问题,还是慢尴尬的,既然如此,当初猎头就是沟通好啊...做算法的经常被问道各种开发问题,各种接口,sdk,服务...,以后还是补补

把我做的笔记拿其中关键记录在博客,以免日后忘记


PLDA 用来处理说话人和信道的变形, ivector从音频中提取了说话人和信道的特征, 当用PLDA时,进行了两次降维操作: 一次是提取ivector时,从2048的GMM降到了400-600的ivector维度,第二次就是用PLDA模型.

在说话人识别中,误差很大的一部分来自于信道的差异, 两种方法去解决该问题,第一,是在前端信号处理中探索语音的判别信息特征,比如 语音来源, 韵律学等
第二种是后端的模型分类设计建模,如GMM-UBM,GMM-SVM,JFA,I-vector,PLDA等

在JFA中,因为信道空间包括了一些残余的说话人信息,所以在说话人识别中,他的性能并不会太突出.

Ivector 用一个低维的空间涵盖了所有的变化,包括说话人和信道的变量. ivector有一个好处是,所有的音频都用一个恒定长度的ivector表示.因为mfcc的特征的长度式不同的,帧数不一样.
它简化了建模和打分的过程,还有打分的速度

PLDA模型是如下公式(PS: 模型即方程,方程即公式):

X$_{ij}$=\mu+Fh$_i$ + Gw$_{ij}$ + \epsilon$_{ij}$

\muFh_i只跟说话人有关而跟说话人具体的某一条语音无关,称为信号部分, 这里描述了说话人类间的差异,
Gw_{ij}\epsilon_{ij}描述了同一说话人的不同语音之间的差异,这里为噪音部分. 这样用两个假设来描述一段语音
mu是所有训练数据的均值.

Fh_i+Gw_{ij} 是一个矩阵和一个向量互乘的思嗯是. 这两个矩阵F和矩阵G包含了各自假想变量空间的基本因子,这些因子可以看作是各自空间的特征向量. 比如F的每一列就相当与类间空间的特征向量,G的每一列相当于类内空间的特征向量.
h和w可以分看作是分别在各自空间的特征表示, 比如h_i就可以看作是x_{ij}在说话人空间中的特征表示.在识别打分阶段,如果两条语音的hi特征相同的似然度越大,那么两条语音更大概率属于同一个人.

模型训练:

PLDA的模型的参数有4个, 数据矩阵mu, 空间特征矩阵F和G, 噪声协方差 \Sigma,模型的训练过程用EM,因为有隐变量所以用EM.需要的是去得到能最大程度拟合训练数据集x的参数 \theta=\mu,F,\Sigma, 如果我们能知道隐变量h_iw_{ij},就会容易很多,反过来看,如果知道\theta,能估计出h_iw_{ij}也会容易很多. 所以用EM来做估计,保证每次迭代他的似然读是增长的.
在做EM的Expectation时,计算关于h和w的全后验概率分布,给定相关参数. 在Maximization步骤时,计算最优的参数值\theta

由于我们只关心区分不同的说话人的类间特征而不用去管同一个说话人的类内特征,所以其实没有必要向上面一样对类内空间G参数进行求解。于是,我们可以得到一个简化版本的PLDA,如下如:

X$_{ij}$=\mu+Fh$_i$ + \epsilon$_{ij}$
\epsilon 服从\mathcal N(0,\Sigma), h_i服从\mathcal N(0,1)

模型的训练具体公式可以直接参考如此paper中的Appendix里面的公式:

PLDA论文,EM训练公式: Probabilistic Linear Discriminant Analysis for Inferences About Identity

简单总结一下就是初始化\theta=\mu,F,\Sigma, 怎么初始化呢,随机生成即可,但是注意维度!
1. 均值处理
计算所有训练数据X_allX_{all}的均值\mu,然后从训练数据中减去该均值X_{all}=X_{all} - \mu
然后,假如该训练数据中有N个人,则再计算N个人的均值N_\mu

2. 初始化
特征维度是D, \mu是D X 1维, N_\mu 是 D X N 维的,身份空间维度,需要我们预先预订,记为N_F, F是D\times N_F维的,同时h_iN_F \times 1 维的.噪声空间维度,需同样要预先指定,记为N_G,即G是D \times N_G维,同时w_{ij}N_G\times 1

E步计算出paper中的E[y_i], E[y_iy^T_i]

然后用E步得出的这两个值带到M步的\mu,B,\Sigma跟新模型参数,论文中的B即是说话人空间特征矩阵.

模型识别(打分步骤):

识别:
假设为我们去比较R个不同的模型的似然度. 我们把模型 称作本征音因子和数据的表示
相同的人会有相同的本征音因子hi 也叫做identity variable,如果两个音频不一样,那么他们会有不一样的identity variables.
对于第q个模型,我们能得到的似然度为p(X|q^{th}) 的模型


同一个人,不同的音频,但共享相同的说话人本征音因子
所有模型的丝然是各个模型描述各个数据的似度相乘

打分:
测试时,我们要去计算两条语音时否由说话人空间中的特征h_i生成,或者由h_i生成的似然程度,而不用管类内空间的差异. 我们用对数丝然得分比来计算得分.

score=log\left ( \frac{p(\eta_{1} ,\eta_2|H_s )}{p(\eta_1|H_d)p(\eta_2|H_d)} \right )
如果有两条语音\eta_1,\eta_2,来自同一空间的假设为Hs,来自不同空间的假设为H_d,通过计算对数似然比,就能衡量两条语音的相似程度,得分越高,属于同一个人的可能性越大

对于打分的具体操作,当我们在em训练后得到了我们所需要的plda模型参数 \mu,F,\Sigma ,根据下面论文的公式来进行打分计算

PLDA论文,打分公式:Analysis of I-vector Length Normalization in Speaker Recognition Systems

这个得分过程总结就是,通过EM我们能得到plda参数\mu,F,\Sigma ,然后我们根据paper提供的公式(6,7,8,9)分别得到所需要参数Q和P,通过score= {\tilde{\eta _1^}}^T\tilde{Q} \tilde{\eta _1}+ {\tilde{\eta _2^}}^T\tilde{Q} \tilde{\eta _2}+2{\tilde{\eta _1^}}^T\Lambda \tilde{\eta _2}+const, 该公式各个变量所代表的意义请直接参考论文,讲的很详细

下次结合另外一偏论文讲一下GPLDA,HT-PLDA和TWO-Covariance PLDA的区别

猜你喜欢

转载自blog.csdn.net/robingao1994/article/details/81905558