python声纹识别_声纹识别(说话人识别)

声纹识别

声纹识别,生物识别技术的一种,也称为说话人识别,有两类,即说话人辨认和说话人确认。声纹识别的理论基础是每一个声音都具有独特的特征,通过该特征能将不同人的声音进行有效的区分。

声音特征

1、语音的特殊性。发音器官分为声门上系统、喉系统、声门下系统,每个人都有自己的一套发音器官,它们的形态、构造各有差别,每次发音需要众多发音器官相互配合、共同运动。这决定了语音的物理属性(也称语音四要素):音质、音长、音强、音高。这些物理量人各不同,因而语音在声纹图谱上呈现不同的声纹特征,根据这些声纹特征参数,我们不但可以区分语声,而且可以认定同一人的语声。

2、语音的稳定性。一个人的发音器官发育成熟后,其解剖结构和生理状态是稳定不变的,加之发音人的言语习惯等语音的社会心理属性,使得每个人在不同时段所说的相同文本内容的话,基本语音特征是稳定不变的。因此,你可以把人的声道看做管乐中的号,长号、短号虽然都是号,但由于声道的形状、长短不同,吹出来的音质也不同。在声纹识别,包括语音识别领域,传统的声学特征包括梅尔倒谱系数MFCC、感知线性预测系数PLP、近几年的逐渐受到关注的深度特征Deep Feature、以及15年公开发表的能量规整谱系数PNCC等,都能作为声纹识别在特征提取层面可选且表现良好的声学特征。

原理特征

典型的声纹识别模型可以分为两种:template model和 stochastic model,即模板模型和随机模型。也称作非参数模型和参数模型。模板模型(非参数模型)将训练特征参数和测试的特征参数进行比较,两者之间的失真(distortion)作为相似度。

模板模型的典型例子有VQ(Vector quantization矢量量化)模型和动态时间规整法DTW(dynamic time warping)模型。VQ 方法则是通过聚类、量化的方法生成码本,识别时对测试数据进行量化编码,以失真度的大小作为判决的标准。DTW 通过将输入待识别的特征矢量序列与训练时提取的特征矢量进行比较,通过最优路径匹配的方法来进行识别。随机模型(参数模型)用一个概率密度函数来模拟说话人,训练过程用于预测概率密度函数的参数,匹配过程通过计算相应模型的测试语句的相似度来完成。(参数模型采用某种概率密度函数来描述说话人的语音特征空间的分布情况,并以该概率密度函数的一组参数作为说话人的模型。)例如(GMM和HMM)高斯混合模型和隐马尔科夫模型。

流程

声纹识别流程图

一般的声纹识别过程是:首先提取语音特征,在把特征投入模型中训练,最后寻找分数最高或者最接近的结果。

模式匹配方法

目前针对各种特征而提出的模式匹配方法的研究越来越深入。这些方法大体可归为下述几类:

1、概率统计

语音中说话人信息在短时内较为平稳,通过对稳态特征如基音、声门增益、低阶反射系数的统计分析,可以利用均值、方差等统计量和概率密度函数进行分类判决。其优点是不用对特征参量在时域上进行规整,比较适合文本无关的说话人识别。

2、动态时间规整

说话人信息不仅有稳定因素,而且有时变因素(语速、语调、重音和韵律)。将识别模板与参考模板进行时间对比,按照某种距离测定得出两模板间的相似程度。常用的方法是基于最近邻原则的动态时间规整DTW。

3、最近邻方法

训练时保留所有特征矢量,识别时对每个矢量都找到训练矢量中最近的K个,据此进行识别,通常模型存储和相似计算的量都很大;

4、矢量量化

矢量量化最早是基于聚类分析的数据压缩编码技术。矢量量化就是将若干个标量数据组构成一个矢量,然后在矢量空间给以整体量化,从而压缩了数据而不损失多少信息。Helms首次将其用于声纹识别,把每个人的特定文本编成码本,识别时将测试文本按此码本进行编码,以量化产生的失真度作为判决标准。这种方法的识别精度较高,且判断速度快。

5、VQ聚类方法

VQ聚类方法(如LBG,K-均值):效果比较好,算法复杂度也不高,和HMM方法配合起来更可以收到更好的效果;

6、隐马尔可夫模型

隐马尔可夫模型是一种基于转移概率和传输概率的随机模型,它把语音看成由可观察到的符号序列组成的随机过程,符号序列则是发声系统状态序列的输出。在使用HMM识别时,为每个说话人建立发声模型,通过训练得到状态转移概率矩阵和符号输出概率矩阵。

HMM不需要时间规整,可节约判决时的计算时间和存储量,目前被广泛应用在工业领域,缺点是训练时计算量较大。

7、人工神经网络

人工神经网络在某种程度上模拟生物的感知特性,它是一种分布式并行处理结构的网络模型,具有自组织和自学习能力、很强的复杂分类边界区分能力以及对不完全信息的鲁棒性,其性能近似理想的分类器。缺点是训练时间长,动态时间规整能力弱,网络规模随说话人数目增加时可能大到难以训练的程度。

