GENERALIZED END-TO-END LOSS FOR SPEAKER VERIFICATION

Baileys2022年8月10日
大约 18 分钟...

论文名称

GENERALIZED END-TO-END LOSS FOR SPEAKER VERIFICATIONopen in new window
会议:ICASSP 2018

Abstract

在本文中,我们提出了一个新的损失函数,称为广义端到端(GE2E)损失,它使说话人验证模型的训练比我们以前的基于元组的端到端(TE2E)损失函数更有效率。与TE2E不同的是,GE2E损失函数更新网络的方式是强调在训练过程的每一步中难以验证的例子。此外,GE2E损失不需要一个初始阶段的例子选择。有了这些特性,我们带有新损失函数的模型将说话人验证的EER降低了10%以上,同时将训练时间降低了60%。我们还引入了MultiReader技术,它允许我们做领域适应--训练一个更准确的模型,支持多个关键词(即 "OK Google "和 "Hey Google")以及多种方言。

关键字: Speaker verification, end-to-end loss, MultiReader, keyword detection

Introduction

Background

说话人验证(Speaker verification)是根据一个说话人的已知话语(即注册话语)来验证该话语是否属于一个特定的说话人的过程,其应用包括语音匹配等。

根据用于注册和验证的语料的限制,说话人验证模型通常分为两类之一:文本依赖的说话人验证(TD-SV)和文本独立的说话人验证(TI-SV)。在TD-SV中,注册和验证语料的记录是受语音约束的,而在TI-SV中,注册或验证语料的记录没有词汇约束,暴露了较大的音素和语料持续时间的变化。在这项工作中,我们专注于TI-SV和TD-SV的一个特殊子任务,即全局密码TD-SV,其中验证是基于检测到的关键词,例如 "OK Google"。

在以前的研究中,基于i-vector的系统一直是TD-SV和TI-SV应用的主导方法。近年来,更多的工作集中在使用神经网络进行说话人验证,而最成功的系统使用端到端训练。在这样的系统中,神经网络的输出向量通常被称为嵌入向量(也被称为d-vectors)。与i-vectors的情况类似,这种嵌入可以用来在一个固定维度的空间中表示语料,在这个空间中,通常可以使用比较简单的方法可以用来区分说话者。

Tuple-Based End-to-End Loss

在我们之前的工作中,我们提出了基于元组的端到端(TE2E)模型,它模拟了训练过程中的运行时注册和验证的两阶段过程。在我们的实验中,TE2E模型与LSTM相结合,在当时取得了最佳性能。对于每个训练步骤,一个评估语料xj\textbf{x}_{j\sim}MM个注册语料xkm\textbf{x}_{km}m=1,...,Mm=1,..., M)的元组被送入我们的LSTM网络。{xj,(xk1,..,xkM)}\{\textbf{x}_{j\sim},(\textbf{x}_{k1},. . , \textbf{x}_{kM})\},其中x\textbf{x}代表一个固定长度段的特征(Mel滤波器对数 log-mel-filterbank energies),jjkk代表语料的说话人,jj可能等于也可能不等于kk。该元组包括来自说话人jj的一个话语和来自说话人kkMM个不同的话语。如果xjx_{j\sim}MM个注册的语料来自同一个说话人,即j=kj=k,我们称一个元组为正例,否则为负例。我们交替地生成正例和负例的元组。

对于每个输入元组,我们计算LSTM的L2归一化响应:{ej,(ek1,...,ekM)}\{\textbf{e}_{j\sim},(\textbf{e}_{k1},..., \textbf{e}_{kM})\}。这里每个e\textbf{e}是一个固定维度的嵌入向量,由LSTM定义的序列-向量映射产生。元组(ek1,...,ekM)(\textbf{e}_{k1},...,\textbf{e}_{kM})的中心点代表从M个语料中建立的声纹,其定义如下。

ck=Em[ekm]=1Mm=1Mekm\begin{equation} \begin{aligned} \textbf{c}_{k}=\mathbb{E}_{m}[\textbf{e}_{km}]=\frac{1}{M}\sum\limits_{m=1}^{M}\textbf{e}_{km} \end{aligned} \end{equation}

相似性是用可学习的wwbb的余弦相似性函数来定义的。

s=wcos(ej,ck)+b\begin{equation} \begin{aligned} s=w{\cdot}{\cos}(\textbf{e}_{j\sim},\textbf{c}_{k})+b \end{aligned} \end{equation}

TE2E的损失最终定义如下。

