声纹识别由三部分组成:特征,模型,得分。

特征方面:

MFCC/PLP/FBank等短时频谱特征;

D-vector (谷歌2014年提的)

Deep feature / Bottleneck feature /Tandem feature (三者不是并行关系,可以搜关键词查看相关论文)

模型方面:

  • GMM-UBM
  • JFA (Joint Factor Analysis)
  • GMM-UBM i-vector
  • Supervised-UBM i-vector
  • DNN i-vector (2014年微软Yun Lei等人提的)

得分方面:

  • SVM(早期与GMM-UBM一起使用最为后端分类器)
  • Cosine Distance (CDS)
  • LDA
  • PLDA

当然,随着神经网络的发展和训练数据的庞大,谷歌、微软和百度等公司使用end-to-end的方法集这三个方面于一体,效果也还可以。

除了以上主流技术,还有以下几种:

BNF特征,ivector+PLDA/CDS、GMM+SVM、d-vector,ivevtor-plda 还有一些d-vector对数据量要求比较大的,主流的还是用nn去提取特征。

声音特性

  1. 语音的特殊性。发音器官分为声门上系统、喉系统、声门下系统,每个人都有自己的一套发音器官,它们的形态、构造各有差别,每次发音需要众多发音器官相互配合、共同运动。这决定了语音的物理属性(也称语音四要素):音质、音长、音强、音高。这些物理量人各不同,因而语音在声纹图谱上呈现不同的声纹特征,根据这些声纹特征参数,我们不但可以区分语声,而且可以认定同一人的语声。
  2. 语音的稳定性。一个人的发音器官发育成熟后,其解剖结构和生理状态是稳定不变的,加之发音人的言语习惯等语音的社会心理属性,使得每个人在不同时段所说的相同文本内容的话,基本语音特征是稳定不变的。因此,你可以把人的声道看做管乐中的号,长号、短号虽然都是号,但由于声道的形状、长短不同,吹出来的音质也不同。

发展历史

新加坡的I2R实验室发布了一套用于评测文本相关识别的 标准数据集RSR2015,涵盖了文本相关领域的多个应用场景。

在声纹识别,包括语音识别领域,传统的声学特征包括梅尔倒谱系数MFCC、感知线性预测系数PLP、近几年的逐渐受到关注的深度特征Deep Feature、以及15年公开发表的能量规整谱系数PNCC等,都能作为声纹识别在特征提取层面可选且表现良好的声学特征。

1. GMM
GMM中高斯分量的数量足够多的时候,GMM可以模拟任意的概率分布。
 从模式识别的相关定义上来说,GMM是一种参数化(Parameterized)的生成性模型(Generative Model),具备对实际数据极强的表征力;但反过来,GMM规模越庞大,表征力越强,其负面效应也会越明显:参数规模也会等比例的膨胀,需要更多的数据来驱动GMM的参数训练才能得到一个更加通用(或称泛化)的GMM模型。
2. UBM
DA Reynolds的团队,提出了一种改进的方案:既然没法从目标用户那里收集到足够的语音,那就换一种思路,可以从其他地方收集到大量非目标用户的声音,积少成多,我们将这些非目标用户数据(声纹识别领域称为背景数据)混合起来充分训练出一个GMM,这个GMM可以看作是对语音的表征,但是又由于它是从大量身份的混杂数据中训练而成,它又不具备表征具体身份的能力。 

这个混合GMM类似于贝叶斯框架的先验模型,它对语音特征在空间分布的概率模型给出了一个良好的预先估计,我们不必再像过去那样从头开始计算GMM的参数(GMM的参数估计是一种称为EM的迭代式估计算法),只需要基于目标用户的数据在这个混合GMM上进行参数的微调即可实现目标用户参数的估计,这个混合GMM叫**通用背景模型**(Universal Background Model,UBM)。 

UBM的一个重要的优势在于它是通过最大后验估计(Maximum A Posterior,MAP)的算法对模型参数进行估计,避免了过拟合的发生。MAP算法的另外一个优势是我们不必再去调整目标用户GMM的所有参数(权重,均值,方差)只需要对各个高斯成分的均值参数进行估计,就能实现最好的识别性能。

但是,待估参数还是太多了,检测时需要输入的语音片段太长,不符合实际使用需求。
GMM-UBM缺乏对应于信道多变性的补偿能力,直白点说就是它不抗干扰。

UBM受训练时长、混合度、信道类型、男女比例等因素影响比较大。
3. 支持向量机
WM Campbell将支持向量机(Support Vector Machine,SVM)引入了GMM-UBM的建模中,通过将GMM每个高斯分量的均值单独拎出来,构建一个高斯超向量(Gaussian Super Vector,GSV)作为SVM的样本,利用SVM核函数的强大非线性分类能力,在原始GMM-UBM的基础上大幅提升了识别的性能,同时基于GSV的一些规整算法,例如扰动属性投影(Nuisance Attribute Projection, NAP),类内方差规整(Within Class Covariance Normalization,WCCN)等,都在一定程度上补偿了由于信道易变形对声纹建模带来的影响。
4. FA因子分析
在MAP框架下,我们都是单独去调整GMM的每一个高斯分量,参数太多太累了,那有没有办法同时调整一串高斯分量呢?