总的说来,一个成功的声纹识别系统应该做到:首先能够有效地区分不同的说话人,又能在同一说话人语音发生变化时保持相对的稳定,如感冒等情况。其次,不易被他人模仿或能够较好地解决被他人模仿问题。最后,在声学环境变化时能够保持一定的稳定性,即抗噪声性能要好。

模型基础

1、GMM-UBM(混合高斯-通用背景模型)

混合高斯-通用背景模型(Gaussian Mixture Model-Universal Background Model,GMM-UBM)将声学特征投影到高维空间上,得到高维的均值超矢量。UBM采用大规模的说话人语料训练完成,并因此可以被采进行说话人的共性特征的描述。然后,以UBM为初始模型,采用目标说话人数据进行基于最大后验概率(Maximum A Posterior, MAP)的自适应训练,得到目标说话人的混合高斯模型(GMM)。通过计算似然值的方法进行说话人打分,进而进行识别判决。

高斯混合模型(GMM)是声纹识别中最常用的模型之一,因为在声纹识别中,如何将语音特征很好地进行总结及测试语音如何与训练语音进行匹配都是非常复杂难解决的问题,而GMM将这些问题转为对于模型的操作及概率计算等问题,并进行解决。高斯混合模型可以逼近任何一个连续的概率分布,因此它可以看做是连续型概率分布的万能逼近器。GMM模型是一个有监督的训练过程。它的基本思想就是利用已知的样本结果来反推最有可能(也就是最大概率)导致该个结果的参数值,在这个原则之下,GMM通常采用最大期望算法(EM)模型进行迭代直到收敛来确定参数。

虽然GMM模型座位一种通用的概率模型,对说话人识别的效果很好,但是实际上,我们经常会遇到训练语音比较短、或者预料比较少的情况,这样就不能训练处好的GMM模型,从而使识别率遍地。所以在GMM模型的基础上,有些专家就提出了高斯混合模型-全局背景模型(GMM-UBM)

而GMM-UBM系统利用大量的说话人语音训练出一个全局背景模型(UBM),因此在较小的训练集情况下仍然可以获得较为准确的模型,识别性能及鲁棒性都很好。

基于GMM-UBM的声纹识别系统流程图

2、联合因子分析

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

3、说话人矢量因子(Identity-Vector,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说话人识别系统的基线系统。

4、TVM-I-Vector

说话人识别中的经典方法是I-Vector,I-Vector建模方式称为全局差异空间建模(Total Variability Modeling, TVM),采用该方法提取的I-Vector记为TVM-I-Vector。

在基于TVM-I-Vector的声纹识别系统中,我们一般可以分为三个步骤。第一步是统计量的提取,第二步是提取I-Vector,第三步是进行信道补偿技术。统计量的提取是指将语音数据的特征序列,比如MFCC特征序列,用统计量来进行描述,提取的统计量属于高维特征,然后经过TVM建模,投影至低维空间中得到I-Vector。

在TVM-I-Vector建模中,统计量的提取是以UBM为基础的,根据UBM的均值及方差进行相应统计量的计算。

基于DNN(深度学习网络)的声纹识别的基本思想是取代TVM中的UBM产生帧级后验概率。即采用DNN进行帧级对齐的工作,继而计算训练数据的统计量,进行全局差异空间的训练以及I-Vector的提取。

最近使用神经网络来进行声纹识别的论文已经改进了传统的i-vector方法(参考Interspeech教程的原始论文或者幻灯片)。i-vector方法认为说话内容可以被分为两个部分,一个部分依赖于说话者和信道可变性,另一个部分依赖于其它的相关因素。i-vector声纹识别是一个多步过程,其涉及到使用不同说话者的数据来估计一个通用的背景模型(通常是高斯混合模型),收集充分的统计数据,提取i-vector,最后使用一个分类器来进行识别任务。

目前没有详细证据证明深度神经网络或组合i-vector的深度神经网络性能一定优于i-vector方法,可能原因是说话人识别中信道干扰较多,难以搜集足够数据训练深度神经网络。

5、信道补偿算法

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

什么叫信道补偿呢?为什么要信道补偿呢?

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

6、LDA线性鉴别分析

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

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

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

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

LDA如何找到这个映射方向。前面不是说LDA的目的是最大化类间距离,最小化类内距离么。LDA是可以直接求取解析解的。具体方法就是对目标函数求导并且令导数为零。但是在求导之前,记得对分母进行归一化,因为如果不归一化的话,映射方向扩大任意倍等成立,所以不好确定映射方向的具体值。在求解析解的过程中,经过一系列变化,我们最终只要求出原始样本的均值和方差就可以最佳映射方向 w,这就是Fisher 于 1936年提出的线性判别分析。

可参考模型

基于一篇论文:《An overview of text-independent speaker recognition: From features to supervectors》

MFCC+GMM

1、对输入的语音数据序列(PCM 码流)进行预处理。

a) 去除非语音信号 和 静默语音信号;

b) 对语音信号分帧,以供后续处理。

2、提取每一帧语音信号的MFCC 参数 并保存。

