基于深度神经网络特征提取的文本无关的说话人识别

部分转自https://blog.csdn.net/monsieurliaxiamen/article/details/79638227

对文章“Deep neural network embeddings for text-independent speaker verification” 的解读。

1. 概要

  在实际应用中,往往被测试者或被验证者的语音长度相对较短,若使用传统的PLDA/ivector模型效果会相对一般(这一点会在结果中体现出来)。神经网络具有极强的特征提取能力,所以这篇文章提出了使用TDNN提取语音的embeddings,然后再基于一个PLDA backend 对embeddings进行相似度打分。

2. 实现

   2.1 训练思路

  阶段一(对神经网络的训练):

基于深度神经网络特征提取的文本无关的说话人识别_第1张图片

  训练的神经网络结构如图所示,pooling层之前的结构是TDNN,TDNN总的输入是一段语音,每次TDNN取固定帧数,这个原理会在深度学习TDNN的介绍里详细说。然后pooling层把每个TDNN的输出向量积累下来后,计算均值和标准差作为pooling层的输出。pooling层之后接着两层全向连接层最后加一个softmax层为输出。输出的神经元个数和我们训练集中说话人个数保持一致。可以看到图中所写,输出是一个后验概率。这样设计的好处就是,我们可以处理时长不同的语音。

  训练用损失函数为交叉熵:

  其中 n代表要输入的语音(segment),k代表各个说话人, 是输入segment n后,由softmax层给出的它属于各个说话人的后验概率。只有当segment n 的标记(说话人)是k时才等于1,否则为0。观察公式,靠里的求和其实只有一项,靠外是对所有(或者是一个bash)内的语音的求和。

  众所周知,神经网络并不仅仅是一个分类器,而是一个特征提取器和分类器的结合,每一层都有极强的特征提取能力。所以我们要高度利用神经网络的这种能力,因此我们把softmax层之前的两层用来作为这段语音的embeddings(可以理解为特征向量)。

 阶段二:

去掉已经训练好的神经网络的softmax层,之前已经说过,我们仅仅需要它的特征抽象能力。利用剩余结构为我们导出每段语音的embeddings。之后就是利用这些embeddings训练PLDA模型。和经典的PLDA/ivector相比较,文章提出的方法区别仅仅在于对语音特征向量提取的方法,提取出特征向量后(无论是ivector还是xvector)其余步骤都是一样的。

 2.2 细节

特征处理:这篇文章里喂给神经网络的特征是20维MFCC特征,帧长是25ms,帧移没有提(一般是帧长的一般10ms左右)。在3s内特征还需要做一个归一化,我个人认为是为了减弱声音强度对特征能量的影响。

PLDA归一化:一是在进入PLDA模型打分前,需要对embeddings做length normalization(研究了下但是没看懂怎么弄,我的感觉是对原始向量的一种投影,减弱其非高斯表现);二是PLDA打分后得分的归一化,用的是adaptive s-norm,本质是一种test-norm,这里不再赘述。

3.  结果及结论

从图中能看出我们提取了两个embeddings,分别是a,b。所以我们主要讨论embeddings的使用对结果的影响,还有就是我们的训练是基于sre2010的,都是英文,单独还测试了这个模型对广东话和tagalog的效果。结果如下:

(fusion指的是对embeddings和ivector的PLDA打分的等加权融合;10s-10s:指的是注册语音10s,测试10s,其余列都是注册语音full length,测试的分别为5s-full的变化)

基于深度神经网络特征提取的文本无关的说话人识别_第2张图片基于深度神经网络特征提取的文本无关的说话人识别_第3张图片

 结论:1. 测试语音比较长时,ivector的优势比较明显;2测试语音在5-20s时,dnn效果较好;3. embedding的综合要比只用单个embedding好;4. dnn对out of domain 的效果优于ivector

你可能感兴趣的:(深度学习)