tacotron論文解讀

tacotron是第一個端到端TTS模型
輸入:raw text
輸出:mel-spectrogram圖(梅爾頻譜圖)

利用Grilffin-Lim聲碼器mel-spectrogram轉為wav

名詞解釋
1. mel-spectrogram 梅爾倒譜圖

在音頻、語音信號處理領域們需要將信號轉換成對應的語譜圖(spectrogram),將語譜圖上的數據作為信號的特徵。語譜圖的橫軸x為時間,縱軸y為頻率,(x,y)對應的數值代表在時間x時頻率y的幅值。

通常的語譜圖其頻率是線性分佈的,但是人耳對頻率的感受是對數的(logarithmic),即對低頻段的變化敏感,對高頻段的變化遲鈍,所以線性分佈的語譜圖顯然在特徵提取上會出現“特徵不夠有用的情況”,因此梅爾語譜圖應運而生。

梅爾語譜圖的縱軸頻率和原頻率經過如下公式轉換,其中f代表原本的頻率,m代表轉換後的梅爾頻率,顯然,當f很大時,m的變化趨於平緩。梅爾倒頻係數(MFCCs)是在得到梅爾語譜圖之後進行餘弦變換(DCT,一種類似於傅里葉變換的線性變換),然後取其中一部分系數即可。
語譜圖的在語音識別中的應用_語譜圖的在語音識別中的應用

引用:

2. Grilffin-Lim聲碼器

算法思想
griffin-lim重建語音信號需要使用到幅度譜和相位譜。而MEL譜圖當中是不含相位信息的,因此griffin-lim在重建語音博形的時候只有MEL譜可以利用,但是通過一些運算,我們可以利用幀與幀之間的關係估計出相位信息,從而重建語音波形。
這裏的MEL譜可以看做是實部,而相位信息可以看做是虛部,通過對實部和虛部的運算,得到最終的結果。

算法步驟

  1. 隨機初始化一個相位譜
  2. 用這個相位譜與已知的幅度譜(來自MEL譜)經過ISTFT(逆傅里葉變換)合成新的語音波形
  3. 用合成語音做STFT, 得到新的幅度譜和新的相位譜
  4. 丟棄新的幅度譜,用已知幅度譜與新的相位譜合成新的語音
  5. 重複2,3,4多次,直至合成的語音達到滿意的效果或者迭代次數達到設定的上限

引用

tacotron模型

1. 整體框架

語譜圖的在語音識別中的應用_語譜圖的在語音識別中的應用_02


總體來説,模型和sequence-to-sequence模型非常相似,大體上由encoder和decoder組成,raw text經過pre-net, CBHG兩個模塊映射為hidden representation,之後decoder會生成mel-spectrogram frame。再由聲碼器處理成最後的波形(wav)。

2. 關鍵模塊
2.1 CBHG

CBHG就是作者使用的一種用來從序列中提取高層次特徵的模塊,如下圖所示:

語譜圖的在語音識別中的應用_MEL_03

其中使用了卷積+highway+殘差鏈接+雙向GRU的組合,輸入序列,輸出同樣也是序列.

highway layers

與LSTM GRU中的門控思想類似,引入Gate機制來解決深度神經網絡中的梯度消失和梯度爆炸問題

https://zhuanlan.zhihu.com/p/38130339

2.2 encoder

輸入被CBHG處理之前還需要經過pre-net進行預處理,作者設計pre-net的意圖是讓它成為一個bottleneck layer來提升模型的泛化能力,以及加快收斂速度。下圖展示了模型整體架構的文字表示,我們可以看到pre-net是由全連接層+dropout組成的模塊:

語譜圖的在語音識別中的應用_#人工智能_04

2.3 decoder

作者使用兩個decoder: attention decoder和output decoder,attention decoder用來生成query vector作為attention的輸入,注意力模塊生成context vector,最後output decoder則將query vector和context vector組合在一起作為輸入。

這裏作者並沒有選擇直接用output decoder來生成spectrogram,而是生成了80-band mel-scale spectrogram,也就是我們之前提到的mel-spectrogram,熟悉信號處理的同學應該知道,spectrogram的size通常是很大的,因此直接生成會非常耗時,而mel-spectrogram雖然損失了信息,但是相比spectrogram就小了很多,且由於它是針對人耳來設計的,因此對最終生成的波形的質量不會有很多影響。

另外一個用來縮減計算量的做法是每個decoder step預測多個(r個)frame,且作者發現這樣做還可以加速模型的收斂。

2.4 post-processing net and waveform synthesis

作者使用比較簡單的Griffin-Lim 算法來生成最終的波形,由於decoder生成的是mel-spectrogram,因此需要轉換成linear-scale spectrogram才能使用Griffin-Lim算法,這裏作者同樣使用CBHG來完成這個任務。實際上這裏post-processing net中的CBHG是可以被替換成其它模塊用來生成其它東西的,比如直接生成waveform,在Tacotron2中,CBHG就被替換為Wavenet來直接生成波形。

2.5 實驗

略遜於waveNet

2.6 數據集