1)预增强(Pre-Emphasis) :差分语音信号。

2)音框化(Framing) :对语音数据分帧。

3)汉明窗(Hamming Windowing) :对每帧信号加窗,以减小吉布斯效应的影响。

4)快速傅立叶变换(FFT) :将时域信号变换成为信号的功率谱。

5)三角带通滤波器(Triangle Filters) :三角滤波器覆盖的范围都近似于人耳的一个临              界带宽,以此来 模拟人耳的掩蔽效应。

6)离散余弦转换(DCT) :去除各维信号之间的相关性,将信号映射到低维空间。

用第2 步提取的 MFCC 参数训练话者的 GMM (高斯混合模型),得到专属某话者的 GMM 声纹模型。

声纹识别。提供输入话音与GMM 声纹模型的匹配运算函数,以判断输入话音是否与声纹匹配

基于TVM-I-Vector的声纹识别系统。

说话人矢量因子(Identity-Vector,I-Vector)模型以GMM-UBM为基础,基于的假设是所有的说话人信息隐含在高维的均值超矢量中。它的基本思想是将高维的均值超矢量投影至低维空间中进行建模,即将长短不一的语音文件通过全局差异空间建模(Total Variable space Model, TVM)的方式,得到长度一致的低维向量作为说话人模型。这个低维矢量即为I-Vector。由于I-Vector建模中没有区分语音中说话人信息以及信道信息,为了降低信道对识别的影响,分别采用了线性判别分析(Linear Discriminant Analysis,LDA)以及概率线性判别分析(Probability Linear Discriminant Analysis,PLDA)对I-Vector进行信道补偿,提高识别效果。

基于DNN统计量提取的I-Vector声纹识别系统。

在基于TVM-I-Vector的声纹识别系统中,采用UBM计算后验概率,提取相关统计量,从而进行全局差异空间的估计。考虑到UBM数据驱动的建模方式可能会导致后验概率计算的误差较大,从而影响识别性能,本文采用自动语音识别(Automatic Speech Recognition, ASR)任务中训练得到的深度神经网络(Deep Neural Network, DNN)模型作为计算后验概率的模型替代UBM,以得到更准确的统计量进行模型估计,从而提高识别效果。

基于深度瓶颈特征(Deep Bottleneck Feature, DBF)的I-Vector声纹识别系统。

深度瓶颈层(Deep Bottleneck Layer)在语音识别中的成功应用证明了DBF在特征表示上的优势。低维的DBF在网络结构中能够实现高维输入至输出的重现,说明它是一种抽象、凝练且更具区分性的特征。相比于声纹识别中的Mel频率倒谱系数 (Mel Frequency Cepstral Coefficients, MFCC)特征,DBF在声纹识别上也表现出了一定的优势。在本文中,实现了基于DBF的I-Vector模型的估计。此外,考虑到MFCC以及DBF的互补作用,进行了基于DBF以及MFCC特征融合的I-Vector建模,进一步提高声纹识别系统的性能。

声纹识别应用前景

与其他生物识别技术,诸如指纹识别、掌形识别、虹膜识别等相比较,声纹识别除具有不会遗失和忘记、不需记忆、使用方便等优点外,还具有以下特性:

1、用户接受程度高,由于不涉及隐私问题,用户无任何心理障碍。

2、利用语音进行身份识别可能是最自然和最经济的方法之一。声音输入设备造价低廉,甚至无费用,而其他生物识别技术的输入设备往往造价昂贵。

3、在基于电信网络的身份识别应用中,如电话银行、电话炒股、电子购物等,与其他生物识别技术相比,声纹识别更为擅长,得天独厚。

4、由于与其他生物识别技术相比,声纹识别具有更为简便、准确、经济及可扩展性良好等众多优势,可广泛应用于安全验证、控制等各方面,特别是基于电信网络的身份识别。

已有的成功案例

TensorFlow-based Deep Speaker实现ResNet网络上的TE2E(Tuple-base end-to-end)Loss function训练方式。安装TensorFlow、Python3和FFMPEG(文件格式转换工具)后,准备好数据,即可一键训练。只可惜验证部分还没做,而且GRU没实现、tensor实现部分也不严谨,可详细阅读代码和论文

论文地址:Deep Speaker: an End-to-End Neural Speaker Embedding System

TristouNet from pyannote-audio一个音频处理工具箱,包括Speech change detection, feature extraction, speaker embeddings extraction以及speech activity detection。其中speaker embeddings extraction部分,包括TristouNet的实现。

CNN-based Speaker verificationConvolutional Neural Networks(卷积神经网络)在声纹识别上的试验,一个不错的尝试,可以与TDNN/x-vector做下对比。

论文地址:Text-Independent Speaker Verification Using 3D Convolutional Neural Networks

推荐论文

GMM-UBM: Speaker Verification Using Adapted Gaussian Mixture Models

MAP: Eigenvoice Modeling With Sparse Training Data

I-vector: Front-End Factor Analysis for Speaker Verification

参考:

你可能感兴趣的:(python声纹识别)