深度學習的語音生成

by allenlu2007

Reference: https://zhuanlan.zhihu.com/p/24317897

Reference: wavenet

 

A generative model for raw Audio

简介:本文提出了一种深度神经网络模型,名叫Wavenet。该模型可以生成原始语音。文章主要内容有几点:一,文章中,通过该模型进行语音生成任务,结果很接近真人发出的声音。二,Wavenet还可以抓取不同说话者的特征,有高保真度。三,使用音乐文件来训练该模型,可以生成新的高保真度的音乐片段。四,还可以加入判别模型,使之完成语音识别任务。

先說幾個 key words: dilated, causal, convolutions.

Dilated 是擴大 input text (TTS) range? 

Causal 是因果律,適用在 voice, 但不適合在 image.  Voice 也可以有 prediction?  是因為 voice synthesis 不需要?

不需要 RNN?  是因為 voice synthesis 不需要記憶? Pro: training fast.

 

1,前言 

通过神经网络方法,由所有像素或者单词联合概率生成的条件分布在内容生成任务方面取得了最好的成绩。这些模型通过对大量的随机变量建模来完成任务。本文要探索的是能否对原始语音进行建模来生成高保真的语音。

 

文章对卷积神经网络的改良很好,模型的设计和应用很好,很值得参考。

本文提出了类似于PixelCNN 的语音生成模型:WaveNet。本文主要成果如下:
一,WaveNet可以生成类似真人发音的语音,比以前的模型都好;
二,为了在语音生成中处理长跨度时间依赖问题,我们设计了一个新的扩大连接的卷积框架;该卷积框架有非常大的感受野。
三,一个模型可以生成不同类型的声音。
四,该模型可以用于语音识别以及音乐生成。


2,WaveNet



类似于PixelCNN,条件分布概率是通过多层卷积层来建模的。网络中没有池化层。Why?  Synthesis 應該是 unpooling layer?

但已經用 dilated convolution, 所以不用 unpooling layer?



