Chapter4-1_Speech_Synthesis(Tacotron)

文章目录

  • 1 TTS before End-to-end
  • 2 Tacotron
    • 2.1 Encoder
    • 2.2 Attention
    • 2.3 Decoder
    • 2.4 Post processing
  • 3 How good is Tacotron?

本文为李弘毅老师【Speech Synthesis - Tacotron】的课程笔记,课程视频youtube地址,点这里(需)。

下文中用到的图片均来自于李宏毅老师的PPT,若有侵权,必定删除。

文章索引:

上篇 - 3-2 Deep Clustering, PIT

下篇 - 4-2 More than Tacotron

总目录

1 TTS before End-to-end

我们现在的TTS(Text-to-Speech)都是end-to-end的神经网络,那么,在没有end-to-end之前,TTS是怎么做的呢?李老师在这里简单介绍了几个技术,最老的可以追溯到1939年。这里来看一下最接近end-to-end的Deep Voice,其他的有兴趣可以直接看李老师的视频,这里就不介绍了。

Deep Voice其实就是四个神经网络分别train好之后合在一起的模型。首先text会进入一个Grapheme-to-phoneme的模型,把书写的基本单元转化为发音的基本单元。然后这个phoneme会进入一个Duriation Prediction的模型,输出每个phoneme的发音时长是多少。同时这个phoneme也会进入一个叫做Fundamental Frequency Prediction的模型,用来输出每个phoneme的发音音调是怎样的。最后有一个模型,同时接收phoneme,发音时长和音调,然后输出合成的语音。
Chapter4-1_Speech_Synthesis(Tacotron)_第1张图片

2 Tacotron

Tacotron在17年和18年都有发表论文,是一个end-to-end的语音合成模型。它的输入是character,输出是 (linear) spectrogram,spectrogram和真正的语音之差一个phase的信息,所以可以说是end-to-end的模型了。Tacotron中的Taco就是墨西哥料理中的Taco,作者们应该是一群吃货,在论文的注释中还特别注释了哪些人喜欢吃Taco,哪些人喜欢吃寿司。
Chapter4-1_Speech_Synthesis(Tacotron)_第2张图片
Tacotron的整体结构如下图所示,可以分为Encoder,Attention,Decoder和Postprocessing四个部分。下面将对每个部分分别介绍。
Chapter4-1_Speech_Synthesis(Tacotron)_第3张图片

2.1 Encoder

Encoder就是类似于讲Grapheme转化为phoneme的东西。首先输入的文本会经过一层embedding,然后经过一个由全连接+dropout组成的Pre-net,接着经过一个叫做CBHG的模块,最后输出一串sequence。这个CBHG是一个有点复杂的东西,李老师在这里没有细讲,就是几句话带过。总之,就是输入一个sequence,吐出一个sequence。
Chapter4-1_Speech_Synthesis(Tacotron)_第4张图片
在第二版的encoder当中,CBHG就被砍掉了,所以这其实也就是一个可有可无的东西,这也是李老师不做过多介绍的原因之一。第二版的encoder结构如下图所示。
ch4-1-5

2.2 Attention

这里的Attention就是正常的Attention,如果不知道Attention的原理的话,可以参考我的这篇博客。这里attention的作用其实就很想是预测每个phoneme的duration。输入的文字和输出的语音在时间上其实是有一种对应关系的,下图中纵坐标表示的是encoder steps,横坐标表示decoder steps,中间的这幅图就是attention的大小,如果学出来像是左图这样的一条斜直线的话,就说明学的比较好,如果学出来像右图这样的话,就说明没学好。
Chapter4-1_Speech_Synthesis(Tacotron)_第5张图片

2.3 Decoder

Decoder就是一个会经过Pre-net且有Attention的RNN,不过每个time step的输出都会有3个或者多个sequence,因为一个phoneme对应的语音是比较长的。不过这里还有一个额外的model,用来判断这个RNN在这个time step是否可以结束了。
Chapter4-1_Speech_Synthesis(Tacotron)_第6张图片

2.4 Post processing

decoder输出的sequence会再丢到一个CBHG里去,可以把CBHG想象成一大堆的CNN,然后再输出一个sequence。需要这个post processing的原因是,decoder产生的每个time step的输出是依赖于前一个time step的输出的,所以如果错了就没法修正了,加一个CBHG就是给模型一个修正的机会。最后的loss会结合decoder输出和Mel-spectrogram的偏差,以及CBHG输出和Mel-spectrogram的偏差。最终Inference的时候,我们用的是CBHG的输出。
Chapter4-1_Speech_Synthesis(Tacotron)_第7张图片
当然这个输出不是语音,还需要一个额外的Vocoder才行,但这个Vocoder是单独train好的,这里不多做介绍。
ch4-1-9

有一点需要指出的是,Tacotron在Inference的时候,是需要加Dropout的,不然输出会坏掉~

3 How good is Tacotron?

再来看一下Tacotron的效果如何。这里用到的评价指标叫做mean opinion score。这个就是找一堆人,来听声音打分,分数为1分到5分的整数,1分最低,5分最高,觉得声音越真实,打分就可以越高。话说这个其实和历史模型做比较,就有点不太靠谱,不同人的主观感受是不太一样的。

结果就是第一版的Tacotron分数一般,但是第二版的Tactron就逼近ground truth了。
Chapter4-1_Speech_Synthesis(Tacotron)_第8张图片
两个版本的最大差异,其实是在vocoder这里。用了WaveNet之后,分数直线飙升。
Chapter4-1_Speech_Synthesis(Tacotron)_第9张图片

你可能感兴趣的:(课程笔记)