【声纹识别】attention在声纹识别中的应用


最近看了几篇文章,都是关于注意力机制在声纹识别中的应用。然后我主要是把其中两篇文章整合了一下,这两篇文章发表在interspeech 2018/19上。两个团队分别是港科和约翰霍普金斯大学(Daniel povey);以及东京工业大学

写这篇文章的目的是想基于这两篇工作讲一讲attention在语音中的应用,让大家对attention了解更深入一些。关于attention,在CV领域的注意力机制比较直观,容易理解。在语音及其声纹领域还是费解、抽象一些。可以看看台大李宏毅老师的transformer:YouTube讲解链接

Okay,let’s get started!

Paper1:Attentive Statistics Pooling for Deep Speaker Embedding

Abstract

这篇paper提出了对于深度说话人嵌入(deep speaker embedding)的注意力统计池。在传统的说话人嵌入中,帧级特征(frame-level features)是在单个话语的所有帧上平均以形成话语水平特征(utterance-level feature)。文章的方法是使用注意力机制给不同的帧不同的权重,并且同时生成加权平均数、加权标准差。在这种方式下,它可以有效地捕获到更长期的说话人特征变化。最终在NIST SRE 2012评测和VoxCeleb数据集上的表现证明了模型的对于speaker recognition有效性。

Introduction

这一部分列了一些说话人识别的发展历史、背景的介绍

  1. 说话人识别结合i-vector发展的非常快,i-vector主要是把说话人表征在固定低维度的特征向量。
  2. 深度学习用于speech中的特征提取。但是这和GMM-UBM模型对比的差别还是依赖于大量的语音数据。才能提出比较鲁棒、好的特征,但是语音的数据标注很麻烦、非常贵。
  3. 近年来,DNNs可以独立于i-vector框架,单独提取说话人识别特征向量。特别是在短时间的话语条件下,这种方法取得更好的效果。
  4. 文本无关说话人认证中,加入了一个平均池化层使得输入不定长语音的帧级特征可以被整合为语句级别特征
  5. 注意力机制从一开始用于NLP,目前也在逐渐被应用到这个领域。
  6. 提出了一种新的池化方式,叫做注意力统计池化能够输出权重标准差、帧级特征的权重平均值,规避了上面3说到的DNN提特征方法往往对于短时语音效果的缺点,即也可以应用于长时语音。

在这里插入图片描述
上图中首先是我们的音频会分成很多帧,由帧级特征提取器提出不同的帧,帧级特征进入池化层,池化层的作用就是把这些帧级特征平均,得到言语级的特征。再根据言语级的特征辨识出说话人的特征。

那么,是如何进行统计池化的呢?首先统计帧级特征的平均值如(1)式所示;计算基于帧级特征ht的标准差。
在这里插入图片描述
注意力模型在原始的DNN,并且为帧级特征计算了大量分数 e t e^t et,其中 v T v^T vT文中没有直接说明, f ( W h t + b ) + k f(Wh_t+b)+k f(Wht+b)+k 是一个激活函数。就像 t a n h tanh tanh 或者 R e L U ReLU ReLU 等函数。
在这里插入图片描述
接下来这个 e t e^t et 通过softmax激活函数后,可以得到 a t a_t at
在这里插入图片描述
经过 a t , h t a_t, h_t at,ht 的激活函数结果是平均值 u u u
在这里插入图片描述
由此得到加权后的平均值和标准差
在这里插入图片描述
在这里插入图片描述

Evaluation

下面采用了5种embedding的方法,测试NIST SRE2012 通用场景2; NIST SRE2012 说话时长; VoxCeleb共三种情况。
比较神奇的是i-vector经常作为一种baseline方案,居然有如此低的EER,文中给出的解释是NIST 2012数据集中的数据语音本身就比较长,我的理解是因为i-vector和gmm-ubm都属于概率统计模型,概率统计还是当数据量足够大的时候,统计参数越准确,效果越好。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Conclusion

我们已经提出了注意力统计池化方式来提取deep speaker embedding,池化层计算的是经过注意力机制作用的加权特征平均值、加权特征标准差。 这使得说话人其纳入能够focus重要的帧。不仅如此,长时间的偏差能够被说话人统计在标准差中。比如结合了注意力机制和标准差提供了协同效应。

Paper2:Self-Attentive Speaker Embeddings for Text-Independent Speaker Verification

Abstract

这篇文章提出了一种文本无关场景说话人场景用DNN提取特征。通常,说话人嵌入是分类DNN平均了说话人帧上的隐藏向量;所有帧产生的隐藏向量被认为是同等重要的。我们反驳了这一假设,将说话人嵌入作为帧级隐藏向量的加权平均值进行计算。其权重是由自相关机制自动确定的。多个注意头对说话人输入语音不同方面的影响,最后,用PLDA分类器比较嵌入对。在NIST SRE 2016上,将提出的自相关说话人嵌入系统和强大的DNN嵌入baseline进行比较。我们发现,self-attentive的embedding具有卓越的性能,其改进对于长时、短时的语音都有不错的效果。

