说话人识别中取到i-vector之后怎么做分类?

论坛 期权论坛 期权     
感月月   2018-9-24 01:04   61885   5
现在有了gmm-ubm,自适应得到了每个人的gmm模型,用M=m+Tw得到了w,即每个人的i-vector,接下来怎么办呢?这时来了一个测试音频,是某个人说的话.wav,取其mfcc特征后怎么判断属于哪个人呢?

换句话说,i-vector和dnn怎么配合呢?

还是我之前的思路不对?可以简述一下思路原理给几篇文献或者代码吗
分享到 :
0 人收藏

5 个回复

倒序浏览
2#
Leon晋  1级新秀 | 2018-9-24 01:04:11 发帖IP地址来自

根据知友要求,再详细介绍从GMM-UBM,T矩阵,均值超矢量,和i-vector这个流程是怎样来的。现在很多papers虽然都省略了介绍ivector提取的具体介绍,甚至连M=m+Tw这个公式也不放上来(不过我也是这样子了),不过这个算法很经典,也是公认基线系统,过程较复杂的,我在这里尽力梳理(真的尽力了QAQ。。。)。。。

1、先用一部分训练集(包含多个说话人),通过EM期望最大化算法,训练UBM通用背景模型;通常我们会先训练一个协方差对角矩阵,再训练全矩阵,理由如下:


1、M阶高斯的稠密全矩阵UBM效果等同于一个更大高斯分量的对角矩阵;

2、对角UBM较为稀疏,计算量低效率快;

3、对角UBM性能上有优势;

UBM特点:一个与说话人、信道无关的高斯混合模型;可以作为这个训练集的统一参考坐标空间;在一定程度上,还解决了某些说话人少样本问题;

2、假如初始化UBM时,我设了M=2048个高斯分量components,就会有2048个单高斯分量,每个 i 分量(i=1,2,...,M)包括一个权重、一个均值矢量、一个协方差矩阵:λ = {ci,μi,∑i},其中μi和∑i分别是矢量与矩阵;

假如声学特征是D=39维,则UBM的第 i 个高斯分量的均值矢量将包含了D维

如果把均值矢量与协方差对角阵展开,则是μi = {μi1,μi2,...,μiD},∑i = diag{σ^(2)i1,σ^(2)i2,...,σ^(2)iD},即均值是一个D x 1维矢量,方差是D x D维对角(全)矩阵

3、训练好了UBM,接下来就是计算充分统计量,我们会用一大部分的训练集去计算;充分统计量包括零阶、一阶(部分存在二阶),这是用于接下来训练总变化子空间矩阵T,公式分别如下:

Pr(i | x)是UBM的第 i 个高斯分量的后验概率,如下:

xt 是某句话的第 t 帧(D维),有改进的论文会把一阶统计量公式的 xt 改为 (xt - μi),这是基于UBM通用背景的均值矢量,实现去中心化,使 xt 更突出它的说话人变化性,如:

这里我截图了别的论文,和上图是对应的,c是第c个高斯分量,F是一阶统计量

可以把上图的yt改为如下:

4、根据充分统计量,我们会先将M个高斯分量的均值矢量(每个矢量有D维),串接在一起形成一个高斯均值超矢量,即M x D维,构成F(x)F(x)是MD维矢量;同时利用零阶统计量构造N,N是MD x MD维对角矩阵,以后验概率作为主对角线元素拼接而成;然后,先初始化T矩阵,构造一个[MD, V]维矩阵,V要远小于MD,V<<MD,这个V就是 i-vector 维度;公式如下:

接着,固定T矩阵,根据最大似然准则MLE,估算隐变量 w 的零阶和一阶统计量;再把新的零阶和一阶统计量放回去上面的式子,继续估算w……即使用无监督EM算法去迭代收敛,反复迭代5-6次,即可认为T矩阵收敛。

T矩阵特点:说话人的截荷空间,用于只表征说话人变化,不带有信道与噪声变化;是一个映射矩阵,类似于权重矩阵;能把高维统计量(超矢量)映射到低维说话人表征(i-vector);起到降维作用;


5、当UBM和T训练好,我们会将待提取i-vector的语音,提取高斯均值超矢量;基于UBM模型,用最大后验概率MAP去自适应当前句子的GMM模型,方法如下:

训练当中,可以只对均值进行更新,因为大量实验证明过只更新均值是性能最好的;然后生成M个分量的GMM,以每个高斯分量的均值矢量(每个矢量有D维)作为串接单元,形成MD维的高斯均值超矢量M

6、根据联合因子分析(简化):

M是第5步的待提取iv的语音的高斯均值超矢量,m是UBM的高斯均值超矢量,T是总变化子空间矩阵,w是i-vector;

维度对应的是 : MD = MD + [MD , V]*V 如果MFCCs设为13维,一二阶差分后成39维,UBM是2048分量,那均值超矢量就是79,872维,V设600即i-vector维度

参考文献:

【1】Speaker Verification Using Adapted Gaussian Mixture Models