LT(ej,ck)=δ(j,k)(1σ(s))+(1δ(j,k))σ(s)\begin{equation} \begin{aligned} L_{T}(\textbf{e}_{j\sim},\textbf{c}_k)=\delta(j,k)(1-\sigma(s))+(1-\delta(j,k))\sigma(s) \end{aligned} \end{equation}

这里σ(x)=11+ex\sigma(x)=\frac{1}{1+e^{-x}}是标准的sigmoid函数,δ(j,k)\delta(j,k)j=kj = k时等于11,否则等于00。TE2E损失函数鼓励在k=jk = j时采用较大的ss值,而在kjk{\neq}j时采用较小的ss值。 考虑对正例和负例元组的更新--这个损失函数与FaceNet中的三联体损失非常相似。

Overview

在本文中,我们介绍了我们的TE2E结构的概括。这个新的结构以一种更有效的方式从不同长度的输入序列中构建元组,从而使TD-SV和TI-SV的性能和训练速度得到显著提升。本文的组织结构如下。在第2.1节中,我们给出了GE2E损失的定义;第2.2节是GE2E更有效地更新模型参数的理论依据;第2.3节介绍了一种叫做 "MultiReader "的技术,它使我们能够训练一个支持多个关键词和语言的单一模型;最后,我们在第3节中介绍了我们的实验结果。

GENERALIZED END-TO-END MODEL

广义端到端(GE2E)训练的基础是一次性处理大量的语料,其形式是包含N个说话人的批次,每个说话人平均有M个语料,如图1所描述。

System overview

Training Method

我们获取N×MN{\times}M的语料来建立一个批次。这些语料来自NN个不同的说话人,每个说话人有MM个语料。每个特征向量xji\textbf{x}_{ji}1jN,1iM1{\leq}j{\leq}N,1{\leq}i{\leq}M)代表从说话人j语料i中提取的特征。

与我们以前的工作类似,我们将从每个语料xji\textbf{x}_{ji}中提取的特征送入一个LSTM网络。一个线性层被连接到最后一个LSTM层,作为网络最后响应的额外转换。我们把整个神经网络的输出表示为f(xji;w)f(\textbf{x}_{ji}; \textbf{w}),其中w\textbf{w}代表神经网络的所有参数(包括LSTM层和线性层)。嵌入向量(d-vector)被定义为网络输出的L2归一化。

eji=f(xji;w)f(xji;w)2\begin{equation} \begin{aligned} \textbf{e}_{ji}=\frac{f({\textbf{x}_{ji};\textbf{w}})}{||f(\textbf{x}_{ji};\textbf{w})||_2} \end{aligned} \end{equation}

这里eji\textbf{e}_{ji}代表第jj个说话人的第ii个语料的嵌入向量。第jj个说话人的嵌入向量[ej1,...,ejM][\textbf{e}_{j1},..., \textbf{e}_{jM}]的中心点通过公式1定义为cj\textbf{c}_j

相似性矩阵Sji,k\textbf{S}_{ji,k}被定义为每个嵌入向量eji\textbf{e}_{ji}与所有中心点ck\textbf{c}_k(1j,kN,1iM1{\leq}j,k{\leq}N,1{\leq}i{\leq}M)之间的缩放余弦相似度。其中wwbb是可学习的参数。我们将权重限制为正数w>0w>0,因为我们希望余弦相似度较大时,相似度也较大。

Sji,k=wcos(eji,ck)+b\begin{equation} \begin{aligned} \textbf{S}_{ji,k}=w{\cdot}{\cos}(\textbf{e}_{ji},\textbf{c}_k)+b \end{aligned} \end{equation}

提示

TE2E和GE2E的主要区别如下:

  • TE2E的相似度(公式2)是一个标量值,定义了嵌入矢量ej\textbf{e}_{j\sim}和单个元组中心点ck\textbf{c}_k之间的相似性。
  • GE2E建立了一个相似度矩阵(公式5),定义了每个eji\textbf{e}_{ji}和所有中心点ck\textbf{c}_k之间的相似度。

图1用不同颜色表示的特征、嵌入向量和来自不同说话人的相似性分数来说明整个过程。

System overview

