# [論文筆記] Transfer Learning from Speaker Verification to Multispeaker Text-To-Speech Synthesis(Part II)
###### tags: `Voice`
語音合成系統通常包含多個階段,例如 Synthesizer(TTS Frontend,Acoustic model)和 Vocoder

## Synthesizer
## 1. 結構:非 end-to-end

### 1.1 Concatenative Approach
* 聲音 dataset:把很多聲音訊息都存在 dataset 中,要使用時就拿出來進行 Concate
* 作法:合成"你好嗎"
→ 從 dataset 中找出 "你", "好", "嗎" 三個字的聲音,Concate 在一起.類似關鍵字搜尋
* 問題:
* 合成聲音不夠豐富(無法合成語料庫中沒有的)
* 語料庫(聲音 dataset)中沒有我們想要的字
* 須要在語料庫中存要合成對象的聲音
* 聽起來很不自然 → 將什麼樣的音串在一起聽起來比較順
* 因此許多研究為 "減少 Concatenation cost"
### 1.2 Parametric Approach
* 最早使用的 ML 方法做語音合成系統:利用 DNN 或 HMM(馬可夫)來解這個問題
* 方法:訓練之後輸出機率最高的作為實驗結果
* 問題:每次輸出都是同一段語音
---
## 2. 結構:encoder-decoder
### 2.1 Deep Voice
比較接近 end-to-end 的做法就是百度提出的 Deep Voice,把文字轉換成語音
因每一個 Moduel 都是分開 end-to-end 訓練的,所以整體模型嚴格意義上不算 end-to-end 訓練。
輸入:文字,輸出:語音

分為 4 個 Moduel
* Grapheme(字母)-to-phoneme(發音==音素==)
給定 Grapheme,去猜測它的發音,將轉化成為最小的 phonem 給另外兩個 Moduel
* Duration Prediction:判斷每一個音符發音的==時長==
* Fundamental Frequency Prediction:
* 判斷每一個發音的音高、==音調==(音符震頻)
* 不需要聲帶震動就輸出【X】
* Audio Synthesis
三個 Moduel 結果合在一起(同時接收 phoneme+發音時長+音調),就是"語音合成"的結果
> **[註] phoneme 發音音素**
> 1. 發音的基本單元
> 是人類語言中能夠區別意義的最小聲音單位,是音位學分析的基礎概念。
> 3. 一個字詞可由一至數個音節組成,一個音節可由一至數個「音段」(元音、輔音等)組成。

在出現 Tacotron前,研究者也做了一些 End-to-end TTS 嘗試
### 2.2 First Step Towards End-to-end Parametric TTS Synthesis
* Input:phoneme
* Output:聲學特徵向量(acoustic features) for STRAIGHT (vocoder)
acoustic features 丟入一個特殊的 STRAIGHT Vocoder,才能輸出 Waveform(聲波)
### 2.3 Char2wav
* Input:character
* Output:聲學特徵向量(acoustic features) for SampleRNN (vocoder)
### 2.4 Tacotron 模型
* Input:character
* Output:Linear spectrogram(聲音頻譜),做 linear transform 就是 Waveform(聲波)
* 優勢:Tacotron 的方式是最一步到位的
---
## 3.1 Tacotron v1
架構:Seq2Seq + Attention

* Encoder:由 char embedding、Pre-net、CBHG 組成
* Attention
* Decoder:由 pre-net、Attention-RNN、Decoder-RNN 組成
* 目的:生成 Mel-spectrogram frame
* spectrogram:size通常是很大的,因此直接生成會非常耗時
* mel-spectrogram:
* 雖然會損失一些訊息,但是相比 spectrogram 就小了很多
* 針對人耳來設計的,因此對最終生成的波形的質量不會有很多影響
* post-processing:CBHG
目的:將 Mel-spectrogram 轉換為 linear-scale spectrogram
* decoder-RNN 後並沒有直接將輸出轉化為語音(音頻文件)
* 而是接了 CBHG,用來在一個線性頻率範圍內預測幅度譜(spectral magnitude),通過反向傳播來修正每一 frame 的錯誤
* vocoder:使用 Griffin-Lim 算法
目的:將 linear-scale spectrogram(聲學參數)轉換 Waveform(語音聲波)
特點:不需訓練、不需要預知 Phase spectrum,而是通過 frame 之間的關係,通過迭代生成 Phase spectrum 即已知的 Amplitude spectrum,從而重建語音波形。
### 3.1.1 Encoder


