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技术、开发资源及社区动态定期推送。