BLSTM-RNN、Deep Voice、Tacotron…你都掌握了吗?一文总结语音合成必备经典模型(一)
机器之心专栏
本专栏由机器之心SOTA!模型资源站出品,每周日于机器之心公众号持续更新。
本专栏将逐一盘点自然语言处理、计算机视觉等领域下的常见任务,并对在这些任务上取得过 SOTA 的经典模型逐一详解。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。
本文将分 2 期进行连载,共介绍 19 个在语音合成任务上曾取得 SOTA 的经典模型。
第 1 期:BLSTM-RNN、WaveNet、SampleRNN、Char2Wav、Deep Voice、Parallel WaveNet、GAN、Tacotron、VoiceLoop
第 2 期:Tacotron2、GST、DeepVoice3、ClariNet、LPCNet、Transformer-TTS、Glow-TTS、Flow-TTS、cVAE+Flow+GAN、PnG BERT
您正在阅读的是其中的第 1 期。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。
本期收录模型速览
模型 | SOTA!模型资源站收录情况 | 模型来源论文 |
---|---|---|
BLSTM-RNN | https://sota.jiqizhixin.com/project/blstm-rnn | TTS Synthesis with Bidirectional LSTM based Recurrent Neural Networks |
WaveNet | https://sota.jiqizhixin.com/project/wavenet-2 收录实现数量:7 支持框架:PyTorch、TensorFlow等 | WaveNet: A Generative Model for Raw Audio |
SampleRNN | https://sota.jiqizhixin.com/project/samplernn 收录实现数量:2 支持框架:PyTorch、Torch | SampleRNN: An Unconditional End-to-End Neural Audio Generation Model |
Char2Wav | https://sota.jiqizhixin.com/project/char2wav | Char2Wav: End-to-end speech synthesis |
Deep Voice | https://sota.jiqizhixin.com/project/deep-voice 收录实现数量:1 支持框架:PyTorch | Deep Voice: Real-time Neural Text-to-Speech |
Parallel WaveNet | https://sota.jiqizhixin.com/project/parallel-wavenet 收录实现数量:2 支持框架:PyTorch、TensorFlow | Parallel WaveNet: Fast High-Fidelity Speech Synthesis |
GAN | https://sota.jiqizhixin.com/project/gan-voice 收录实现数量:1 支持框架:PyTorch | Statistical Parametric Speech Synthesis Using Generative Adversarial Networks Under A Multi-task Learning Framework |
Tacotron | https://sota.jiqizhixin.com/project/tacotron 收录实现数量:23 支持框架:PyTorch、TensorFlow | Tacotron: Towards End-to-End Speech Synthesis |
VoiceLoop | https://sota.jiqizhixin.com/project/voiceloop | VoiceLoop: Voice Fitting and Synthesis via a Phonological Loop |
传统的语音合成模型(也称为统计参数语音合成(Statistical Parametric Speech Synthesis)SPSS)包括三个处理步骤:前端处理——声学模型——声码器,其中,前端处理与声码器都有通用的一些方案,针对不同任务的改进点主要在声学模型部分。前端处理主要是指对文本进行分析,通常会对输入语音合成系统的文本进行预处理,比如转成音素序列,有时还会进行断句、韵律分析等,最终从文本中提取发声和韵律。声学模型主要是根据语言学特征生成声学特征。最后,声码器根据声学特征合成语音信号。建设这些模块需要大量的专业知识和复杂的工程实施,这将需要大量的时间和精力。另外,每个组成部分的错误组合可能会使模型难以训练。向传统的三阶段式语音合成模型中引入深度学习模型(DNN),可以学习从语言特征(输入)到声音特征(输出)的映射函数。基于DNN的声学模型为语言特征和声学特征之间的复杂依赖关系提供了有效的分布式表示。然而,基于前馈DNN的声学特征建模方法的一个局限性是,它忽略了语音的连续性。基于DNN的方法假定每一帧都是独立采样的,尽管语音数据中的连续帧之间存在着关联性。递归神经网络(RNN)提供了一种有效的方法来模拟语音相邻帧之间的相关性,因为它可以使用所有可用的输入特征来预测每一帧的输出特征。在此基础上,一些研究人员用RNN代替DNN来捕捉语音帧的长期依赖性,以提高合成语音的质量。
近年来,随着深度学习的兴起,模型精度有了突飞猛进的发展。其中,深度神经网络超强的特征学习能力大大简化了特征抽取的过程,降低了建模对于专家经验的依赖,建模流程逐步从之前复杂多步的流程转向了简单的端到端的建模流程,端到端的神经网络语音合成也成为产业化大规模应用的主流方法。端到端的模型可以看做是两个主要阶段:声学模型建模和神经声码器。其中,声学模型建模直接将输入的文本/音素序列转换为帧级语音特征,神经声码器将帧级语音特征转换为语音波形,神经声码器包括自回归模型和非自回归模型两类。端到端的方法在性能和部署推广遍历性方面都优于传统方法。
BLSTM-RNN
该模型采用带有双向长短期记忆(BLSTM)单元的递归神经网络(RNN)来捕捉语音语料中任何两个瞬间的相关或共同发生的信息,用于参数化TTS任务(Statistical Parametric TTS Synthesis system),属于深度学习模型在语音合成的前端处理中的应用。在时间尺度上,RNN可以通过取前一个或后一个潜在状态而展开成一个广泛的结构。像DNN一样,RNN也可以在多层中堆叠在一起,并在空间中具有深层结构。
图1.基于BLSTM-RNN的TTS合成
在基于BLSTM-RNN的TTS合成中,丰富的语境也被用作输入特征,其中包含分类语境的二进制特征,例如电话标签、当前单词的POS标签和TOBI标签,以及数字语境的数字特征,例如短语中的单词数或当前电话的当前帧的位置。输出特征是声学特征,如频谱包络和基本频率。输入特征和输出特征可以通过一个训练有素的HMM模型逐帧地进行时间调整。RNN也很强大,使其有可能对输入-输出排列不详的顺序数据进行建模。DNN的权重是通过使用从训练数据中提取的输入和输出特征对来训练的,以最小化给定输入的映射输出和目标输出之间的误差。
在RNN训练中,训练标准是使输出特征和ground-truth之间的均方误差最小。通过时间的反向传播(Back-propagation through time,BPTT)是训练RNN最经常使用的算法。BPTT首先通过时间将RNN展开为前馈网络,然后用反向传播法训练展开的网络。对于深层双向LSTM,BPTT算法同时应用于前向和后向潜在节点,并逐层反向传播。在DNN训练中,权重是通过反向传播程序和基于 "mini-batch "的随机梯度下降算法来训练的,该算法从整个训练集中随机选择mini-batch的帧。在RNN训练中,权重梯度是在整个语料中计算的。为了并行化和加速,每次更新都会随机选择几十个语料,然后用来同时更新RNN的权重。
在合成过程中,首先通过文本分析将输入文本转换成输入特征向量,然后通过训练好的BLSTM-RNN将输入特征向量映射到输出向量。在基于HMM的TTS中,相应的上下文标签被用来访问决策树,以获得上下文的HMM状态序列。将相应的HMM状态的平均值和协方差送入参数生成模块,以生成具有动态信息的平滑语音参数轨迹。在基于DNN的TTS中,通过将DNN的预测输出特征设定为所有训练数据中输出特征的均值向量和预先计算的(全局)方差,语音特征生成模块可以生成满足静态和动态特征统计的语音参数特征的平滑轨迹,而发声/非发声标志由DNN预测的经验阈值决定。考虑到RNN在模拟顺序问题方面的能力,参数生成模块隐含在基于DBLSTM-RNN的TTS合成中,也就是说,RNN的输出特征只是静态特征:频谱包络、增益、基频和U/V决策,然后直接输入声码器,合成最终的语音波形。
项目 | SOTA!平台项目详情页 |
---|---|
BLSTM-RNN | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/blstm-rnn |
WaveNet
WaveNet是一种原始音频波形的深度生成模型,属于深度学习模型在语音合成的前端处理中的应用,是在波形水平上运行的深度学习模型。WaveNet是一个完全概率自回归模型,每个音频样本的预测分布取决于之前的所有样本。WaveNet可以在每秒数万采样率的音频数据上高效地进行训练。WaveNet还需要对现有TTS前端的语言特征进行调节,因此不是端到端的方法,只是取代了声码器和声学模型。
WaveNet运用了因果卷积与扩大卷积:
因果卷积确保了模型输出不会违反数据的顺序,模型在某时刻输出的预测不会依赖任何一个未来时刻的数据。在训练阶段,每个时刻的输出需要计算的样本都是已知的,因此所有时刻的条件概率预测可以并行计算。由于使用因果卷积的模型中没有循环连接,通常训练起来比RNN更快,特别是对于很长句子的训练。因果卷积存在的一个问题是它需要很多层,或者很大的卷积核来增大其感受野。例如,在下图2中,感受野只有5个单位 (感受野 = 层数 + 卷积核长度 - 1)。因此WaveNet使用扩大卷积使感受野增大几个数量级,同时不会显著增加计算成本。
图2. 因果卷积层堆栈的可视化
扩大卷积是卷积核在比自身大的数据上进行卷积时跳步的卷积方法。与正常卷积相比,扩大卷积使网络可以执行粗粒度的卷积操作。如图3中,扩大卷积的扩大系数每层翻倍(1,2,4,8),只通过少数几层便拥有了非常大的感受野(16个单位)WaveNet中最大的扩大系数达到了512,拥有1024个单位的感受野。
图3. 扩张的因果卷积层堆栈的可视化
Softmax分布:
原始音频通常保存为16Bit规格 ,对每个时刻输出的可能值 ,softmax层将需要输出65536个值。为了更方便快捷地计算,需要先对数据实施一个µ-law压扩变换,然后取到256个量化值。µ-law压扩变换算法如下:
门控激活单元:
WaveNet使用的门控激活单元如下:
其中∗代表卷积操作,⊙代表点乘操作,σ(.)是sigmoid函数,k是层索引,f和g是各自的滤波器和门,W是可学习的卷积核。
残差连接和跳步连接:
WaveNet使用了残差和跳步连接,以加速收敛并允许更深的模型训练。该结构示意图如下:
图4. 残差块和整个架构的概述
条件WaveNet:
给定一个额外输入h,WaveNet可以由这个给定输入
基于输入变量进行条件建模,可以引导WaveNet产生要求特征的音频。例如,可以把说话人身份作为条件输入给WaveNet,然后WaveNet将选择该说话人的声音进行音频输出。
上下文堆栈:
上文中提出了多种方法来增加WaveNet的感受野大小:增加扩大系数的大小,使用更多的层数,更大的过滤器,更大的膨胀系数,或者他们的组合。补充的一个方法是:使用单独的更小的上下文堆栈来处理语音信号的长跨度信息,并在局部条件下形成处理较大的WaveNet,该WaveNet只处理音频信号的一小部分(在结尾处裁剪)。
可以使用具有不同长度和数量潜在单元的多个上下文堆栈。感受野越大的堆栈每层的单位就越少。上下文堆栈也可以有以较低频率运行的池层。这将计算需求保持在一个合理的水平上,并与在较长时间尺度上建模时间相关性所需的容量较少的直觉相一致。
当前 SOTA!平台收录WaveNet 共 7 个模型实现资源。
项目 | SOTA!平台项目详情页 |
---|---|
WaveNet | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/wavenet-2 |
SampleRNN
SampleRNN将无记忆模块,即自回归多层感知器和有状态的递归神经网络结合在一个层次结构中,能够在三个不同性质的数据集上捕获时间序列变化的潜在来源,属于深度学习模型在语音合成的前端处理中的应用。由于SampleRNN有不同的模块在不同的clock-rates下运行(这与WaveNet相反),可以灵活地分配不同抽象层次建模的计算资源量。
SampleRNN是一个音频波形的密度模型。SampleRNN对波形样本序列X={x1, x2, . . , xT }(输入数据序列的随机变量)的概率(输入数据序列上的随机变量)作为每个样本的概率与所有先前样本的条件的乘积:
RNNs通常用于对顺序数据进行建模,可以表述为:
其中,H是已知的记忆单元之一,可以是门控递归单元(GRU)、长短时记忆单元(LSTM)或其深度变化。然而,原始音频信号的建模具有挑战性,因为它们包含非常不同尺度的结构:相邻的样本之间以及相隔数千个样本之间都存在相关性。
SampleRNN通过使用一个层次结构的模块来帮助解决这一挑战,每个模块都以不同的时间分辨率进行操作。最低的模块处理单个样本,每个较高的模块在越来越长的时间尺度和较低的时间分辨率上运行。每个模块都对它下面的模块进行调节,最低的模块输出样本级的预测结果。整个层次结构是通过反向传播进行端到端的联合训练。
图5. K=3层的时间步骤i的unrolled模型的快照。为简化起见,所有层级只使用一个RNN和上采样率r=4
SampleRNN中的高层模块不是对单个样本进行操作,而是对层次结构中第k级的F_S(k)("帧大小")样本的非重叠帧进行一次操作(帧用f(k)表示)。每个帧级模块都是一个深度RNN,它将其输入的历史总结成一个调节向量,供下一个模块向下运行。对截至时间点t-1的可变帧数的条件是由一个固定长度的潜在状态或存储器(h_t)^(k)表示的,其中,t与该层的clock-rate有关。RNN在时间点t进行内存更新,作为前一个内存(h_t-1)^(k)和一个输入(inp_t)^(k)的函数。对于最高层的k = K,这个输入是简单的输入框。对于中间层(1 < k < K),这个输入是上一层的调节向量和当前输入帧的线性组合。由于不同的模块在不同temporal resolutions需要将一个模块输出的每个向量c向上取样为一系列r^(k)向量(其中r^(k)是模块temporal resolution之间的比率),然后再向下送入下一个模块的输入。用一组r^(k)独立的线性投影来完成。
SampleRNN层次结构中的最低模块(k=1层)输出一个关于样本x_i+1的分布,条件是前面的FS^(1)样本以及来自下一个更高模块的向量(c_i)^(k=2),该向量编码了该帧之前的序列信息。由于F_S(1)通常是一个很小的值,而且附近样本的相关性很容易通过一个简单的无记忆模块来建模,所以用多层感知器(MLP)而不是RNN来实现,这稍微加快了训练的速度。假设e_i代表通过嵌入层后的x_i,条件分布可以通过以下方式实现,为了进一步明确,下面显示了两个连续的样本级框架:
最后,使用截断的反向传播方法,将每个序列分割成短的子序列,并将梯度只传播到每个子序列的开头,从而使递归模型得到有效的训练。
当前 SOTA!平台收录SampleRNN共 2 个模型实现资源。
项目 | SOTA!平台项目详情页 |
---|---|
SampleRNN | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/samplernn |
Char2Wav
Char2Wav包含两个部分:reader和vocoder。reader由encoder和decoder两部分组成,encoder是双向RNN网络,可以接受文本/音素作为输入,decoder是带attention的RNN网络,生成vocoder对应的声学特征。Char2Wav的突出贡献是可以用直接从text中学会产生wav。Char2Wav是一个端到端模型,可以对角色进行训练,使用的是SampleRNN神经声码器之前预测声码器参数。Char2Wav结构如图6所示。
图6. Char2Wav端到端的语音合成模型
Reader:
基于注意力的递归序列发生器(attention-based recurrent sequence generator,ARSG)是一个递归神经网络,它以输入序列X为条件生成序列Y=(y1,...,yT),X由一个编码器预处理,输出序列h=(h1,...,hL)。在这项工作中,输出Y是一个声学特征序列,X是要生成的文本或音素序列。此外,编码器是一个双向的递归网络。在第i步,ARSG专注于h,同时生成yi :
其中,s_i-1是生成器递归神经网络的第(i - 1)个状态,α_i∈R^L是注意力权重或排列方式。使用基于位置的注意力机制,α_i = Attend(s_i-1, α_i-1),给定一个长度为L的条件序列h,我们有:
其中 κi , βi 和ρi分别代表窗口的位置、宽度以及窗口的重要性。
NEURAL VOCODER:
语音合成的质量会受到vocoder的限制,为了确保高质量的输出,引入SampleRNN。SmapleRNN用于建模extremely长时依赖性,其中的垂直结构用于捕捉序列不同时刻的动态。捕捉长的audio step(词级别)和短的audio step之间的长相关很重要。使用conditional version model学习vocoder 特征序列和对应audio sample之间的映射,每一个时刻的输出取决于它的vocoder特征和过去时刻的输出。
项目 | SOTA!平台项目详情页 |
---|---|
Char2Wav | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/char2wav |
深度语音(Deep Voice)系统是一个完全由深度神经网络构建的高质量text-to-speech系统。该系统包含 5 个重要基础:定位音素边界的分割模型、字母到音素(grapheme-to-phoneme) 的转换模型、音素时长预测模型、基础频率预测模型、音频合成模型。聚焦于分割任务,提出了一种使用深度神经网络完成音素边界检测的新方法,使用 CTC(connectionist temporal classification)损失函数。聚焦于音频合成任务,引入了一个 WaveNet 的变体,它比原始的 WaveNet 需要的参数更少、训练速度更快。在每个组件上使用神经网络,从而实现比传统的TTS系统更简单、更灵活(传统的组件需要人工调配以及大量的专业知识)。
图7. Deep Voice结构,(a)训练程序,(b)推理程序,左边是输入,右边是输出。持续时间预测模型和F0预测模型是由一个用联合损失训练的单一神经网络实现的。字母到音素的模型被用来作为不存在于音素字典中的单词的后备手段。虚线表示非学习的成分
Deep Voice是使用DNN开发的语音合成系统,主要是使用神经网络代替传统参数语音合成中的各个模块,具体包括以下五个模块:
(1)grapheme-to-phoneme转换模型:将输入本文转为phoneme序列;
(2)segmentation模型:定位音素边界;
(3)phoneme duration模型:预测phoneme持续时长;
(4)fundamental frequency模型:预测基频F0,音素是否发声;其中,phoneme duration模型和fundamental frequency模型一起训练;
(5)audio synthesis模型:综合(1)/(3)/(4)的输出进行音频合成。
Grapheme-to-Phoneme Model:
字母到音素模型是基于编码器-解码器的结构。使用一个具有门控递归单元(GRU)非线性的多层双向编码器和一个单向GRU解码器。每个解码层的初始状态都被初始化为相应编码器前向层的最终潜在状态。该架构是用teacher强迫法训练的,解码是用波束搜索法进行的。在编码器中使用了3个双向层,每个层有1024个单元,在解码器中使用了3个相同大小的单向层,并使用了宽度为5的波束搜索。在训练过程中,在每个递归层之后使用概率为0.95的Dropout。
Segmentation Model:
训练分割模型来实现给定语料和目标音素序列之间的对齐。这项任务类似于语音识别中的语音与书面输出的对齐问题。在该领域,CTC损失函数已被证明非常适用于字符对齐任务,以学习声音和文本之间的映射关系。用CTC训练的网络生成音素序列,能够为每个输出音素生成短暂的峰值。直接训练的结果能使音素与音频大致一致,但却无法检测出精确的音素边界。为了克服这个问题,训练预测音素对的序列,而不是单个音素。然后,网络在接近音素对中两个音素的边界的时间段内输出音素对。
Phoneme Duration and Fundamental Frequency Model:
使用一个单一的架构来联合预测音素持续时间和随时间变化的基本频率。该模型的输入是一个带有重音的音素序列,每个音素和重音都被编码为一个独热向量。该结构包括两个全连接层,每个单元256个GRU;然后是两个单向递归层,每个单元128个GRU,最后是一个全连接的输出层。在最初的全连接层和最后的递归层之后,分别引入概率为0.8的DropOut。最后一层为每个输入音素产生三个估计值:音素持续时间、音素发声的概率(即有一个基本频率)和20个随时间变化的F0值,这些值在预测的持续时间上被均匀采样。
Audio Synthesis Model:
音频合成模型是WaveNet的一个变体。WaveNet由一个调节网络和一个自回归网络组成,前者在语言特征上采样到所需的频率,后者在离散的音频样本Y上生成一个概率分布P(y)。改变层数l,剩余通道的数量r(每层潜在状态的维度),以及跳过通道的数量s(在输出层之前,层输出被投射到的维度)。
WaveNet由一个上采样和调节网络组成,然后是l个2×1的卷积层,有r个Residual输出通道和门控tanh非线性。将卷积分解为每个时间段的两个矩阵乘以W_prev和W_cur。这些层与残差连接相连。每一层的潜在状态都被串联成一个l_r向量,并用W_skip投射到s个跳过通道,然后是两层1×1的卷积(权重为W_relu和W_out),具有relu非线性。具体结构如图8所示。
图8. 修改后的WaveNet架构。各部分根据功能进行着色:茶色的输入,绿色的卷积和QRNNs,黄色的单项运算和softmax,粉色的二项运算,以及靛蓝色的重塑、转置和切片
模型 | SOTA!平台模型详情页 |
---|---|
Deep Voice | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/deep-voice |
Parallel WaveNet
Parallel WaveNet 是一种新的方法:概率密度蒸馏。这种方法可以在生成的语音质量没有显著差异的情况下,通过一个训练好的 WaveNet 去训练一个平行前馈网络。结果证明, Parallel WaveNet 能以比实时快20倍的速度产生高保真语音样本,这比原来的 WaveNet 要快1000倍。现已能在生产环境中提供多种英语和日语的声音。概括来说,Parallel WaveNet 对基本的wavenet模型做了两项优化,以提高音频质量:一是,使用16bit音频,采样模型替换为离散化混合逻辑斯蒂分布;二是,将16khz的采样率提升到24khz,所采用的具体方法包括提升层数、增加扩张系数等。
图9. 概率密度蒸馏法概述。一个预先训练好的WaveNet教师被用来对学生输出的样本x进行评分。学生被训练成最小化其分布和教师分布之间的KL-散度,方法是在教师下最大化其样本的对数可能性,并同时最大化其自身的熵
直接以极大似然训练并行 WaveNet 模型是不切实际的,因为估计对数似然所需的推理过程是连续的,而且很慢。因此,引入一种新的神经网络蒸馏形式,使用一个已经训练好的 WaveNet 作为“教师”,让“学生” Parallel WaveNet可以有效地学习。为了强调“处理标准化的密度模型”,将这一过程称为概率密度蒸馏(与概率密度估计相反)。其基本思想是让学生尝试在教师学到的分布下匹配自己的样本的概率。
给定在音频数据集上训练的并行 WaveNet student pS(x) 和 WaveNet teacher pT(x),定义概率密度蒸馏损失如下:
D_KL为KL-散度,H(P_S, P_T)为学生P_S与教师P_T之间的交叉熵,H(P_S)为学生分布的熵。当KL散度为零时,学生分布完全恢复了教师分布。熵项(在以前的蒸馏目标中并不存在)至关重要,因为它防止了学生分布坍塌为教师模式。更重要的是,所有估计这个损失的导数所需的操作(从pS(x)采样,评估pT(x)和评估H(pS))都可以有效地执行。
熵项H(P_S)写作:
第一个等式中,x = g(z), z_t 为 logistic 分布得出的独立样本。第二个等式中,因为逻辑分布 L(u, s) 的熵是 lns+2 因此,我们可以计算这一项而不必显式地生成x。然而,交叉熵项H(P_S, P_T)明确依赖于x = g(z),因此需要从学生取样来估计:
对于从学生 pS 中抽取的每个样本 x ,可以与教师并行计算所有的 pT(xt|x<t) ,然后通过在每个时间步长中从 pS(xt|z<t) 中抽取多个不同的样本 x_t ,计算 H(p_S(xt|z<t) , p_T(xt|x<t))。这个无偏估计量的方差比单纯地用第一个等式评估样本的方差要小得多。将教师的输出分布 pT(x_t|x<t) 参数转换,这使得损失项 lnpT(x_t|x<t) 对于 x_t 和 x<t 都是可微分的。另一方面,分类分布只能是可微分的 w.r.t. x<t 。
此外,单独使用概率密度蒸馏训练可能不足以约束学生生成高质量的音频流。因此,引入额外的损失函数来引导学生分布向期望的输出空间。包括:功率损失:
以及,对比蒸馏损失:
当前 SOTA!平台收录 Parallel WaveNet 共2个模型实现资源。
项目 | SOTA!平台项目详情页 |
---|---|
Parallel WaveNet | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/parallel-wavenet |
GAN
这篇文章提出了一种结合生成式对抗网络的基于静态参数的语音合成方法,具体由两个神经网络组成:区分自然样本和生成样本的鉴别器,以及欺骗鉴别器的发生器。在所提出的框架中,训练鉴别器以区分自然和生成的语音参数,同时训练声学模型以最小化传统的最小生成损失和用于欺骗鉴别器的对抗性损失的加权和。GAN的目的是最小化自然语音参数和生成的语音参数之间的KL-divergence,所提出的方法有效地减轻了对所生成的语音参数的过度平滑效应。这篇文章在验证GAN模型有效性的实验中,同时考虑了TTS和VC(Voice Conversion)两种任务,TTS是基于文本的语音合成,而VC则是从另一个语音来合成具有原始语言信息的语音的技术(在保留原始语音的语言信息的同时)。
图10. 基于GAN的多任务学习框架的系统示意图
GAN是一个生成模型,可以通过对抗过程学习随机噪声输入向量z和输出参数y之间的复杂关系。GAN的估计由两个模型组成:一个是生成模型G,它从随机噪声z中捕捉数据分布;另一个是鉴别模型D,它能最大限度地正确判别真实例子和从G中生成的虚假样本的概率。在这个对抗过程中,生成器倾向于学习一个映射函数G(z),以从均匀随机的噪声分布p_z(z)中拟合真实数据分布p_data(x),而鉴别器的目的是完美地判断样本是来自G(z)还是p_data(x)。因此,G和D都是在具有价值函数的two-player min-max game中同时训练的:
在上述生成模型中,由于指导性不强,生成样本的模式无法控制,由此引入了条件生成对抗网络(CGAN),通过考虑额外的信息y来指导生成。损失函数可以表示为:
在传统的SPSS声学模型中,我们通常在估计过程中最小化预测参数X_model和自然语音X_real之间的MSE。这个目标可以写成
数字上的差异(以MSE计)只涉及到估计,而数字上的错误减少不一定会导致合成语音的感知改善。为了解决这个问题,引入GANs,通过鉴别过程来学习合成语音和自然语音之间的本质区别。GAN能够生成数据而不是估计密度函数。为了解决GAN中生成模型的模型崩溃问题,进一步提出了以下生成器损失函数,以指导GAN收敛到最佳解决方案,从而使生成模型产生预期的数据:
最终目标函数为:
将语言特征视为额外的向量y,并使输入噪声z服从于[-1,1]区间的均匀分布。然后,我们的框架可以通过G(z|y)生成语音X_model,并且在训练期间同时估计loss_mse和loss_cgan。
图11. 带有音素信息的鉴别器
在多任务框架中,也尝试使用音素信息来指导鉴别过程,如图11所示。假设标签是一个代表音素类别的独热编码向量,它是D的虚假和真实样本的类别。那么我们的目标是最小化真实的交叉熵(CE),最大化虚假的损失,而后者意味着我们不知道虚假的音素属于哪个音素。因此,在loss_multi中GANs的目标函数可以被更新为
考虑到音素分类,我们得到新的损失函数如下:
当前 SOTA!平台收录 GAN 共 1 个模型实现资源。
项目 | SOTA!平台项目详情页 |
---|---|
GAN | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/gan-voice |
Tacotron
Tacotron是一个end-to-end TTS模型,直接从text到speech,它由encoder、attention-based decoder、a post-processing net组成。类似的端到端方法还有WaveNet、DeepVoice、Char2Wav等等。Tacotron的结构如下:
图12. 模型架构。该模型将字符作为输入并输出相应的原始频谱图,然后将其送入Griffin-Lim重建算法以合成语音
CBHG MODULE:
CBHG由一组一维卷积滤波器组成,然后是highway networks和双向门控递归单元(GRU)递归神经网(RNN)。CBHG是一个从序列中提取表征的强大模块。输入序列首先与K组一维卷积滤波器进行卷积,其中,第k组包含宽度为k的Ck滤波器(即k=1,2,...,K)。这些滤波器明确地对局部和上下文信息进行建模(类似于对单字、大字,直至K字的建模)。卷积输出堆叠在一起,并沿着时间进一步最大限度地汇集,以增加局部不变性。具体可以使用1的跨度来保留原始的时间分辨率。进一步将处理后的序列传递给几个固定宽度的一维卷积,其输出通过残差连接与原始输入序列相加。将批量归一化处理应用于所有卷积层。将卷积输出送入一个多层highway network,以提取高级特征。最后,在上面堆叠一个双向的GRU RNN,从前向和后向的背景中提取顺序特征。
ENCODER:
编码器的目标是提取文本的顺序表示。编码器的输入是一个字符序列,其中,将每个字符表示为一个独热向量并嵌入到一个连续向量中。然后,对每个嵌入物应用一组非线性变换,统称为 "pre-net"。在这项工作中,使用了一个带有Dropout的瓶颈层作为pre-net,这有助于收敛并提高泛化能力。一个CBHG模块将pre-net的输出转化为注意力模块使用的最终编码器表示。
DECODER:
使用基于内容的tanh Attention解码器,即加性模型,在每个时间步长上都产生一次Attention query,将context vector和Attention RNN输出拼接作为decoder RNNs的输入,decoder RNNs使用带有纵向残差连接的GRUs堆栈,通过一个简单的全连接层,生成带宽为80-band mel-scale spectrogram的输出,再使用一个后处理网络将seq2seq的梅尔频谱转换为波形。
POST-PROCESSING NET AND WAVEFORM SYNTHESIS:
后处理网络(post-processing net)的任务是将seq2seq目标转换为可被合成为波形的目标。由于使用Griffin-Lim作为合成器,后处理网络能够学习预测在线性频率尺度上采样的频谱幅度。此外,后处理网络可以得到完整的解码序列。与总是从左到右运行的seq2seq相比,它可以利用前向和后向的信息来纠正每一个单独帧的预测错误。在这项工作中,使用CBHG模块作为后处理网络。后处理网络的概念是高度通用的。它可以用来预测替代目标,如声码器参数,或者作为一个类似于WaveNet的神经声码器直接合成波形样本。最后,使用Griffin-Lim算法用于波形合成。
当前 SOTA!平台收录 Tacotron 共 23 个模型实现资源。
项目 | SOTA!平台项目详情页 |
---|---|
Tacotron | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/tacotron |
VoiceLoop
VoiceLoop是一种neural text-to-speech (TTS)技术,该技术可以从wild采样的语音中将文本转换为语音。
图13. VoiceLoop架构概述。读者利用注意力权重将句子的音素编码结合起来,创建当前的语境。一个新的表征是由一个浅层网络创建的,该网络接收上下文、说话人ID、先前的输出和缓冲区。将新的表征插入缓冲区,丢弃缓冲区中最早的矢量。输出由另一个浅层网络获得,该网络接收缓冲区和扬声器作为输入。一旦训练完成,通过冻结网络来拟合一个新的声音,除了说话人的嵌入
VoiceLoop通过实现一个 shifting buffer as a matrix来构造phonological store。句子表示为音素列表。然后从每个音素中解码出一个short向量。当前上下文向量是通过对音素的编码进行加权并在每个时间点对其求和来生成的。该网络的前向通道有四个步骤,按顺序运行。在对输入序列进行无语境编码和对说话者进行编码之后,缓冲器在所有剩余的步骤中发挥了主要作用,并在每个步骤的其他组成部分之间建立联系。它还将错误信号从输出端引入到前面的步骤中。
步骤一:对说话人和输入句子进行编码:
每个说话人都用一个向量z来表征。在训练过程中,训练中的说话人的向量被存储在一个查找表LUT_s中,该表将一个运行中的ID号码映射到一个维度为d_s的表征中。对于新的说话人,即在网络训练后被拟合的扬声器,向量z是通过简单的优化过程计算出来的。通过使用CMU的发音字典,将输入的句子转换成一连串的音素s1, s2, ..., sl。该词典中的音素数量为40个,其中增加了两个项目以表示不同长度的停顿。然后,每个si被分别映射到一个基于训练好的查找表LUTp的编码中。这就生成了一个大小为dp×l的编码矩阵E,其中,dp是编码的大小,l是序列长度。
步骤二:计算上下文:
采用基于Graves GMM的单调注意力机制。在每个输出时间点t 注意力网络N_a接收前一个时间步骤S_t-1的缓冲区作为输入,并输出GMM先验值γt、移位κt和对数变异βt。对于一个有c个分量的GMM来说,每个分量都是一个向量,有一个潜在层,维度为dk/10,潜在层的激活函数为ReLU。
步骤三:更新缓冲区:
在每个时间步长中,在第一个位置St[1]的缓冲区中加入一个新的维度为d的表示向量u,丢弃前一个时间步长St-1[k]中缓冲区的最后一列,其余的则复制生成:St[i + 1] = St-1[i]。
步骤四:生成输出:
输出是用一个与Na和Nu结构相同的网络No和一个学习矩阵Fo对用户的投影生成的:
内存位置的意义:
使用内存缓冲区代替传统的RNN,在所有进程之间共享内存以及对所有计算使用shallow,全连接的网络。为了更好地理解缓冲区的行为,考虑每个缓冲区位置的相对作用。具体来说,对从输入(缓冲器元素)到潜在层的权重的绝对值进行平均。平均值在所有d个特征和dk/10个潜在单元中进行,并为每个位置提供一个值。
当前 SOTA!平台收录 VoiceLoop 共 1 个模型实现资源。
模型 | SOTA!平台模型详情页 |
---|---|
VoiceLoop | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/voiceloop |
前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及API等资源。
网页端访问:在浏览器地址栏输入新版站点地址 sota.jiqizhixin.com ,即可前往「SOTA!模型」平台,查看关注的模型是否有新资源收录。
移动端访问:在微信移动端中搜索服务号名称「机器之心SOTA模型」或 ID 「sotaai」,关注 SOTA!模型服务号,即可通过服务号底部菜单栏使用平台功能,更有最新AI技术、开发资源及社区动态定期推送。
微信扫码关注该文公众号作者