Tacotron2 论文 + 代码详解

Tacotron2是Google Brain提出的神经网络语音合成框架,包括声谱预测网络、注意力网络和声码器。声谱预测网络通过编码器(含卷积和双向LSTM)和解码器(含注意力机制)预测梅尔频谱,而注意力网络使用位置敏感的混合注意力机制。解码器中,预处理层和后处理网络分别提高预测质量和频谱重构。与Tacotron相比,Tacotron2的结构更为简洁,未使用缩小因子。
摘要由CSDN通过智能技术生成

1. 概述

Tacotron2是由Google Brain 2017年提出来的一个语音合成框架。
Tacotron2:一个完整神经网络语音合成方法。模型主要由三部分组成:

  1. 声谱预测网络:一个引入注意力机制(attention)的基于循环的Seq2seq的特征预测网络,用于从输入的字符序列预测梅尔频谱的帧序列。
  2. 声码器(vocoder):一个WaveNet的修订版,用预测的梅尔频谱帧序列来生成时域波形样本。
  3. 中间连接层:使用低层次的声学表征-梅尔频率声谱图来衔接系统的两个部分。
    tacotron2 模型架构

2.声谱预测网络:

声谱预测网络主要包含一个编码器和一个包含注意力机制的解码器。编码器把字符序列转换成一个隐层表征,解码器接受这个隐层表征用以预测声谱图。在这里插入图片描述

编码器:

编码器模块包含一个字符嵌入层(Character Embedding),一个3层卷积,一个双向LSTM层。

  1. 输入字符被编码成512维的字符向量;
  2. 然后穿过一个三层卷积,每层卷积包含512个5x1的卷积核,即每个卷积核横跨5个字符,卷积层会对输入的字符序列进行大跨度上下文建模(类似于N-grams),这里使用卷积层获取上下文主要是由于实践中RNN很难捕获长时依赖;卷积层后接批归一化(batch normalization),使用ReLu进行激活;
  3. 最后一个卷积层的输出被传送到一个双向的LSTM层用以生成编码特征,这个LSTM包含512个单元(每个方向256个单元)。

f e = R e L U ( F 3 ∗ R e L U ( F 2 ∗ R e L U ( F 1 ∗ E ( X ) ) ) ) f_e = ReLU(F_3*ReLU(F_2*ReLU(F_1*E(X)))) fe=ReLU(F3ReLU(F2ReLU(F1E(X))))
H = E n c o d e r R e c u r r e n c y ( f e ) H = EncoderRecurrency(f_e) H=EncoderRecurrency(fe)
其中,F1、F2、F3为3个卷积核,ReLU为每一个卷积层上的非线性激活,E表示对字符序列X做embedding,EncoderRecurrency表示双向LSTM。

class Encoder(nn.Module):
    """Encoder module:
        - Three 1-d convolution banks  5x1 
        - Bidirectional LSTM
    """
    def __init__(self, hparams):
        super(Encoder, self).__init__()

        convolutions = []
        for _ in range(hparams.encoder_n_convolutions):
            conv_layer = nn.Sequential(
                ConvNorm(hparams.encoder_embedding_dim,
                         hparams.encoder_embedding_dim,
                         kernel_size=hparams.encoder_kernel_size, stride=1,
                         padding=int((hparams.encoder_kernel_size - 1) / 2), 
                         # 进行填充,保持输入,输出的维度一致。
                         dilation=1, w_init_gain='relu'),
                nn.BatchNorm1d(hparams.encoder_embedding_dim)) 
            convolutions.append(conv_layer)
        self.convolutions = nn.ModuleList(convolutions)

        self.lstm = nn.LSTM(hparams.encoder_embedding_dim,
                            int(hparams.encoder_embedding_dim / 2), 1,
                            batch_first=True, bidirectional=True)
    

注意力网络:

Tacotron2中使用了基于位置敏感的注意力机制(Attention-Based Models for Speech Recognition),是对之前注意力机制的扩展(Neural machine translation by jointly learning to align and translate);这样处理可以使用之前解码处理的累积注意力权重作为一个额外的特征,因此使得模型在沿着输入序列向前移动的时候保持前后一致,减少了解码过程中潜在的子序列重复或遗漏。位置特征用32个长度为31的1维卷积核卷积得出,然后把输入序列和为位置特征投影到128维隐层表征,计算出注意力权重。关于具体的注意力机制计算可以参考这篇博客

Tacotron2中使用的是混合注意力机制,在对齐中加入了位置特征。
e i , j = s c o r e ( s i , c α i − 1 , h j ) = v a T t a n h ( W s i + V h j + U f i , j + b ) e_i,_j=score(s_i,cα_{i−1},h_j) =v_a ^Ttanh(Ws_i+Vh_j+Uf_i,_j+b) ei,

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值