文章目录
- 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,发音时长和音调,然后输出合成的语音。
2 Tacotron
Tacotron在17年和18年都有发表论文,是一个end-to-end的语音合成模型。它的输入是character,输出是 (linear) spectrogram,spectrogram和真正的语音之差一个phase的信息,所以可以说是end-to-end的模型了。Tacotron中的Taco就是墨西哥料理中的Taco,作者们应该是一群吃货,在论文的注释中还特别注释了哪些人喜欢吃Taco,哪些人喜欢吃寿司。
Tacotron的整体结构如下图所示,可以分为Encoder,Attention,Decoder和Postprocessing四个部分。下面将对每个部分分别介绍。
2.1 Encoder
Encoder就是类似于讲Grapheme转化为phoneme的东西。首先输入的文本会经过一层embedding,然后经过一个由全连接+dropout组成的Pre-net,接着经过一个叫做CBHG的模块,最后输出一串sequence。这个CBHG是一个有点复杂的东西,李老师在这里没有细讲,就是几句话带过。总之,就是输入一个sequence,吐出一个sequence。
在第二版的encoder当中,CBHG就被砍掉了,所以这其实也就是一个可有可无的东西,这也是李老师不做过多介绍的原因之一。第二版的encoder结构如下图所示。
2.2 Attention
这里的Attention就是正常的Attention,如果不知道Attention的原理的话,可以参考我的这篇博客。这里attention的作用其实就很像是预测每个phoneme的duration。输入的文字和输出的语音在时间上其实是有一种对应关系的,下图中纵坐标表示的是encoder steps,横坐标表示decoder steps,中间的这幅图就是attention的大小,如果学出来像是左图这样的一条斜直线的话,就说明学的比较好,如果学出来像右图这样的话,就说明没学好。
2.3 Decoder
Decoder就是一个会经过Pre-net且有Attention的RNN,不过每个time step的输出都会有3个或者多个sequence,因为一个phoneme对应的语音是比较长的。不过这里还有一个额外的model,用来判断这个RNN在这个time step是否可以结束了。
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的输出。
当然这个输出不是语音,还需要一个额外的Vocoder才行,但这个Vocoder是单独train好的,这里不多做介绍。
有一点需要指出的是,Tacotron在Inference的时候,是需要加Dropout的,不然输出会坏掉~
3 How good is Tacotron?
再来看一下Tacotron的效果如何。这里用到的评价指标叫做mean opinion score。这个就是找一堆人,来听声音打分,分数为1分到5分的整数,1分最低,5分最高,觉得声音越真实,打分就可以越高。话说这个其实和历史模型做比较,就有点不太靠谱,不同人的主观感受是不太一样的。
结果就是第一版的Tacotron分数一般,但是第二版的Tactron就逼近ground truth了。
两个版本的最大差异,其实是在vocoder这里。用了WaveNet之后,分数直线飙升。