在训练过程中,我们希望每个语料的嵌入与该说话人的所有嵌入的中心点相似,同时又远离其他说话人的中心点。如图1中的相似度矩阵所示,我们希望彩色区域的相似度值大,而灰色区域的值小。图2以不同的方式说明了同样的概念:我们希望蓝色的嵌入向量接近自己说话人的中心点(蓝色三角形),而远离其他中心点(红色和紫色三角形),尤其是最接近的那个(红色三角形)。给定一个嵌入向量eji\textbf{e}_{ji},所有的中心点ck\textbf{c}_k,以及相应的相似性矩阵Sji,k\textbf{S}_{ji,k},有两种方法来实现这个概念。

  • Softmax 我们在Sji,k\textbf{S}ji,k(k=1,...,Nk=1,...,N)上设置一个softmax,如果k=jk=j,就使输出等于11,否则就使输出等于00。因此,每个嵌入向量eji\textbf{e}_{ji}的损失可以定义为:

L(eji)=Sji,j+logk=1Nexp(Sji,k)\begin{equation} \begin{aligned} L(\textbf{e}_{ji})=-\textbf{S}_{ji,j}+{\log}\sum\limits_{k=1}^{N}\exp(\textbf{S}_{ji,k}) \end{aligned} \end{equation}

这个损失函数意味着我们将每个嵌入向量推到其中心点附近,并将其拉离所有其他中心点。

  • Contrast 对比损失在正例对和大部分积极的负例对上定义为:

L(eji)=1σ(Sji,j)+max1kN,kjσ(Sji,k)\begin{equation} \begin{aligned} L(\textbf{e}_{ji})=1-\sigma(\textbf{S}_{ji,j})+\max\limits_{1{\leq}k{\leq}N,k{\neq}j}\sigma(\textbf{S}_{ji,k}) \end{aligned} \end{equation}

其中σ(x)=11+ex\sigma(x)=\frac{1}{1+e^{-x}}是标准的sigmoid函数。对于每个语料,恰好有两个成分被添加到损失中:

  1. 一个正例的成分,它与嵌入向量和其真实说话人的声纹(中心点)之间的积极匹配有关。
  2. 一个困难的负例成分,它与嵌入向量和所有假说话人中相似度最高的声纹(中心点)之间的负面匹配有关。