借助一种称为因子分析(Factor Analysis,FA)的算法框架,只用数百个基向量的线性组合(每个基向量的权重就可以看作是在这个基坐标上的坐标点),就足够能表征全体高斯超向量的变化了,也就是说,我们现在只需要几百个变量(通常为400-600),就足够表示一个50000维度的高斯分量均值集合! 

基向量的估计是通过一种称为基于概率的主成份分析的(Probabilistic Principal Component Analysis, PPCA)的类EM算法,基于海量的背景说话人数据学习而来。这样少量的数据就能实现GMM高斯分量的整体参数估计,随着数据量的增加,GMM会迅速趋于一个稳定的参数估计。
5. JFA联合因子分析
加拿大蒙特利尔研究所(Computer Research Institute of Montreal,CRIM)的科学家兼公式推导帝Patrick Kenny在05年左右提出了一个设想,既然声纹信息可以用一个低秩的超向量子空间来表示,那噪声和其他信道效应是不是也能用一个不相关的超向量子空间进行表达呢? 

基于这个假设,Kenny提出了联合因子分析(Joint Factor Analysis,JFA)的理论分析框架,将说话人所处的空间和信道所处的空间做了独立不相关的假设,在JFA的假设下,与声纹相关的信息全部可以由特征音空间(Eigenvoice)进行表达,并且同一个说话人的多段语音在这个特征音空间上都能得到相同的参数映射,之所以实际的GMM模型参数有差异,都是由特征信道(Eigenchannel),即信道效应的干扰导致的,我们只需要同时估计出一段语音在特征音空间上的映射和特征信道上的映射,然后撇掉特征信道上的干扰就可以实现更好的声纹环境鲁棒性。
6. 全因子空间 I-vector
数据之间都具有相关性,但绝对的独立同分布的假设又是一个过于强的假设。
09年,Kenny的学生,N.Dehak,提出了一个更加宽松的假设:既然声纹信息与信道信息不能做到完全独立,那干脆就用一个超向量子空间对两种信息同时建模;即正交独立性没有办法满足,那我们就干脆用一个子空间同时描述说话人信息和信道信息。 

这时候,同一个说话人,不管怎么采集语音,采集了多少段语音,在这个子空间上的映射坐标都会有差异,这也更符合实际的情况。这个即模拟说话人差异性又模拟信道差异性的空间称为全因子空间(Total Factor Matrix),每段语音在这个空间上的映射坐标称作身份向量(Identity Vector, i-vector),i-vector向量通常维度也不会太高,一般在400-600左右。 

I-vector的出现使得说话人识别的研究一下子简化抽象为了一个数值分析与数据分析的问题:任意的一段音频,不管长度怎样,内容如何,最后都会被映射为一段低维度的定长i-vector。 
我们只需要找到一些优化手段与测量方法,在海量数据中能够将同一个说话人的几段i-vector尽可能分类得近一些,将不同说话人的i-vector尽可能分得远一些。
Dehak在实验中还发现i-vector具有良好的空间方向区分性,即便上SVM做区分,也只需要选择一个简单的余弦核就能实现非常好的区分性。

截至今日,i-vector在大多数情况下仍然是文本无关声纹识别中表现性能最好的建模框架,学者们后续的改进都是基于对i-vector进行优化,包括线性区分分析(Linear Discriminant Analysis, LDA),基于概率的线性预测区分分析(probabilistic linear discriminant analysis,PLDA)甚至是度量学习(Metric Learning)等。

趋势 && 问题

转wav、去静音VAD,MFCC提取、CVN归一化等等根据语料的情况做出要用哪些怎么处理;接着是训练GMM-UBM,训练出每个高斯分量的参数(均值方差权值),当中是使用EM和MAP;接着是训练总体变化子空间T,使高斯分量从高维映射到低维的i- vector ,得到i- vector 矢量以后要继续从 400 维降到 200 维,比较多用的是LDA,然后用WCCN对类内空间归一化来提升类间的差异;这样就可以得到该speaker的均值和方差作为一个对比的根据。最后把待识别的speaker也经过上面的步骤,得到待识别的参数,再和训练speakers进行打分判断哪个相似度更高;打分的方法可以用PLDA概率形式LDA或者CDS余弦距离打分。要实现更低的EER适应复杂噪声环境,可以用到DNN的Bottleneck方法提取speaker的充分统计量,而且各种算法合理组合优化也成了目前趋势。

跨信道、短语音、背景噪声、健康状况、说话人情感变化等是目前存在的问题。

文本无关的声纹识别

