【audio paper】WESPEAKER: A RESEARCH AND PRODUCTION ORIENTED SPEAKER EMBEDDING LEARNING TOOLKIT

WESPEAKER: A RESEARCH AND PRODUCTION ORIENTED SPEAKER EMBEDDING LEARNING TOOLKIT

Abstract

说话人建模对于许多相关任务至关重要,例如说话人recognition和说话人diarization(说话人分离)。主要的建模方法是固定维向量表示,即说话人嵌入。本文介绍了一个面向研究和生产的说话人嵌入学习工具包:Wespeaker。
Wespeaker包含可扩展数据管理、最先进的说话人嵌入模型、损失函数和评分后端的实现,在几次说话人验证挑战中,获胜系统采用了结构化配方,从而获得了极具竞争力的结果。在相关配方中也展示了对其他下游任务(如说话人diarization)的应用。此外,CPU和GPU兼容的部署代码被集成用于面向生产的开发。

Introduction

深度说话人嵌入是许多相关任务的事实上的标准说话人身份表示。对于说话人识别,它们被反馈到评分后端,例如余弦相似性或概率线性判别分析(PLDA),用于以下接受决策。类似的应用可以在说话者diarization中找到,其中获得的分数用于进一步的聚类。除了专注于说话人建模的任务外,深度说话人嵌入还用于其他语音处理任务,如语音识别中的说话人自适应、文本到语音和语音转换中的说话人建模等。
智能语音处理社区的研究人员在开源领域一直相当活跃。早期的通用语音处理工具包,如HTK[5]和Kaldi,在Pytorch和Tensorflow等深度学习工具包之前,已经为许多研究人员和工业生产提供了设备,而最近蓬勃发展的基于Pytorch的SpeechBrain,Espnet,对新的研究人员来说更友好,并且能够实现快速原型设计。与上述通用语音处理工具包不同,Wenet专注于端到端语音识别,旨在弥合研究和部署之间的差距。
VoxSRC系列和CNSRC 2022等竞赛显著促进了相关数据集的发展,同时相应地激发了研究人员的创造力和工程能力,从而产生了新的SOTA结果。然而,研究论文中报告的结果与竞争制度描述之间通常存在明显差距。主要原因可能是前者通常忽略了技巧和专门的工程努力。另一个问题是,当前与扬声器相关的开源实现是以研究为重点的,没有对生产环境的潜在迁移提供支持。
为此,我们希望设计一个扬声器嵌入学习工具包,该工具包为学习高质量的嵌入提供干净、结构良好的代码,并具有良好的生产场景可移植性。继Wenet之后,我们提出了一个开源的Wespeaker,它专注于深度说话人嵌入学习,作为这个“we”系列的另一个项目。Wespeaker工具包的主要特征/优点如下:

  • 竞争结果:与其他开源实现相比,我们在所有配方中都取得了极具竞争力的性能,包括VoxCeleb、CNCeleb和VoxConverse。在相关比赛的获胜系统中使用的许多技巧在Wespeaker中重新实施,以提高系统的性能。我们希望Wespeaker能够为研究人员的算法创新提供一个有竞争力的起点。
  • light weight :Wespeaker专为深度扬声器嵌入学习而设计,代码简洁明了。它完全建立在PyTorch及其生态系统之上,不依赖Kaldi。
  • 统一IO(UIO):引入了一个类似于Wenet中使用的统一IO系统,提供了一个统一的接口,可以弹性地支持几小时到数百万小时的数据训练。
  • 动态特征准备:与传统的以离线方式进行话语分割、数据扩充和特征提取的特征准备过程不同,Wespeaker以动态方式执行上述所有步骤。支持不同的增强方法,包括信号级方法,如噪声破坏、混响、重采样、速度扰动和特征级SpecAug。
  • 分布式训练:Wespeaker支持分布式训练以加快速度,其中Pytorch中的“Distributed Data Parallel”用于多节点多GPU的可扩展性。
  • 生产就绪:Wespeaker中的所有型号都可以通过torch实时(JIT)或ONNX格式轻松导出,这可以在部署环境中轻松采用。 还提供了示例部署代码。

wespeaker

deep speaker embedding learning

对于标准的深度扬声器嵌入学习系统,输入是帧级特征(例如,Fbank),预期输出是片段级嵌入。这样的系统通常包括几个帧级层来处理输入特征,然后是一个池化层来将编码的帧级信息聚合成段级表示,然后是几个(通常是一个或两个)段级变换层,将这些表示映射到正确的说话者标签。此外,采用基于类别或基于度量的损失函数来提供扬声器判别监督信号。