【2】Front-End Factor Analysis for Speaker Verification
【3】SVM BASED SPEAKER VERIFICATION USING A GMM SUPERVECTOR KERNEL AND NAP VARIABILITY COMPENSATION

-------------------------------分割线-----------------------------------------------------

下面是给题目,上面是给科普(伪),QAQ错了记得戳我来改。。。
-------------------------------------------------------再分割----------------------------
训练时有了GMM-UBM,有了T矩阵,测试时就对enrollment和test的MFCC提取高斯超矢量M;然后根据M = m + Tw,得到w,也就是属于enrollment和test的i-vector;接下来就可以做分类了。

得到i-vector,那接下来就用PLDA或者cos作为后端分类器就好了,这个在kaldi的SRE10里有脚本。

如果想要在提取i-vector过程中使用到DNN,那就是借助语音识别的办法,训练DNN模型;然后以DNN的输出节点数作为UBM的高斯数。这个在SRE10-v2里有,不过这整套工程跑起来挺费时。

如果把DNN作为后端分类,也不是不行,就是把整个流程搞得太长了:得到i-vector之后,每次直接把单句话的iv输入进去,输入节点数等于iv维度;集内有多少个SPK,输出节点就有多少维,标签就有多少维;每个SPK的标签都保持one-hot;训练阶段用softmax或者cross entroy;这样就可以完成集内的识别。当然这方法有几个弊端,一是集内二是基于ivector。

如果要做识别,当然还有更暴力的方法,脱掉UBM T矩阵 ivector那一套,如果数据量够多的话,直接用MFCC输入DNN作识别就OK了,参考d-vector方法;不过dvector办法还是有弊端。同样,做二分类确认,也可以直接用DNN解决,只是还有些trick。

3#
jinming  2级吧友 | 2018-9-24 01:04:12 发帖IP地址来自

@yichi 的回答稍微补充一点, 对于 1:N 识别的话,最简单的就是对注册集的每一个人的ivector特征取平均,直接作为这个人的model, 然后测试的时候直接计算cos距离就好了,取top1作为识别结果(亲测比gmm-ubm效果要好一点,可以直接yichi提到的sre10/v1中的脚本提)。 同理的可以lda之后再这么做。 如果数据足够多的话,可以用ivector特征再用简单的dnn模型训或者svm,random forest, 当然,一般注册集每个人就几句话,所以一般可以不考虑这种做法, 还有就是如果新注册一个说话人,难道你要重新训一遍模型?

4#
喜欢吃  1级新秀 | 2018-9-24 01:04:13 发帖IP地址来自

最近疯狂看ivector论文

前几个大神已经说的很好了,不过因为Ivector训练时EM的公式太抽象麻烦了,我还在懵逼中,先死记公式,需要再回去查查线性代数的书

推荐两个tutorial的PPT,无法翻墙的百度搜不到去BING国际搜。


1.INTERSPEECH 2016 Tutorial:Machine Learning for Speaker Recognition

2.IVector tutorial_interspeech 27 Aug2011


还有一篇论文,但其实里面的公式也有点懵

Eigenvoice Modeling With Sparse Training Data



更新,经过了几个月的学习,特别是现在疯狂PLDA中的学习,

PLDA 公式 : Ivector = 数据均值+ 本征音空间*说话人因子+epsilon

大概了解了PLDA主要是通过对每个音频或者说话人的ivector的建模和再降维映射,看

要看分类的话可以着重于说话人因子. 本征音空间每一列可以表示一个特征向量,说话人因子表征该人的本征音空间,那么不同人的说话人因子的差别就是会很大. 然后用对数丝然函数log(音频1,音频2| 是同一个人)/P(音频1|甲)*P(音频2|乙)的分数来进行判别和分类哦

这几篇论文:

  1. The speaker partitioning problem

2. Analysis of I-vector Length Normalization in Speaker Recognition Systems

3.Probabilistic Linear Discriminant Analysis for Inferences About Identity

5#
yichi  2级吧友 | 2018-9-24 01:04:14 发帖IP地址来自

谢邀。

首先,你应该采用的是i-vector说话人识别技术路线对吧,这方面论文不少,搜关键字即可。

对测试语音,同样提取mfcc->提取i-vector,然后进行打分,打分的方法有cosine, LDA, PLDA,其中PLDA的效果是最好的,但是需要数据去训练获得参数。

代码的话,推荐kaldi里的sre10/v1,里面有全套的i-vector/PLDA说话人识别系统流程。

i-vector和DNN的配合?请问这个你指的是什么,我不是太明白。。

6#
Ma Jianbo  3级会员 | 2018-9-24 01:04:15 发帖IP地址来自

谢邀。

上面的回答已经比较详细了。如果你已经有了i-vector,那么后端就需要分类器或打分的算法了。一般还是GPLDA或Cosine Distance。你也可以自行设计一个neural networks去做这个打分或分类。

另外补充一点的是,声纹里面有identification和verification之分的。你所提的问题是identification的。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP