我对说话人识别/声纹识别的研究综述

GMM-UBM系统框架

最初用的特征是声学特征MFCC,这个东西我不太熟,只知道它是从wav或者其它格式语音文件直接提出。

有了特征就可以建立模型了,这里我们的模型叫做“高斯混合模型”。不同说话人的差异主要表现在其短时语音谱的差异,而这又可以用每个说话人的短时谱特征所具有的概率密度函数来衡量。高斯混合模型GMM将空间分布的概率密度用多个高斯概率密度函数的加权和来拟合,可以平滑地逼近任意形状的概率密度函数,并且是一个易于处理的参数模型。在具体表示上,这个模型实际上就是把高斯混合模型的每个高斯分量的均值向量排列在一起组成一个超向量作为某一个说话人的模型,称为均值超矢量。

可是,通常在实际中每一个说话人的语音数据很少,而训练高斯混合模型又需要大量的训练数据,怎么办呢?于是,UBM通用背景模型被提了出来。在训练说话人模型的时候,由于注册时说话人的数据稀疏,通常利用一个通用背景模型(Universal Background Model,UBM)和少量的说话人数据,通过自适应算法(如最大后验概率MAP,最大似然线性回归MLLR等)得到目标说话人模型。

OK,特征和模型都建立好了,我们怎么测试呢?这里用到一个对数似然比的评价指标。用测试数据分别与模型和UBM进行似然度比较,然后将这两个似然相除再取对数,用得到的值作为打分来评价一条测试数据是否和模型匹配。

怎么理解这个打分标准呢?由于UBM代表了最最普遍的平凡的语音特征,而模型代表了属于这一个说话人的特征。用对数似然比来表示,就是评价测试数据到底和模型更接近还是和UBM最接近。最后设定一个阀值,用来进行最后的分类判断。

联合因子分析

上面的GMM-UBM系统非常经典,之前一般作为说话人识别的基线系统。但是,这个系统不能够很好解决说话人识别领域中的一个最令人头疼的问题,那就是信道鲁棒。关于信道鲁棒的复杂性问题可以查阅资料。于是,就有人提出了将因子分析应用到说话人领域。

联合因子分析认为,在GMM-UBM系统中的高斯模型均值超矢量,大体上可以分为跟说话人本身有关的矢量特征和跟信道以及其他变化有关的矢量特征的线性叠加。也就是,将说话人GMM均值超矢量所在的空间划分为本征空间,信道空间,最后还有一个残差空间。这样,如果我们能抽取出跟说话人本身相关的特征而去掉和信道相关的特征,就能很好地克服信道影响进行识别了。事实证明这种思路是对的,采用联合因子分析后,系统的性能明显提高。

基于I-vector特征的说话人识别

传统的联合因子分析建模过程主要是基于两个不同的空间:由本征音空间矩阵定义的说话人空间,由本征信道空间矩阵定义的信道空间。受联合因子分析理论的启发,Dehak提出了从GMM均值超矢量中提取一个更紧凑的矢量,称为I-Vector。这里的I是身份(Identity)的意思,出于自然的理解,I-Vector相当于说话人的身份标识。

I-vector方法采用一个空间来代替这两个空间,这个新的空间可以成为全局差异空间,它即包含了说话者之间的差异又包含了信道间的差异。所以I-Vector的建模过程在GMM均值超矢量中不严格区分话者的影响和信道的影响。这一建模方法的动机来源于Dehak的又一研究: JFA建模后的信道因子不仅包含了信道效应也夹杂着说话人的信息。

所以到现在,我们主要用的特征是i-vector。这玩意是通过高斯超向量基于因子分析而得到的。这玩意是基于单一空间的跨信道算法,该空间既包含了说话人空间的信息也包含了信道空间信息。相当于用因子分析方法将语音从高位空间投影到低维。

你可以把I-vector看做是一种特征,也可以看做是简单的模型。最后,在测试阶段,我们只要计算测试语音I-vector和模型的I-vector之间的consine距离,就可以作为最后的得分。这种方法也通常被作为基于I-vector说话人识别系统的基线系统。

信道补偿算法

其实,信道补偿相关的工作从有说话人识别领域以来就一直有研究,包括上面的GMM-UBM系统和联合因子分析系统。信道补偿主要分三个层次:基于特征的补偿,基于模型的补偿和基于得分的补偿。由于我所研究的方面都是在I-vector特征的基础上的,所以这里重点说一下基于I-vector特征的信道补偿算法。

为啥要信道补偿呢?前面说I-vector的时候说了,I-vector特征中既包含说话者信息又包含信道信息,而我们只关心说话者信息。也就是说,由于信道信息的存在,对我们做说话人识别产生了干扰,甚至严重影响系统的识别准确率。于是,我们就要想办法尽量减小这种影响。这就是所谓的信道补偿。

线性鉴别分析LDA

信道补偿算法有很多,先说一下LDA。关于LDA的资料很多,这里简单说一下为什么LDA能够用在说话人识别而且是如何进行信道补偿的。

首先,LDA至多可生成C-1维子空间(C为分类类别数),LDA降维后的度区间在 [1,C-1] ,与原始特征数n无关,因此二分类问题至多可以降维到一维,导致有些线性不可分数据分布情况无法分类。在说话人识别中,大部分情况是二分类问题,所以这里LDA的作用是将原始高维特征数据降维到一维,这样每一个样本特征向量映射为一维上的一个点,这个点的数值表示该点到原点的距离。

当一个说话人有很多语音时,表现为这些语音在说话人空间中聚集为一簇。如果这些语音收到信道的影响,那么就表现为这个说话人的语音的方差很大。然后,LDA尝试着找到一个新的方向,将原来的所有数据投影到这个方向,使得在这个方向中同一说话人的数据具有最小的类内方差,同时不同说话人之间的距离尽量大。这样,就达到减小信道差异的影响了。

LDA其实也是一种降维方法。它尽量去移除不需要的方向,最小化类内的方差信息量。也就是,LDA寻找一个新的方向去更好地对不同的类做出分类。可见,LDA非常适合作为说话人识别系统的信道补偿算法。

当使用LDA对测试数据和模型的I-vector进行重新投影后,然后计算它们之间的cosine距离,就可以作为最后的得分。

最后简单说一下,LDA如何找到这个映射方向。前面不是说LDA的目的是最大化类间距离,最小化类内距离么。我们很容易认为只要定义一个目标函数然后去用一般的最优化方法去求近似解就好了。其实,不用这么麻烦的,LDA是可以直接求取解析解的。具体方法就是对目标函数求导并且令导数为零。但是在求导之前,记得对分母进行归一化,因为如果不归一化的话,映射方向扩大任意倍等成立,所以不好确定映射方向的具体值。

OK,求解析解的过程中,经过一系列变化,我们最终只要求出原始样本的均值和方差就可以最佳映射方向 w,这就是Fisher 于 1936年提出的线性判别分析。

你可能感兴趣的:(机器学习)