overall structure

图1显示了Wespeaker的整体结构和管道。标准程序包括磁盘上的数据准备、在线特征准备和模型训练。获得聚合模型后,可以很容易地将其导出为运行时格式,并为进一步部署做好准备。然后,提取的说话者嵌入可以应用于下游任务,例如说话者验证和diarization。
在这里插入图片描述

data management

unified IO

生产规模的语料库通常包含数万小时的语音,这些语音由大量的小文件组成。为了避免可能出现的内存不足(OOM)和训练缓慢的问题,我们在Wespeaker中的数据管理中引入了Wenet1中的统一IO(UIO)机制。该机制的灵感来自Tensorflow和AIStore中使用的TFRecord格式,该格式通过GNU tar将每组小文件打包到一个更大的碎片中。如图2所示,对于大型数据集,将在训练阶段执行动态解压缩,以将碎片文件顺序读取到内存中。另一方面,对于小型数据集,Wespeaker支持传统的数据加载功能,直接从磁盘加载原始文件。
在这里插入图片描述

on-the-fly feature preparation

用于说话人嵌入学习的传统特征准备通常是离线完成的。典型的离线过程可以包括重新采样、数据扩充、数据切片和特征提取。

离线功能准备生成最终的训练示例并将其保存在磁盘上,在整个训练过程中磁盘将保持不变。Wespeaker加载原始波形数据,并以动态方式执行所有这些步骤,这有两个主要优点:

  • 1)无需保存增强的波形文件和处理的特征,这大大节省了磁盘成本。
  • 2) 在线增强使模型能够在不同时期看到不同的训练示例,这种不确定性和随机性提高了所得模型的鲁棒性。

图3展示了Wespeaker中在线功能准备的流程,其中包括以下模块:
在这里插入图片描述

  • 局部混洗:构建一个局部缓冲区,每次随机混洗,在不同时期为不同的训练批次做出贡献。
  • Spk2id:将说话者名称映射到说话者id中(从0到N-1,其中N是训练集的说话者总数)。
  • 重新采样:将训练数据重新采样到目标采样率。
  • 速度扰动:以一定概率改变训练数据的速度。
  • 随机分块:将训练数据随机分块到相同的长度。短的要加衬垫。
  • 噪声/混响:添加噪声或混响增强。
  • 计算Fbank:从原始PCM数据中提取Fbank特征。
  • CMVN:对每个话语应用倒谱均值和方差归一化。
  • SpecAug4:在功能上应用规范增强[17]。
  • 批量:将训练数据组织成固定大小的批量。

SOTA model implementation

Wespeaker目前支持以下模型,

  • 基于TDNN的x向量,这是引领下一个深度扬声器嵌入时代的里程碑式工作。
  • 基于ResNet的r-vector及其更深层次的版本,这是V oxSRC 2019[3]和CNSRC 2022[19]的获胜系统。
  • ECAPA-TDNN,TDNN的修改版本,这是VoxSRC 2020的获胜系统[4]。
    池函数将帧级特征聚合为分段级表示,其中Wespeaker支持基于统计和基于注意力的表示。损失函数是当前深度说话人嵌入学习的关键。我们支持标准softmax交叉熵损失和不同的基于裕度的变体[20,21],如A-softmax[22,23]、AM softmax[24]和AAM softmax[25]。

training strategies

LR and margin schedule

在Wespeaker实现中,学习率调度是两个函数协同工作的结果。这里,我们将学习率相对于时间的变化函数表示为lr(t),并且它可以由预热函数g(t)和指数下降函数h(t)的乘积来表示:lr(t)=g(t)*h(t)。g(t)和h(t)的具体表达式为:
在这里插入图片描述
其中t是当前训练迭代,Twarm是热身迭代,t是总迭代,η0是初始学习率,ηt是最终学习率。

损失裕度的调度器是一个三阶段函数m(t):
在这里插入图片描述其中0≤T1≤T2≤T,M是损失的最终裕度,f(T)是从0到M的线性增长函数或对数增长函数。

large margin fine-tuning

大幅度微调策略首次在中提出,并广泛用于说话人验证挑战系统,以进一步提高系统的性能。该策略是作为基于训练有素的说话者验证模型的额外微调阶段执行的。在这个阶段,与正常训练阶段相比,模型将以更大的裕度和更长的训练段进行训练。对于Wespeaker的实现,我们使用AAM损失,其裕度为0.5和6s训练段。

back-end support

