最近看了几篇文章,都是关于注意力机制在声纹识别中的应用。然后我主要是把其中两篇文章整合了一下,这两篇文章发表在interspeech 2018/19上。两个团队分别是港科和约翰霍普金斯大学(Daniel povey);以及东京工业大学
写这篇文章的目的是想基于这两篇工作讲一讲attention在语音中的应用,让大家对attention了解更深入一些。关于attention,在CV领域的注意力机制比较直观,容易理解。在语音及其声纹领域还是费解、抽象一些。可以看看台大李宏毅老师的transformer:https://www.youtube.com/watch?v=ugWDIIOHtPA
Okay,let’s get started!
这篇paper提出了对于深度说话人嵌入(deep speaker embedding)的注意力统计池。在传统的说话人嵌入中,帧级特征(frame-level features)是在单个话语的所有帧上平均以形成话语水平特征(utterance-level feature)。文章的方法是使用注意力机制给不同的帧不同的权重,并且同时生成加权平均数、加权标准差。在这种方式下,它可以有效地捕获到更长期的说话人特征变化。最终在NIST SRE 2012评测和VoxCeleb数据集上的表现证明了模型的对于speaker recognition有效性。
这一部分列了一些说话人识别的发展历史、背景的介绍
1. 说话人识别结合i-vector发展的非常快,i-vector主要是把说话人表征在固定低维度的特征向量。
2. 深度学习用于speech中的特征提取。但是这和GMM-UBM模型对比的差别还是依赖于大量的语音数据。才能提出比较鲁棒、好的特征,但是语音的数据标注很麻烦、非常贵。
3. 近年来,DNNs可以独立于i-vector框架,单独提取说话人识别特征向量。特别是在短时间的话语条件下,这种方法取得更好的效果。
4. 文本无关说话人认证中,加入了一个平均池化层使得输入不定长语音的帧级特征可以被整合为语句级别特征
5. 注意力机制从一开始用于NLP,目前也在逐渐被应用到这个领域。
6. 提出了一种新的池化方式,叫做注意力统计池化能够输出权重标准差、帧级特征的权重平均值,规避了上面3说到的DNN提特征方法往往对于短时语音效果的缺点,即也可以应用于长时语音
上图中首先是我们的音频会分成很多帧,由帧级特征提取器提出不同的帧,帧级特征进入池化层,池化层的作用就是把这些帧级特征平均,得到言语级的特征。再根据言语级的特征辨识出说话人的特征。
由此得到加权后的平均值和标准差
下面采用了5种embedding的方法,测试NIST SRE2012 通用场景2;NIST SRE2012 说话时长;VoxCeleb共三种情况。比较神奇的是i-vector经常作为一种baseline方案,居然有如此低的EER,文中给出的解释是NIST 2012数据集中的数据语音本身就比较长,我的理解是因为i-vector和gmm-ubm都属于概率统计模型,概率统计还是当数据量足够大的时候,统计参数越准确,效果越好。
我们已经提出了注意力统计池化方式来提取deep speaker embedding,池化层计算的是经过注意力机制作用的加权特征平均值、加权特征标准差。 这使得说话人其纳入能够focus重要的帧。不仅如此,长时间的偏差能够被说话人统计在标准差中。比如结合了注意力机制和标准差提供了协同效应。
这篇文章提出了一种文本无关场景说话人场景用DNN提取特征。通常,说话人嵌入是分类DNN平均了说话人帧上的隐藏向量;所有帧产生的隐藏向量被认为是同等重要的。我们反驳了这一假设,将说话人嵌入作为帧级隐藏向量的加权平均值进行计算。其权重是由自相关机制自动确定的。多个注意头对说话人输入语音不同方面的影响,最后,用PLDA分类器比较嵌入对。在NIST SRE 2016上,将提出的自相关说话人嵌入系统和强大的DNN嵌入baseline进行比较。我们发现,self-attentive的embedding具有卓越的性能,其改进对于长时、短时的语音都有不错的效果。
作者把自己的方案和两个x-vector的baseline方案进行了对比。
其中图一这个网络结构:L1~ L5使用了时延神经网络,tdnn可以很大程度上保留上下文信息,起到取代rnn的作用,而且tdnn是卷积网络,可以并行计算,rnn不行,tdnn比rnn快,kaldi里面也是强推tdnn,具体L1~ L5的操作如下图所示:xv每次卷积计算的时候第一层只取输入的5帧,第二层取第一层的3帧,但是这三帧是隔一帧取一帧,第三层取第二层的三帧,隔两帧取一帧。
然后统计池化层聚合了所有帧级输出向量,计算他们的平均值和标准差。池化的作用使DNN可以从变化长度的语音中产生定长的表征向量。平均和标准偏差合并在一起,然后向前传送到L6和L7,最后输出到softmax层。
比如一段说话时长为T的语音,其输出向量为H = {h1, h2, ..., hT},ht是输入帧xt的隐藏表征(通过了L1 ~ L5的TDNN时延神经网络的隐含表示)。我们认为ht的维度是dh。那么,整个H语音隐含向量是dhT。自注意力机制将整个隐含表达H向量作为input,并且输出矩阵A:
P和L2范式非常接近,所以它是想让这个A的权重平方越来越小。
对于baseline的i-vector方案来说(最后一行)广东话的错误率8.3%,DCF16最小检测代价指标0.549;对于菲律宾语迁移能力差一些,pool是指将两者测试集混合起来。
可以认为x-vector baseline system就是训练了一个专门的DNN模型,能够把输入的语音转化为输出的speaker embedding向量,把这个向量称为x-vector,然后经过PLDA模型是用来进行比较这些speaker embedding,最终转化为结果的。
【转载自https://blog.csdn.net/qq_33811075/article/details/85101874】 DCF 是 NIST SRE 中定义且常用的一种性能评定方法。其定义为:
其中 CFR和 CFA 分别代表错误拒绝和错误接受的惩罚代价, Ptarget 和 1 − Ptarget 分别为真实说话测试和冒认测试的先验概率。可以根据不同的应用环境来设定它们的值。 比如在军事门禁系统中,我们希望严格控制出入人员,即希望错误接受的概率比较小,那么可以增大 CFA 的值;在监控犯罪人员的语音时,我们希望不漏掉可能的目标语音,则可以增大CFR 的值。当 CFR、CFA 、Ptarget 和 1 − Ptarget取定后,EFR 与 EFA 的某一组取值使得 DCF 最小,此时的 DCF 成为 minDCF 。在日常使用 DCF 时,通常以 NIST SRE 2008 设定的CFR = 10,CFA = 1, Ptarget = 0.01 为准。minDCF 不仅考虑了两类错误的不同代价,还考虑了两种测试情况的先验概率,比 EER 更合理。
下图代表的是只做平均处理的系统,当SRE16数据集中的粤语+菲律宾语混合做为测试集时。两者会融合起来,DET曲线的横纵轴将FAR和FER转为对数度量,这时候曲线越靠近原点,说明系统的EER错误识别率越小,性能越好。
下图代表的是使用平均化且拼接标准差的系统,当SRE16数据集中的粤语+菲律宾语混合做为测试集时。两者会融合起来,DET曲线的横纵轴将FAR和FER转为对数度量,这时候曲线越靠近原点,说明系统的EER错误识别率越小,性能越好。
除了在模型上的评估。文章还对语音的长度影响做了评判:得到了3个意料之内的结果:
我们提出了一种提取说话人embedding的方法,对于文本无关的说话人验证,通过把self-attention机制加入到DNN embedding中。这种新的speaker embedding方法成功地在SRE 16上面进行评测,这个数据集的难点在于训练数据是说英语的,但是测试数据是用广东话或者菲律宾语的。结果当然是这个文中提出的方法好于基于传统i-vector和DNN embedding的方案啦。通过增加attention heads数,效果更好了。
future works: 我们打算通过调整训练策略,比如使用更大的数据集。另外,调研不同的多头注意力惩罚机制。
Reference
1、https://arxiv.org/abs/1803.10963
2、http://www.danielpovey.com/files/2018_interspeech_xvector_attention.pdf
作者:知乎—Boerziman
地址:https://www.zhihu.com/people/dockdockdock