Introduction

  1. 说话人识别(声纹识别)的目的是从几句人说的话来确认一个人的身份。有两种系统:一种是文本相关、一种文本无关。
  2. 近些年对于文本无关的声纹识别方案主要是:结合i-vectors和使用PLDA(概率线性判别分析)
  3. 另外,将训练好的DNN用于ASR或者其他方案。不仅如此,这个方案的成功率已经主要地独立于英语数据集
  4. ICASSP 2016【End-to-end text-dependent speaker verification】 提出了一种端到端系统,用于文本相关的说话人识别任务,联合的训练来匹配说话人嵌入的帧级特征,并且学习一些相似度比较尺度来匹配embedding pairs。
  5. Interspeech 2017【Deep neural network embeddings for text-independent speaker verification】 将端到端系统分为两个部分:a. 产生说话人嵌入的DNN; b. 比较嵌入对的单独训练的PLDA分类器。与端到端方法相比,该方法需要的有效数据更少,并且有利于重用多年来开发的用于处理和比较i-vector的方法的附加好处。
  6. 大多数基于DNN的声纹识别系统使用池化机制来匹配可变长度的语音->定长的embeddings。在一个前馈架构里,这通常被池化层使能,并且能够在全语音输入部分平均一些帧级DNN的特征。早期的系统中,如d-vector,DNN是在帧级别上训练的,并且通过对输入话语的所有帧上的最后一个隐藏层
  7. 这篇文章提出了一种x-vector的架构。为了更好地在输入语音中使用说话人信息,我们提出用结构化的自注意力机制帧级权重,用自注意机制和加权的统计池化层。不同于STL 2016 【End-to-end attention based text-dependent speaker verification】, 这篇文章的工作是文本无关并且是训练、测试数据不同的。因此语音信息可能没有帮助甚至无法使用。
  8. 然而在最先进的工作中,这些池化机制分配同等权重和帧级特征。张等人提出了一种注意力模型来对于文本相关的说话人识别应用,结合帧级特征。

Speaker verification system

作者把自己的方案和两个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语音隐含向量是dh*T。自注意力机制将整个隐含表达H向量作为input,并且输出矩阵A:
在这里插入图片描述
H维度 d h ∗ T d_h*T dhT;W1维度 d h ∗ d a d_h*d_a dhda;W2维度 d a ∗ d r d_a*d_r dadr,另外 d r d_r dr 是一个超参数,表达注意力机制的多头个数。g(·)是ReLU,softmax是column-wise (按照列分类的)。所以最后得,softmax( T ∗ d r T*d_r Tdr 维) => d r d_r dr维的行向量结果。
在这里插入图片描述
因为由(1)知道,A是自注意后得到的权重矩阵,每一个A矩阵的列向量是符号向量,表示了不同 h t h_t ht 的权重。当注意力头数是1时,就是一个简单从H中计算得来的加权平均向量。

很明显的是,不同说话人特征不同的原因有多个方面,特别是当语音片段很长的时候。通过增加 d r d_r dr,我们能够轻松的获得多注意力头来学习一个说话人语音的不同方面。为了增加向量的多样性,因此每个注意力透能够从相同的语音片段中获得不同的信息。一个惩罚函数表示如下:
在这里插入图片描述
P和L2范式非常接近,所以它是想让这个A的权重平方越来越小。

Experiment

在这里插入图片描述
对于baseline的i-vector方案来说(最后一行)广东话的错误率8.3%,DCF16最小检测代价指标0.549;对于菲律宾语迁移能力差一些,pool是指将两者测试集混合起来。

补充知识

什么是x-vector的baseline系统?The x-vector baseline system

可以认为x-vector baseline system就是训练了一个专门的DNN模型,能够把输入的语音转化为输出的speaker embedding向量,把这个向量称为x-vector,然后经过PLDA模型是用来进行比较这些speaker embedding,最终转化为结果的。

最小检测代价(Minimum Detection Cost Function, minDCF):

【转载自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 更合理。

Evaluation

下图代表的是只做平均处理的系统,当SRE16数据集中的粤语+菲律宾语混合做为测试集时。两者会融合起来,DET曲线的横纵轴将FAR和FER转为对数度量,这时候曲线越靠近原点,说明系统的EER错误识别率越小,性能越好。
在这里插入图片描述
下图代表的是使用平均化且拼接标准差的系统,当SRE16数据集中的粤语+菲律宾语混合做为测试集时。两者会融合起来,DET曲线的横纵轴将FAR和FER转为对数度量,这时候曲线越靠近原点,说明系统的EER错误识别率越小,性能越好。
在这里插入图片描述
除了在模型上的评估。文章还对语音的长度影响做了评判:得到了3个意料之内的结果:

  • 自注意机制嵌入能够带来性能提高,不论是什么语音长度。
  • 持续时间长的语音识别效果更好,因为说的话越多,speaker的信息就越充分。
  • 自注意机制如果有比较多的注意头会性能更优秀。
    在这里插入图片描述

Conclusion

我们提出了一种提取说话人embedding的方法,对于文本无关的说话人验证,通过把self-attention机制加入到DNN embedding中。这种新的speaker embedding方法成功地在SRE 16上面进行评测,这个数据集的难点在于训练数据是说英语的,但是测试数据是用广东话或者菲律宾语的 。结果当然是这个文中提出的方法好于基于传统i-vector和DNN embedding的方案啦… 通过增加attention heads数,效果更好了。

future works: 我们打算通过调整训练策略,比如使用更大的数据集。另外,调研不同的多头注意力惩罚机制。

Reference

[1]: Attentive Statistics Pooling for Deep Speaker Embedding
[2]: Self-Attentive Speaker Embeddings for Text-Independent Speaker Verification

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值