对于在大幅度softmax损失的监督下占主导地位的深度扬声器嵌入,简单余弦相似性可以作为一个很好的得分后端。在大裕度嵌入时代之前,诸如概率线性判别分析(PLDA)之类的参数后端被更广泛地使用。Wespeaker实现了两种评分回溯,同时还提供了一个额外的分数归一化函数来校准说话者验证分数。

deployment

对于在Wespeaker中训练的模型,我们可以很容易地将其导出为**“tensorrt”或“onnx”格式**,这些格式可以部署在Triton推理服务器上。此外,由于Wespeaker被设计为一个通用的扬声器嵌入学习器,我们还提供了python绑定,并通过标准的“pip”封装进行部署,这允许用户简单地使用预先训练的模型来执行下游任务。

experiments and recipes

如上所述,深度说话人嵌入可以应用于不同的下游任务,而本文侧重于说话人验证和说话人diarization。

basic setups for speaker embedding learning

对于以下部分中所有说话者模型的训练设置,我们采用了shard-UIO方法,并在训练过程中应用了相同的在线数据扩充。MUSAN数据集中的音频用作附加噪声,而模拟房间脉冲响应(RIR)7用于混响。对于训练集中的每个话语,我们应用概率为0.6的加性噪声或混响增强(不是同时应用)。对于速度扰动,我们以0.9或1.1的比率随机改变说话速度,并且由于增强后的音高偏移,增强的音频将被视为来自新扬声器。此外,速度0.9、1.0和1.1的比率设置为1:1:1。声学特征是80维log Mel滤波器组(Fbank),具有10ms帧移和25ms帧窗。所有训练数据被分块为200帧,并且还应用CMN(没有CVN)。请注意,并非所有实验都使用SpecAug。

speaker verification

对于说话者验证任务,配方是基于VoxCeleb和CNCeleb数据集构建的,由于相关竞赛的推广,这些数据集非常受欢迎,被许多研究人员使用。

这里展示的所有结果都是在应用余弦评分和AS范数进行大幅度微调后获得的。

VoxCeleb dataset

VoxCeleb数据集由牛津大学发布,已成为最受欢迎的与文本无关的说话人识别数据集之一。

在对VoxSRC挑战进行细分之后,我们只使用VoxCeleb2 dev作为训练集,其中包含来自5994个扬声器的100多万个音频。
在这里插入图片描述
表1中的结果表明,与文献中的原始实现相比,我们的实现实现了非常有竞争力的数字。深入扩展ResNet可以进一步显著提高性能。

CNCeleb

对于CNCeleb配方,我们将CNCeleb2的1996个扬声器和CNCeleb1开发集的797个扬声器组合为训练集,并在CNCelebl测试集上进行评估。尽管CNCeleb数据集的收集过程与VoxCeleb的收集过程相似,但该数据集中的许多记录都短于2秒。因此,在数据准备中,我们首先将来自同一流派和同一说话者的短音频连接起来,构建超过5秒的音频。
在这里插入图片描述
使用不同主链获得的结果显示在表2中。与VoxCeleb评估协议不同,CNCeleb假设每个演讲者都参加了多个会话。提取并平均每个说话者的所有注册会话的嵌入,以获得最终的注册嵌入,这在我们的实验中带来了相当大的性能改进。

speaker diarization

V oxConverse数据集[33]是为VoxSRC 2020的diarization track发布的,这是一个从Youtube视频中收集的“野外”数据集。这个配方展示了如何利用预先训练的说话者模型进行说话者日记任务。预训练的ResNet34模型用于说话人嵌入提取,并且专门针对该任务实现了频谱聚类。如表3所示,我们在VoxConverse-dev数据集上使用oracle语音活动检测(SAD)注释或Silero VAD预训练模型的系统SAD结果获得了很好的结果,证明了Wespeaker中深度说话人嵌入学习的有效性。
在这里插入图片描述

conclusion and future work

在本文中,我们介绍了Wespeaker,一个面向研究和生产的说话人嵌入学习工具包。Wespeaker拥有轻量级的代码库,专注于高质量的说话人嵌入学习,在多个数据集上取得了极具竞争力的结果。尽管对研究人员来说很友好,但CPU和GPU兼容的部署代码也被集成在一起,以弥合研究和生产系统之间的差距。

在下一个版本中,我们将重点关注以下要点:1)用于说话人嵌入学习的自监督学习(SSL)。
2) 适用于资源有限情况的占地面积小的解决方案。3) 不断添加SOTA说话者模型(网络架构和评分后端)并优化训练策略。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值