在图2中,正项对应于将eji\textbf{e}_{ji}(蓝圈)推向cj\textbf{c}_{j}(蓝三角)。负项对应于将eji\textbf{e}_{ji}(蓝圈)从ck\textbf{c}_{k}(红三角)拉开,因为与ck\textbf{c}_{k'}相比,ck\textbf{c}_keji\textbf{e}_{ji}更相似。因此,对比损失使我们能够关注嵌入向量和负中心点的困难对。

在我们的实验中,我们发现GE2E损失的两种实现方式都很有用:对比度损失对TD-SV来说表现得更好,而softmax损失对TI-SV来说表现得略好。

此外,我们观察到,在计算真实说话人的中心点时,去除eji\textbf{e}_{ji}可以使训练稳定,并有助于避免琐碎的解决方案。因此,虽然我们在计算负相似度(即kjk{\neq}j)时仍然使用方程1,但当k=jk=j时,我们改用方程8。

cj(i)=1M1m=1,miMejm\begin{equation} \begin{aligned} \textbf{c}_{j}^{(-i)}=\frac{1}{M-1}\sum\limits_{m=1,m{\neq}i}^{M}\textbf{e}_{jm} \end{aligned} \end{equation}

Sji,k={wcos(eji,cj(i))+bif k=j;wcos(eji,ck)+botherwise;\begin{equation} \begin{aligned} \textbf{S}_{ji,k}=\left\{ \begin{array}{rcl} w{\cdot}\cos(\textbf{e}_{ji},\textbf{c}_{j}^{(-i)})+b & & if\ k=j;\\ w{\cdot}\cos(\textbf{e}_{ji},\textbf{c}_{k})+b & & otherwise;\\ \end{array} \right. \end{aligned} \end{equation}

结合公式4、6、7和9,最终的GE2E损失LG是相似度矩阵上所有损失的总和(1jN,1iM1{\leq}j{\leq}N,1{\leq}i{\leq}M)。

LG(x,w)=LG(S)=j,iL(eji)\begin{equation} \begin{aligned} L_{G}(\textbf{x},\textbf{w})=L_G(\textbf{S})=\sum\limits_{j,i}L(\textbf{e}_{ji}) \end{aligned} \end{equation}

Comparison between TE2E and GE2E

考虑GE2E损失更新中的一个批次:我们有NN个说话人,每个说话人有MM个语料。每个单步更新将把所有N×MN{\times}M的嵌入向量推向它们自己的中心点,并把它们拉离其他中心点。

这反映了TE2E损失函数中所有可能的元组对每个xji\textbf{x}_{ji}所发生的情况。假设我们在比较说话人时随机选择说话人jjPP个语料。

  • 正元组(positive tuples): {xji,(xj,i1,...,xj,ip)}\{\textbf{x}_{ji},(\textbf{x}_{j,i_1},...,\textbf{x}_{j,i_p})\},其中1ipM1{\leq}i_{p}{\leq}M,且p=1,...,Pp=1,...,P。一共有(MP)\begin{pmatrix} M \\ P \end{pmatrix}个正元组。
  • 负元组(negative tuples): {xji,(xk,i1,...,xk,ip)}\{\textbf{x}_{ji},(\textbf{x}_{k,i_1},...,\textbf{x}_{k,i_p})\},其中kjk{\neq}j1ipM1{\leq}i_{p}{\leq}M,且p=1,...,Pp=1,...,P。对于每个xji\textbf{x}_{ji},我们必须与所有其他N1N-1个中心点进行比较,N1N-1组对比中,每一组都包含(MP)\begin{pmatrix} M \\ P \end{pmatrix}个元组。

每个正元组与一个负元组相平衡,因此总数量是正负元组的最大数量乘以2。因此,TE2E损失中的元组总数为:

2×max((MP),(N1)(MP))2(N1)\begin{equation} \begin{aligned} 2{\times}\max\begin{pmatrix} \begin{pmatrix} M \\ P \end{pmatrix},(N-1)\begin{pmatrix} M \\ P \end{pmatrix} \end{pmatrix}{\geq}2(N-1) \end{aligned} \end{equation}

等式11的下限发生在P=MP=M时。因此,在我们的GE2E损失中,xji\textbf{x}_{ji}的每次更新与我们的TE2E损失中的至少2(N1)2(N-1)步相同。上述分析显示了为什么GE2E比TE2E更有效地更新模型,这与我们的经验观察一致。GE2E在更短的时间内收敛到更好的模型(详见第3节)。

Training with MultiReade

考虑以下情况:我们关心的是模型在一个有小数据集D1D_1的领域中的应用。同时,我们有一个更大的数据集D2D_2,在一个类似但不相同的领域。我们想在D2D_2的帮助下,训练一个在数据集D1上表现良好的单一模型。

L(D1,D2;w)=ExD1[L(x;w)]+αExD2[L(w;w)]\begin{equation} \begin{aligned} L(D_1,D_2;\textbf{w})=\mathbb{E}_{x{\in}D_1}[L(\textbf{x};\textbf{w})]+\alpha\mathbb{E}_{x{\in}D_2}[L(\textbf{w};\textbf{w})] \end{aligned} \end{equation}

这与正则化技术类似:在正常正则化中,我们使用αw22\alpha||\textbf{w}||_2^2来正则化模型,但在这里,我们使用ExD2[L(x;w)]\mathbb{E}_{x{\in}D_2}[L(\textbf{x};\textbf{w})]进行正则化。当数据集D1D_1没有足够的数据时,在D1D_1上训练网络会导致过拟合。要求网络在D2D_2上也有合理的表现,有助于使网络正规化。

这可以被概括为结合KK个不同的,可能是极不平衡的数据源。D1,...,DKD_1,...,D_K。我们给每个数据源分配一个权重αk\alpha_k,表示该数据源的重要性。在训练过程中,每一步我们从每个数据源中获取一批/一串语料,并计算出综合损失:L(D1,...,DK)=k=1KαkExkDk[L(xk;w)]L(D_1,...,D_K)=\sum_{k=1}^K\alpha_k\mathbb{E}_{\textbf{x}_k{\in}D_k}[L(\textbf{x}_k;\textbf{w})],其中每个L(xk;w)L(\textbf{x}_k;\textbf{w})是公式10中定义的损失。

EXPERIMENTS

在我们的实验中,特征提取过程与[6]相同。音频信号首先被转换为宽度为25ms、步长为10ms的帧。然后,我们提取40维的Mel滤波器对数作为每一帧的特征。对于TD-SV的应用,同样的特征被用于关键词检测和说话人验证。关键词检测系统将只把包含关键词的帧传递给说话者验证系统。这些帧形成一个固定长度(通常为800ms)的片段。对于TI-SV应用,我们通常在语音活动检测(VAD)之后提取随机的固定长度段,并使用滑动窗口方法进行推理(在第3.2节中讨论)。

我们的生产系统使用33层的LSTM和投影。嵌入向量(d-vector)的大小与LSTM的投影大小相同。对于TD-SV,我们使用128128个隐藏节点,投影大小为6464。对于TI-SV,我们使用768768个隐藏节点,投影大小为256256。在训练GE2E模型时,每个批次包含N=64N=64个发言人,每个发言人有M=10M=10个语料。我们用SGD训练网络,使用初始学习率0.010.01,每30M30M步减少一半。梯度的L2-norm被剪切为33,LSTM中投影节点的梯度比例被设置为0.50.5。关于损失函数中的比例因子(w,b)(w,b),我们也观察到一个好的初始值是(w,b)=(10,5)(w,b)=(10,-5),对它们较小的梯度比例0.010.01有助于平滑收敛。

Text-Dependent Speaker Verificatio

虽然现有的语音助手通常只支持一个关键词,但研究表明,用户更喜欢同时支持多个关键词。对于Google Home上的多用户,同时支持两个关键词,"OK Google "和 "Hey Google"。

在多个关键词上启用说话人验证,介于TD-SV和TI-SV之间,因为注册语音既没有被约束到一个短语,也没有完全不受约束。我们使用MultiReader技术(第2.3节)解决这个问题。与更简单的方法相比,MultiReader有一个很大的优势,例如直接将多个数据源混合在一起。它可以处理不同数据源大小不平衡的情况。在我们的案例中,我们有两个数据源用于训练:

  • 一个来自匿名用户查询的 "OK Google "训练集,有150M150M的语料和630K630K的说话者;
  • 一个混合的 "OK/Hey Google "训练集,是人工收集的,有120M120M的语料和18K18K的说话者。第一个数据集比第二个数据集在语料数量上大125125倍,在说话者数量上大3535倍。

tab 1

为了评估,我们报告了四种情况下的等效错误率(EER):用任一关键词注册,并对任一关键词进行验证。所有的评估数据集都是从665665个说话人那里手工收集的,每个说话人平均有4.54\text{.}5个注册语料和1010个评估语料。结果显示在表1中。我们可以看到,MultiReader在所有四种情况下都带来了大约30%30\%的相对改进。

tab 2

我们还在一个更大的数据集中进行了更全面的评估,该数据集收集自83K83K个不同的说话人和环境条件,来自匿名的日志和人工收集。我们对每个说话人平均使用7.37\text{.}3个注册语料和5个评估语料。表2总结了使用和不使用MultiReader设置训练的不同损失函数的平均EER。基线模型是一个具有512512个节点的单层LSTM,嵌入向量大小为128128。第二行和第三行的模型结构是33层LSTM。比较第二行和第三行,我们看到GE2E比TE2E好10%10\%左右。与表1类似,这里我们也看到,该模型在MultiReader下的表现明显更好。虽然表中没有显示,但值得注意的是,GE2E模型的训练时间比TE2E少了大约60%60\%

Text-Independent Speaker Verification

对于TI-SV训练,我们将训练语料分成更小的片段,我们称之为部分语料。虽然我们不要求所有部分语料的长度相同,但同一批次的所有部分语料必须具有相同的长度。因此,对于每一批数据,我们在[lb,ub]=[140,180][lb, ub]=[140, 180]帧内随机选择一个时间长度tt,并强制要求该批数据中的所有部分语料的长度为tt(如图3所示)。

Batch construction process for training TI-SV model

在推理过程中,对于每个语料,我们应用一个固定大小的滑动窗口(lb+ub)/2=160(lb+ub)/2=160帧,有50%50\%的重叠。我们为每个窗口计算d-vector。最终的语料向量是通过对窗口向量的d-vector进行L2归一化,然后取元素向量的平均值产生的(如图4所示)。

Batch construction process for training TI-SV model

我们的TI-SV模型是在来自18K18K发言人的约36003600万个语料上训练的,这些语料是从匿名的日志中提取的。为了评估,我们使用了额外的10001000个说话者,每个说话者平均有6.36\text{.}3个注册语料和7.27\text{.}2个评估语料。表3显示了不同训练损失函数之间的性能比较。第一列是预测训练数据中所有说话人标签的softmax。第二列是用TE2E损失训练的模型。第三列是用GE2E损失训练的模型。如表中所示,GE2E的表现比softmax和TE2E都好。EER的性能改进大于10%10\%。此外,我们还观察到,GE2E的训练速度比其他损失函数快33倍左右。

Batch construction process for training TI-SV model

CONCLUSIONS

在本文中,我们提出了广义的端到端(GE2E)损失函数,以更有效地训练说话者验证模型。理论和实验结果都验证了这种新型损失函数的优势。我们还引入了MultiReader技术来结合不同的数据源,使我们的模型能够支持多种关键词和多种语言。通过结合这两种技术,我们产生了更准确的说话人验证模型。

评论
Powered by Waline v2.6.1