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,發音時長和音調,然后輸出合成的語音。
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之后,分數直線飆升。
總結
以上是生活随笔為你收集整理的Chapter4-1_Speech_Synthesis(Tacotron)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1952. 三除数
- 下一篇: LeetCode 2007. 从双倍数组