目的:將 Character(字母) 轉化成為一個 phoneme 向量(發音音素),告訴接下來的 Attention,這些字符要怎麼發音
1. Input 1:Character(字母)+ 標點符號(幫助 model 學習語氣、斷句)
2. Input 2:char embedding
Character 經過 Linear Transform 變成 char embedding,放入 Pre-net 進行傅立葉轉換
> Pre-net:全連接層 + dropout 組成
3. Input 3:Pre-net 輸出之結果再通過 CBHG,輸出 phoneme 向量
* CBHG(Conv1D bank+Highway layer+GRU)
Max-pool:平滑化(使相鄰 feature 相似)
### 3.1.2 Decoder
Input:zerp vector 經過 Pre-net、RNN、Attention 後的 phoneme,再進RNN
Output:每個 time step 輸出多個 Mel-Spectrogram 向量(省時),輸出多個 Mel-Spectrogram 向量,將多個向量串起當作下一個 RNN 的輸入
ex. 如果r=3,sequence 長度變為原來的 1/3
* 原因:
* 一個 phoneme 的語音對應到 spectrogram 是比較長,1秒聲音對應很多個vector
* 每個 RNN 只生成一個向量,那麼 sequence 長度很長,RNN 很容易爛掉
> r = Mel-Spectrogram 向量數目
> v1:r = 3, 5
> v2:r = 1
* Teacher forcing:判斷是否已經結束
* 作法:每次產生結果都進行一次判斷
詢問模塊:Binary的classifier,根據閾值判斷是否需要
* 原因:訓練的時候若用最後一層作為下一層的輸入,直接使用正確答案使訓練與測試的結果相差較大
* 解法:Dropout 丟掉正確答案的部分內容,防止 overfitting
---
## 3.2 Tacotron v2

* Encoder:由 char embedding、3 Conv layer、BiLSTM 組成
* Attention:這裡是 Local Sensitive Attention,並不是我們現在用到的 Self-Attention
* Decoder:auto-regressive RNN,用來預測 Mel-spectrogram
* Post-processing:以上輸出還會有個 Post-Net 來精調 Mel-spectrogram
* vocoder:WaveNet
### 3.2.1 Attention
類似 Deep Voice 中的 Duration Prediction:
確定每一個 Character 的 embedding(phoneme 向量)發音多少秒

輸入的文字(Character)和輸出的語音(phoneme)在**時間**上其實是有一種對應關係的
可視化展現出 model 對每個 phoneme(音素)的持續時長的建模方式
* 縱軸:每個點代表 Encoder 輸出的 embedding(phoneme 向量)
* 橫軸:在做 Decoder 的時候,我們每一個 embedding(phoneme 向量)會輸出多少 Time Steps(多少秒的發音),即 Encoder 吐出的每一個 phoneme(音素),Decoder 要把它變成多長的聲音訊號。
**目標**:曲線越接近於對角線效果越好
### 3.2.2 Decoder

一次預測一個 frame 的 Spectrogram
1. 上一步預測出的 Spectrogram 首先被傳入一個 “pre-net”
> pre-net(ReLU組成的雙層全連接層):作為 boottleneck,對於學習 Attention 是必要的
2. pre-net 的輸出 + Attention → 2 層 LSTM
3. 2 層 LSTM 的輸出 + Attention → 經過一個 Linear Projection 來預測目標 Spectrogram
4. 最後,預測目標 Spectrogram 進入 "post-net",預測一個 Residual
Residual + prediction → 得到了最後的 Mel-spectrogram
> post-net(5層CNN):精調 mel-spectrogram,改善 spectrogram 重構的整個過程
---
* 每一步的預測結果 prediction 會進入 pre-net 層,然後和 attention 的結果一起進入 LSTM 層
* LSTM 層的結果和 attention 的向量再做 concat 然後通過 linear projection 預測目標的 spectrogram
* 預測的結果進入 post-net 層來預測一個殘差,加到 prediction 上,我們就得到了最後的 Mel-spectrogram
* 損失函數用的MSE。
## 參考資料
:::success
### [DLHLP 2020] Speech Synthesis (1/2) - Tacotron
https://www.youtube.com/watch?v=DMxKeHW8KdM
1. Speech Synthesis(語音合成)——學習筆記1, by 弗拉基米爾
https://zhuanlan.zhihu.com/p/140439784
2. 2020 年3月新番李宏毅人類語言處理獨家筆記TTS - 14, by 除夕
https://zhuanlan.zhihu.com/p/130999249
3. 李宏毅DLHLP.13.Speech Synthesis.1/2.Tacotron, by 老毛
https://blog.csdn.net/oldmao_2001/article/details/109099576
4. Chapter4-1_Speech_Synthesis(Tacotron), by zjuPeco
https://blog.csdn.net/zjuPeco/article/details/106441232?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4.control
### NATURAL TTS SYNTHESIS BY CONDITIONING WAVENET ON MEL SPECTROGRAM PREDICTIONS
paper(Tacotron2):https://arxiv.org/pdf/1712.05884.pdf
1. 論文閱讀筆記:Tacotron和Tacotron2
https://dengbocong.blog.csdn.net/article/details/111180544?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.control
2. Tacotron2 論文+ 代碼詳解
https://blog.csdn.net/whjkm/article/details/89321954?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-9.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-9.
3. TACOTRON:端到端的語音合成
https://blog.csdn.net/Left_Think/article/details/74905928?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
:::