2.1 DILATED CAUSAL CONVOLUTIONS(扩大的卷积)
(动态图可以参考deepmind链接:WaveNet: A Generative Model for Raw Audio | DeepMind


我们在WaveNet中采用因果卷积(causal convolutions)保证p(x_{t_1+1}^{}|x_{1},...x_{t}   )不包含x_{t+1}, x_{t+2},... x_{T}中的信息。对于图像处理任务中,类似的是采用masked convolution。对于1-D数据,秩序将输出偏移几步就行。(详情参见原文和代码,原文链接:arxiv.org/pdf/1609.0349

因为模型只有因果卷积,而没有遞歸連接 (recurrent connection),模型训练速度快于RNN,特别对于很长的序列。对于因果卷积,存在的一个问题是需要很多层或者很大的filter来增加卷积的感受野。本文中,我们通过大小排列来的扩大卷积来增加感受野。扩大卷积(dilated convolution)是通过跳过部分输入来使filter可以应用于大于filter本身长度的区域。等同于通过增加零来从原始filter中生成更大的filter。示意图如下:


在示意图中,卷积感受野扩大了1,2,4,8倍。扩大卷积(dilated convolution)可以使模型在层数不大的情况下有非常大的感受野。

2.2 softmax distribution
因为原始音频是按照16-bit(one per timestep)的整数值序列储存的,每个timestep,softmax层需要输出65536个概率值。为了便于运算,我们应用了\mu -law companding transformation进行转换,将输出概率数目降低为256个。公式如下:f(x_{t} )=sign(x_{t} )\frac{ln(1+\mu \left| x_{t}  \right| )}{ln(1+\mu )} ,其中-1<x_{t}<1    and \mu =255


2.3 gated activation units
文章中采用了类似于PixelCNN中的gated activation 模块:
同时,发现在声音信号建模中,非线性比线性模型效果更好。



2.4 residual and skip connections

文章中使用了residual 和skip connection技术来使模型更快收敛,并且使梯度能传到到更深层模型。


2.5 Conditional WaveNet
接受额外的输入h,WaveNet可以对条件分布(p(x|h))进行建模。p(x|h)=\prod_{t=1}^{T} p(x_{t}|x_{1},...,x_{t-1},h   )
通过条件分布建模,我们可以指导WaveNet生成具有目标特点的音频。比如,在多人对话的条件下,我们可以采取一位说话人的声音作为额外的输入。再比如,在TTS(text to speech)任务中,text信息也是作为额外的输入。文章中有两种条件建模的方法: global conditioning(全局方法) and local conditioning(局部方法)。
全局方法是接受单额外输入h,该额外输入在所有的时间点上影响模型输出。z=tanh(W_{f,k}\ast X+V_{f,k}^{T}h  )\odot \sigma (W_{g,k}\ast X+V_{g,k}^{T}h )
其中,V_{\ast ,k} 为线性投影,V_{*,k}^{T}h 在所有时间节点上进行传播。
局部条件建模方法:我们有第二种时间序列h_{t} ,可以通过对原始数据的低采样率获得(比如TTS模型中的线性特征)。我们首先通过transposed convolutional network(上采样)(y=f(h))将时间序列转换成和语音序列一样分辨率的新的时间序列。然后将其用于激活单元:z=tanh(W_{f,k}\ast X+V_{f,k}^{T}y  )\odot \sigma (W_{g,k}\ast X+V_{g,k}^{T}y ),其中,V_{f,k}^{}*y是1*1卷积。如果采用transposed convolutional network,也可以直接使用V_{f,k}^{}*h
,然后每隔一段时间重复。但是,在我们的试验中,我们发现这样效果没有前一种方法好。

 

2.6 context stacks 

我们提出了多种增加wavenet感受野的方法:一,提高扩大卷积的数目;二,增加层数;三,采用更大的filter;四,更大的扩大因子。

(这里英文原文不好翻译,但是是实际操作中很关键的地方。)

A complementary approach is to use a separate, smaller context stack that processes a long part of the audio signal and locally conditions a larger WaveNet that processes only a smaller part of the audio signal (cropped at the end). One can use multiple context stacks with varying lengths and numbers of hidden units. Stacks with larger receptive fields have fewer units per layer. Context stacks can also have pooling layers to run at a lower frequency. This keeps the computational requirements at a reasonable level and is consistent with the intuition that less capacity is required to model temporal correlations at longer timescales.

3,实验

本文中,我们在三个不同的任务上(多人语音生成(multi-speaker speech generation ),TTS(text to speech),音乐建模(music audio modelling)),对wavenet进行了评价。生成的样本见链接:deepmind.com/blog/waven.

3.1 multi-speaker speech generation(多人语音生成)

首先实验了自由语音生成(不基于文本)文中采用了VCTK数据集中的英文多人语料。数据集总共包含109为发言者的44小时语音数据。wavenet条件建模的条件是发言者的id(采用one hot 编码)。

模型不是基于文本,因此模型可以生成不存在的类似于人类发音的语音。这和生成模型生成图像一样,咋看很真实,仔细看存在很多不自然的地方。模型生成的语音缺乏长时间上的连续性,部分的原因是模型感受野所限(大约300毫秒),使模型只能记住2-3个音素。

单个wavenet模型可以基于任何一位编码的发言者进行条件建模。单个模型有足够的能力抓取所有109位发言者的特征。同时,我们观察到,相对于单个发言者数据,增加发言者可以于使验证集表现提高。这个现象提示:This suggests that WaveNet’s internal representation was shared among multiple speakers.

我们还发现,模型还能抓取除语音之外的特征,比如录音质量以及呼吸和嘴动的声音。

3.2 text to speech

第二个任务是TTS。我们采用了Google’s North American English and Mandarin Chinese TTS systems的语音数据集。前者包含 24.6小时的语音数据,后者包含34.8小时的语音数据。两种数据的发言者都是女性。

TTS任务中,wavenet条件建模的条件是输入文本的语言学特征。同时,我们也实验了同时基于logF_{0} 值和文本语言学特征进行建模。对每一种语言,我们也训练外部模型基于语言学特征预测logF_{0} 值和语音饱和度。WaveNets的感受野为240毫秒。同时,我们还建立了example based and model based speech synthesis baselines, hidden Markov model (HMM)-driven unit selection concatenative and long short-term memory recurrent neural network (LSTM-RNN)-based statistical parametric语音合成模型。使用同样的数据集以及语言学特征来训练这些模型,比较它们和wavenet的性能。

subjective paired comparison tests和mean opinion score (MOS) tests用于评价wavenet性能。(即让人员听生成的语音,再评分)结果如图 


3.3 音乐建模

我们采用了两种音乐数据库:一,the Magna TagATune dataset,包含200小时的音乐数据,每29秒添加了标签(总共188种标签)来表示类型,乐器,音量和情绪。二,the YouTube piano dataset。包含60小时的钢琴独奏。

音乐建模难以量化的评价,可以定性的评价。我们发现,增加感受野对音乐建模非常必要。即使感受野增加到几秒钟,模型也难以长时间段保持连续。结果是每一秒钟的音乐类型,乐器,音量,情绪以及音质都有差异。不过,即使是非条件建模生成的音乐听起来还是不错的,而且经常是和声。

我们希望可以采用条件建模,让模型生成特定标签(类型,乐器,情绪等)的声音。我们采用the Magna TagATune dataset数据集来训练该模型。数据集附带的标签有很多噪声和遗漏。 我们对标签进行了清洗(对标签合并类似标签,去除过少的标签)。模型训练后生成的音乐还是不错的。

3.4 语音识别

wavenet属于生成模型结构,但是也可以直接修改为判别模型来完成判别任务:语音识别。

传统语音识别着重于依赖 梅尔频率倒谱系数(MFCCs)。近期的研究开始转向直接对原始语音数据进行建模。

我们采用了TIMIT语音数据集来进行语音识别实验。我们在dilated convolution层后面增加了mean-pooling层,让输出聚集成10毫秒的带宽(160\times downsampling)。pooling层后面接了几层非因果卷积层。我们采用两类loss来训练wavenet。一类loss为预测下一个样本;另外一类loss为对该frame进行分类。 两种loss同时训练的结果好于只采用一种loss的结果,结果我们在测试集上获得了直接从原始语音数据建模的最好结果:18:8 PER。

4 总结

本文作者提出了wavenet模型,该模型可以直接对原始语音数据进行建模。wavenet结合了因果卷积和扩展卷积,让感受野随着模型深度增加而成倍增加。感受野的增加对原始语音建模中的长时间依赖非常重要。




 

Advertisements