当前位置:首页 > 科学传播 > 科普文章

科普文章

声纹识别:你的声音是这样被“破译”的!

  • 发表日期:2017-10-25 【 【打印】【关闭】
  •    在《最强大脑》第四季的节目中,有了一名特殊的选手叫做——小度,它携带着一项特殊的技能“声纹识别”走进大众的视野。(声纹识别,真的不是小编打错字了吗?只听说过指纹,声音看不见摸不着,怎么会还有“纹”)没错,就是声纹识别,这是一种抽象的表述,学术上一般称为“说话人辨认(Speaker Identification)”。还有另一相似的术语叫做说话人确认(Speaker Veridiction),两者之间的区别仅仅在于说话人确认是在待识别语音与注册语音是不是同一个人,说话人辨认是找出待识别语音对应的说话人,两者都属于说话人识别范畴。

      节目中的比赛规则是这样的:从21位性别相同、年龄相仿、声线极为相似的专业合唱团中,选出三位每个人读一句话,加密后成为断断续续的声音样本再交给小度和人类选手,要求他们从合唱声音中识别出三名线人的声音。(什么加密什么样本,你说慢点好不好)简单说就是根据声音片段从21个人中挑选出对应的人。那个结果是,小度与一名很有听力天赋的少年打成平手,但是已经超过了我们一般人的水平。

        下面就让我们一起唠唠说话人识别。 

      首先背一下书本上面的概念,语音具有特殊性和稳定性。特殊性在于,每个人都具有属于自己的一套发声器官,它们的形态构造千差万别,声音的产生需要多个器官的相互配合,引起空气振动。这也决定了不同人的语音的物理属性(音质、音长、音高、音强)是不同的。不同的人具有不同的声音特征,在语音图谱上表现为参数上的差异,我们可以根据特征参数,确定是否是同一个人。稳定性在于,当一个人发音器官发育成熟之后,其解剖结构和生理状态是稳定不变的,加之发音人的言语习惯等语音的社会心理属性,使得不同人在不同的时段内所说的相同文本内容的话,基本语音特征是稳定不变的。很喜欢某网友举的例子,管乐中包括很多种号,长号、短号、圆号等由于声道长短形状差异,吹出来的音色也是不一样的。

      鉴于语音的特殊性和稳定性,我们可以将语音作为特征来区分说话人。声纹识别本质上是一个模式识别问题,解决这个问题最经典的方法就是GMM-UBM了。

      其中GMM是大家都熟悉的高斯混合模型,而UBM是通用背景模型(Universal Back-ground Model)。实际中,每一个说话人的语音数据很少,训练不充分,导致对说话人建模的精度不够,因此提出了UBM模型。UBM模型是在大量说话人数据混合训练而成的,因此可以认为UBM用来表征说话人的共性特征。UBM实际上就是一个大的混合高斯模型,最简单的方法是利用EM算法迭代训练,当应用于性别无关的说话人识别测试时,应该注意男性女性说话人数据的均衡。

      通过在UBM的基础上,利用最大后验概率(MAP)的方法自适应得到具体的说话人GMM模型,因此可以看作是具体说话人的GMM模型表示个性特征。MAP自适应只是修改UBM和目标说话人特征中相近部分的高斯描述,体现说话人的个性特征,而那些与说话人特征分布较远的部分不作变动,作为说话人之间的共性特征。自适应的过程可以用经典论文《Speaker Verification Using Adapted Gaussian Mixture Models》中,四个圆圈表示四个高斯分布,上面两个椭圆变圆的过程就是在UBM基础上对说话人特征进行自适应的过程。在具体表示上,这个模型实际上就是把高斯混合模型的每个高斯分量的均值向量排列在一起组成一个超向量作为某一个说话人的模型,称为均值超矢量。 

      UBM模型就好像我有整个中国所有人的声音,我用这些声音计算出了一个通用的声音,这个通用的声音和每个人的声音都有相似的地方。自适应后产生的说话人GMM模型就好像,我们在这个通用声音上面稍微进行点儿修改,增加自己独特的特征,例如沙哑的嗓音,就得到了我独特的声音。

      得到了特征向量(均值超矢量),我们接下来就是计算输入语音与系统中注册的说话人模型之间的相似性,也就是进行打分。在说话人确认中采用的一种方法就是计算似然比得分。已知H0表示测试语音X来自说话人S,已知H1表示测试语音X不是来自说话人S,那么似然比得分可以表示为

      当得分Score(X)大于阈值时,表示测试语音属于说话人S,小于阈值则不属于该说话人。

      在说话人识别中最令人头疼的一个问题是信道的鲁棒性,GMM-UBM把不同说话人之间的信道差异也作为说话人个性特征,这有些不妥当。因此GMM-UBM的均值超矢量可以分成三个空间本征空间、信道空间和残差空间。

      Dehak提出I-Vector,实际上是从上面GMM均值超矢量的基础上提取的一个更为紧凑的矢量,称之为Identity Vector,相当于说话人的身份标识。I-vector方法采用全局差异空间代替信道空间和残差空间。

      (既然信道空间影响准确性,那为什么不直接去掉呢?Dehak的又一研究表示,联合因子分析建模后的信道因子不仅包含了信道效应也夹杂着说话人的信息。)

      GMM-UBM的高斯均值超矢量可以用矩阵M来表示,其中m表示一个与特定说话人和信道无关的超矢量,全局差异空间T完成冲高维空间到低维空间的映射,从而获得更为紧凑的超矢量w用于进一步分类和识别,w就是I-Vector。

      模型首先训练一个UBM模型,以该模型为基础计算子空间数据的各阶统计量。然后利用各阶统计量,采用EM算法进行全局差异空间T的训练。训练完成后即可进行I-Vector的提取。

      提取到的I-vector可以直接作为特征进行计算,可以直接计算注册人语音与测试语音I-vector之间的cos距离作为相似性得分。但是考虑到全局差异空间T中的说话人信息和信道信息不再区分,提取出的I-vector可能不是最优,因此可以考虑进行信道补偿,以提高I-vector的准确性。实现信道补偿的常用算法是PLDA(概率线性区分性分析)。 

      上面介绍的这些模型都是经典模型,深度学习在说话识别场景下的普及并没有在图像和语音识别领域那么迅速,2017年上半年百度提出了一种新型的深度模型用于说话人识别场景——DeepSpeaker。  

      相比于传统I-Vector而言,Deep Speaker是一种端到端的结构,将特征提取和分类融合到了一起,最终直接打分结果。论文中提出的深度结构如下图所示。

      文章提出使用深度残差CNN(ResCNN,单元结构如下图所示)逐帧的从语句中提取特征,然后将同一个语句的多个帧级特征求平均,也就是将帧级别的特征表示转变为语句级别的特征表示,然后通过一个affine层和长度归一化层,将语句级特征变为说话人特征,即Speaker Embedding。网络的核心是采用了用于人脸识别中的triplet loss作为损失函数进行训练。

       采用triplet loss训练,实际上就是用一个来自特定说话人的样本作为Anchor,一个来自同一说话人的样本作为positive,一个来自不同人的样本作为negative,训练过程就是最小化同类说话人之间的余弦距离,最大化不同说话人之间余弦距离的过程。

      论文中除了采用ResCNN逐帧提取特征之外,还用了CNN与三层GRU组合的深度结构来提取特征,后面的average sentence层,affine层,lengthnormolization层以及训练规则都是相同的。

      实验在三个数据集上都取得了很大的性能提升。

      说话人识别实际上是一个很有趣的方向,结合其他技术能创造出很有价值的产品,例如,可以使用声纹来登录设备,说话人的验证也可以作为金融交易的额外安全措施。此外,像智能家居助理这样的共享设备可以利用这种技术来根据当前用户提供个性化服务。

        

      参考文献: 

      [1]Reynolds, Douglas A., T. F. Quatieri, and R. B. Dunn. "SpeakerVerification Using Adapted Gaussian Mixture Models." Digital SignalProcessing 2000:19–41.

      [2] DeepSpeaker: an End-to-End Neural Speaker Embedding System