语音--预处理--提取特征向量--模式匹配(根据特征向量训练声纹模型库)--后处理--识别结果
模式匹配方法概论
(1)模板匹配方法:利用动态时间弯折(DTW)以对准训练和测试特征序列,主要用于固定词组的应用(通常为文本相关任务);在训练过程中从每个说话人的训练语句中提取相应的特征矢量来描述各个说话人的行为,在测试阶段,从说话人的测试语音信号中用同样的方法提取测试模板,主要有动态时间规整方法和矢量量化方法。
(2)最近邻方法:训练时保留所有特征矢量,识别时对每个矢量都找到训练矢量中最近的K个,据此进行识别,通常模型存储和相似计算的量都很大;
(3)神经网络方法:有很多种形式,如多层感知、径向基函数(RBF)等,可以显式训练以区分说话人和其背景说话人,其训练量很大,且模型的可推广性不好;
(4)隐式马尔可夫模型(HMM)方法:通常使用单状态的HMM,或高斯混合模型(GMM),是比较流行的方法,效果比较好;
(5)VQ聚类方法(如LBG,K-均值):效果比较好,算法复杂度也不高,和HMM方法配合起来更可以收到更好的效果;
(6)多项式分类器方法:有较高的精度,但模型存储和计算量都比较大。

表征说话人确认系统性能的两个重要参数是错误拒绝率和错误接受率,前者是拒绝真正说话人而造成的错误,后者是接受集外说话人而造成的错误,二者与阈值的设定相关。在现有的技术水平下,两者无法同时达到最小,需要调整阈值来满足不同应用的需求,比如在需要“易用性”的情况下,可以让错误拒绝率低一些,此时错误接受率会增加,从而安全性降低;在对“安全性”要求高的情况下,可以让错误接受率低一些,此时错误拒绝率会增加,从而易用性降低。

声纹提取及识别

[MFCC+GMM]

github:openVP

  1. 对输入的语音数据序列(PCM 码流)进行预处理。 a) 去除非语音信号 和 静默语音信号; b) 对语音信号分帧,以供后续处理。
  2. 提取每一帧语音信号的MFCC 参数 并保存。 1)预增强(Pre-Emphasis) :差分语音信号。 2)音框化(Framing) :对语音数据分帧。 3)汉明窗(Hamming Windowing) :对每帧信号加窗,以减小吉布斯效应的影响。 4)快速傅立叶变换(FFT) :将时域信号变换成为信号的功率谱。 5)三角带通滤波器(Triangle Filters) :三角滤波器覆盖的范围都近似于人耳的一个临界带宽,以此来 模拟人耳的掩蔽效应。 6)离散余弦转换(DCT) :去除各维信号之间的相关性,将信号映射到低维空间。
  3. 用第2 步提取的 MFCC 参数训练话者的 GMM (高斯混合模型),得到专属某话者的 GMM 声纹模型。
  4. 声纹识别。提供输入话音与GMM 声纹模型的匹配运算函数,以判断输入话音是否与声纹匹配。

GMM-UBM系统框架

  • [ ] 不大明白

高斯混合模型GMM将空间分布的概率密度用多个高斯概率密度函数的加权和来拟合,可以平滑地逼近任意形状的概率密度函数,并且是一个易于处理的参数模型。在具体表示上,这个模型实际上就是把高斯混合模型的每个高斯分量的均值向量排列在一起组成一个超向量作为某一个说话人的模型,称为均值超矢量。

在训练说话人模型的时候,由于注册时说话人的数据稀疏,通常利用一个通用背景模型(Universal Background Model,UBM)和少量的说话人数据,通过自适应算法(如最大后验概率MAP,最大似然线性回归MLLR等)得到目标说话人模型。

对数似然比的评价指标。用测试数据分别与模型和UBM进行似然度比较,然后将这两个似然相除再取对数,用得到的值作为打分来评价一条测试数据是否和模型匹配。由于UBM代表了最最普遍的平凡的语音特征,而模型代表了属于这一个说话人的特征。用对数似然比来表示,就是评价测试数据到底和模型更接近还是和UBM最接近。最后设定一个阀值,用来进行最后的分类判断。

UBM平均每个混合得到100帧左右训练样本时,能够获得较高且较稳定识别率

联合因子分析

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

I-vector特征

受联合因子分析理论的启发,Dehak提出了从GMM均值超矢量中提取一个更紧凑的矢量,称为I-Vector。这里的I是身份(Identity)的意思,出于自然的理解,I-Vector相当于说话人的身份标识。

信道补偿算法

信道补偿主要分三个层次:基于特征的补偿,基于模型的补偿和基于得分的补偿。

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年提出的线性判别分析。

PLDA(概率线性判别分析)算法

Paper

  • DNN方法
  • Speaker Recognition Using Wavelet Packet Entropy(小波包熵), I-Vector, and Cosine Distance Scoring
  • An overview of text-independent speaker recognition:From features to supervectors

GMM+UBM

  • 基于GMM-UBM快速说话人识别方法
  • sidekit中GMM-UBM中speaker-adaptation部分
  • 基于树形通用背景模型的高效说话人辨认

i-vector

  • PLDA in the i-supervector space for text-independent speaker verification: GOOD HELPFUL
  • i-vector && PLDA .2011
  • 基于鉴别性i_vector局部距离保持映射的说话人识别
  • 基于i-vector的说话人识别系统
  • Simplification and optimization of i-vector extraction
  • 计算i-vector
  • 基于短语音和信道变化的说话人识别研究: 全面 清楚

参考: