【第七期】AI Talk:端到端語音合成及其優化實踐(上)
38 人贊了文章
1、前言
語音合成系統分為前端和後端,前端負責分詞、詞性、多音字標註等文本特徵信息提取;後端模塊根據前端提取的文本特徵完成語音生成。從技術角度,傳統後端模塊又可以細分為拼接系統和參數系統,拼接系統和參數系統各有優缺點,詳細對比可以參照 AI Talk 的上一篇文章 「基於深度學習的語音合成技術進展」 。
傳統的語音合成系統,都是相對複雜的系統,比如,前端模塊需要較強的語言學背景知識,不同語言的語言學知識差異明顯,需要特定領域的專家支持,增加了系統構建的難度。參數系統的後端模塊需要對語音的發聲機理以及信號處理有一定的了解。由於傳統參數系統建模時存在信息損失,限制了合成語音表現力的進一步提升。而拼接系統則對語音資料庫要求較高,同時,需要人工介入制定很多挑選規則和參數,以保證拼接合成的效果和穩定性。
這些問題促使端到端語音合成的出現,研究者希望能夠合成系統能夠盡量的簡化,減少人工干預和對語言學相關背景知識的要求。端到端合成系統直接輸入文本或者注音字元,系統輸出音頻波形。前端模塊得到極大簡化,甚至可以直接省略掉。端到端合成系統相比於傳統語音合成,降低了對語言學知識的要求,可以方便的在不同語種上複製,批量實現幾十種甚至更多語種的合成系統。藉助於深度學習模型的強表達能力,端到端語音合成系統表現出令人驚艷的合成效果和強大豐富的發音風格與韻律表現力。
本文將向您介紹雲知聲在端到端語音合成方向的探索和嘗試,這其中既包括對已有演算法的理解和復現、又包括雲知聲結合自身對演算法的調整和改進。如果您是語音合成愛好者,希望了解語音合成行業發展和最新技術的現狀,建議您試聽文中附帶 Samples,這些 Samples 代表這當前實驗室環境下,語音合成韻律和音質的最佳水平。如果您是語音合成或機器學習從業者,希望了解技術細節,建議您從頭閱讀文章,如有問題歡迎留言或私信。
2、Tacotron
Tacotron 是第一個真正意義上端到端的語音合成系統,它輸入合成文本或者注音串,輸出 Linear-Spectrum ,再經過 Griffin-Lim 轉換為波形,一套系統完成語音合成的全部流程。
Tacotron 前後推出兩代,Tacotron2 主要的改進是簡化了模型,去掉了複雜的 CBHG 結構,同時更新了 Attention 機制,提高了對齊穩定性。Tacotron 和 Tacotron2 師出同門,總體思路是一樣的,本文以初代 Tacotron 為例講解。
圖1 記錄了 Tacotron 的整體結構,黃色代表輸入,綠色代表輸出,藍色代表網路。網路部分大體可分為 4 部分,分別是左:Encoder、中:Attention、右下:Decoder、右上:Post-processing。其中 Encoder 和 Post-processing 都包含一個被稱為 CBHG 的結構,CBHG 結構的詳細介紹可以參照上一篇文章 「基於深度學習的語音合成技術進展」 。Encoder、Attention、Decoder 共同構成了經典的 Seq2seq 結構,所以 Tacotron 也可以看做是一個 Seq2seq + Post-processing 的混合網路。
Tacotron 輸入可以有多種選擇,以中文和英文合成系統為例:
- 英文文本,訓練英文模型,最直觀的想法是直接將英文文本當做輸入,Tacotron1 也是這麼做的。但這樣可能會引入一些問題,比如未登錄詞發音問題。
- 英文注音符,用英文注音符(比如 CMUDict )作為輸入可以提高發音穩定性,除了注音詞典,還可以引入注音前端,增強對模型的控制。
- 中文拼音,由於中文漢字數量多,且存在大量多音字,直接通過文本訓練是不現實的。所以我們退而求其次,通過拼音訓練模型,拼音由注音前端生成,這樣既去掉了漢字的冗餘發音又提高了模型的可控性。
- 中文|英文 IPA (International Phonetic Alphabet) 音標,IPA 音標是一種更強的注音體系,一套注音體系可以標註多種語言。對於中文,IPA 音標的標註粒度比拼音更細,實驗中,我們觀察到用 IPA 作為輸入,可以略微提升對齊穩定性。另外,在中文發音人+英文發音人混合訓練試驗中,我們觀察到了一個有意思的現象:由於中英文 IPA 標註中共享了部分發音單元,導致跨語種發音人可以學會對方的語言,也就是中文發音人可以合成英文,英文發音人可以合成中文。在這個聯合學習過程中存在著遷移學習的味道。
根據不同的用途,Tacotron 可以輸出 Linear-Spectrum 或 Mel-Spectrum,如果使用 Griffin-Lim 需要 Tacotron 輸出 Linear-Spectrum;如果使用 WaveNet 做 Vocoder ,則 Tacotron 輸出 Linear-Spectrum 或 Mel-Spectrum 均可,但 Mel-Spectrum 的計算代價顯然更小,Tacotron2 中,作者使用 80 維 Mel-Spectrum 作為 WaveNet Vocoder 的輸入,在雲知聲我們使用 160 維 Mel-Spectrum 。
Seq2Seq 模塊:Seq2Seq 本質上是學習序列到序列映射的強大模型,其已經在多個不同領域(NMT、CHAT、ASR等)取得了成功。Tacotron 套用了這套框架。在 Seq2Seq 模塊中,輸入是注音序列,輸出是 Mel-Spectrum 序列,引入低維 Mel-Spectrum 的目的是幫助 Attention 收斂。模型里還包含很多 tricks 包括引入 CBHG 模塊,Decoder 模塊每一時刻同時輸出多幀等等,這裡就不一一贅述。
Post-processing 模塊:Post-processing 是另一個很重要的模塊,在 Tacotron + WaveNet Vocoder 框架下,Post-processing 模塊的輸入是 Seq2Seq 模塊輸出的 Mel-Spectrum,輸出也是 Mel-Spectrum,看起來多此一舉,但卻有意義。Seq2Seq 的框架決定了 Decoder 只能看見前面的若干幀,它對未來一無所知,而 Post-processing 則可以看見前後若干幀,參考信息更多,理論上生成質量也更高。我們可以在實驗中觀察 Post-processing 的作用。 下圖中,從上到下依次是,Post-processing 輸出 Mel-spec;Decoder 輸出 Mel-spec;對齊。可以看到 Post-processing 輸出的 Mel-spec 更平滑高頻細節還原更清晰。
2.1 實時解碼 tricks (CPU)
在 Tacotron1 中,作者使用 Griffin-Lim 演算法,從 Linear-Spectrum 中恢復相位,再通過 ISTFT 還原波形,Griffin-Lim 的優點是演算法簡單,可以快速建立調研環境,缺點是速度慢,很難在 CPU 上做到實時,無法實時解碼也就意味著系統無法在生產環境使用。
幸運的是我們可以找到一些稍顯複雜但有效的方法,加速解碼。
- SPSI (Single Pass Spectrogram Inversion),顧名思義,是一種沒有迭代的快速 Spectrogram Inversion 演算法,速度飛快,但音質通常比 Griffin-Lim 差。
- Griffin-Lim 是一個迭代演算法,可以通過增加迭代數量提高合成音質,在實驗中我們通常進行60輪迭代以保證音質穩定。
SPSI 速度快但效果堪憂;Griffin-Lim 效果尚佳,但速度慢,有沒有辦法結合兩者的優點呢,答案是肯定的。我們的方案效果可以與 60輪 G&L 打平,同時可以在 CPU平台上將實時率做到令人滿意的指標(GPU 平台,性能還會翻幾倍 )。需要注意的是,性能指標在 Tensorflow 環境下獲得的,並沒有包含其他深入的工程化工作。
2.2 Samples
試聽請點擊鏈接
你覺得上面的 Samples 聽感如何呢?韻律還不錯,音質乍一聽也還好,但似乎又有些問題,主要表現在沉悶,不銳利。
沒錯,通過 Griffin-Lim 生成波形的頻譜過於平滑、空洞較多,聽感不佳。沒關係,在下一節中我們將想辦法解決這一問題。
3、Vocoder
通過上面一系列努力我們已經可以將 Tacotron 的 CPU 解碼速度做到實時了,但音質上始終有些欠缺。種種跡象表明,Griffin-Lim 演算法是音質瓶頸,經過一系列工作尤其是 Tacotron2 ,人們逐漸意識到,Mel-Spectrogram 可以作為採樣點自回歸模型的 condition,利用強大的採樣點自回歸模型提高合成質量。
目前公認的效果有保障的採樣點自回歸模型主要如下幾種,1) SampleRNN、2)WaveNet、3)WaveRNN。我們分別從頭實現了 SampleRNN 和 WaveNet ,下面我們將逐一介紹:
3.1 SampleRNN
SampleRNN 是一個精心設計的 RNN 自回歸模型。標準的 RNN 模型包括 LSTM、GRU,可以用來處理一些長距離依賴的場景,比如語言模型。但對於音頻採樣點這樣的超長距離依賴場景(比如:24k採樣率,意味著 1s 中包含 24000 個採樣點),RNN 處理起來已經非常困難了 。SampleRNN 的作者,將問題分解,解析度由低到高逐層建模,例如圖中,Tier3 層每時刻輸入16個採樣點,輸出狀態 S1;Tier2 層每時刻輸入 4 個採樣點,同時輸入 Tier3 輸出的 S1,輸出狀態 S2 ; Tier1 層每時刻輸入 4 個採樣點,同時輸入 Tier2 輸出的 S2,輸出一個採樣點,由於 Tier1 沒有循環結構,同一時刻可以輸出 4 個採樣點。
3.1.1 Samples
下面是 Unconditional SampleRNN 合成的一段語音,由於是 Unconditional 所以沒有語義內容,但保留了發音、音色以及韻律風格,我想你一定聽出了他是誰吧?
- 試聽請點擊鏈接
如果有興趣,可以點擊 SampleRNN Samples,在裡面你能找到總長度為 1小時 的 Samples。
總體來看模型的波形生成能力相當了得,發音、音色以及韻律風格的還原度都非常高。但 SampleRNN 也存在一些問題,最主要的是訓練收斂速度太慢了,導致調參優化效率低下,我們將在下一節介紹另一個採樣點自回歸模型 WaveNet,相比 SampleRNN ,WaveNet 不但保留了高水平的波形生成能力,而且還提升了訓練速度,單卡訓練一天就能獲得較好的效果。
3.2 WaveNet
圖4, 描述了 WaveNet 這類採樣點自回歸模型的工作方式,模型輸入若干歷史採樣點,輸出下一採樣點的預測值,也就是根據歷史預測未來。如果你對 NLP 較為熟悉,一定會覺得這種工作方式很像語言模型,沒錯,只不過音頻採樣點自回歸更難一些罷了,需要考慮更長的歷史信息才能保證足夠的預測準確率。
WaveNet 最初由 DeepMind 推出,是基於 CNN 的採樣點自回歸模型,由於 CNN 結構的限制,為了解決長距離依賴問題,必須想辦法擴大感受野,但擴大感受野又會增加參數量。為了在擴大感受野和控制參數量間尋找平衡,作者引入所謂「擴展卷積」的結構。如上圖所示,「擴張卷積」,也可以稱為「空洞卷積」,顧名思義就是計算卷積時跨越若干個點,WaveNet 層疊了多層這種 1D 擴張卷積,卷積核寬度為 2 (Parallel WaveNet 為 3),Dilated 寬度隨層數升高而逐漸加大。可以想像,通過這種結構,CNN 感受野隨著層數的增多而指數級增加。
訓練好了 WaveNet ,我們就可以來合成音頻波形了。但是,你會發現這時合成的音頻完全沒有語義信息,聽起來更像是鸚鵡學舌,效果就如上一節 SampleRNN 的樣例一樣。 要使 WaveNet 合成真正的語音,那麼就需要為其添加 condition ,condition 包含了文本的語義信息,這些語義信息可以幫助 WaveNet 合成我們需要的波形,condition 的形式並不唯一,但本文中我們只介紹 Mel-Spectrum condition 。
為什麼要引入 Mel-Spectrum condition 呢?有兩個原因:其一是為了和 Tacotron 打通,Tacotron 的輸出可以直接作為 WaveNet 的輸入,構成一套完整的端到端語音合成流水線;其二是因為 Mel-Spectrum 本身包含了豐富的語音語義信息,這些語音語義信息可以支持後期的多人混合訓練、以及韻律風格遷移等工作。
下面我們將著重介紹如何在模型中融入 Mel-Spectrum condition 。
由於採樣點長度和 Mel-Spectrum 長度不匹配,我們需要想辦法將長度對齊,完成這一目標有兩種方法:一種是將 Mel-Spectrum 反卷積上採樣到採樣點長度,另一種是將 Mel-Spectrum 直接複製上採樣到採樣點長度,兩種方案效果差異很小。我們希望模型盡量簡潔,故而採用第二種方法,如圖6所示。
方便起見,我們借用 Deep Voice1 (圖5)來說明。經過複製上採樣的 Mel-Spectrum condition,首先需要經過一個 1x1 卷積,使 Mel-Spectrum condition 維度與 WaveNet GAU 輸入維度相同,然後分兩部分累加送入 GAU 即可,注意,WaveNet 每層 GAU 都需要獨立添加 Mel-Spectrum condition。
3.2.1 訓練加速 tricks
WaveNet 中使用 8-bits 量化 μ-law 壓縮,輸出層採用 softmax,我們的實驗表明,8-bits μ-law 壓縮,會造成無法消除的背景噪音,影響聽感。
Tacotron2 和 Parallel WaveNet 中 使用 MoL 代替 softmax 作為輸出層,同時直接輸出波形的採樣值(取消 μ-law 壓縮)。我們的跟進實驗驗證了該方法的有效性,背景噪音消除,音質得到有效提高。但訓練時間大大延長,單發音人往往需要 5~7 天才能收斂,效率低下,這迫使我們尋找更高效的訓練方法。
雲知聲的方案對兩者進行了折中,試驗表明,該方案合成語音聽感上和 MoL 無差別(雖然理論上還是有損的),但訓練時間大大壓縮,一般 24 小時內就可以訓練得到不錯的模型。
3.2.2 Samples
下面我們來見證一下 WaveNet + Mel-Spectrum 組合的驚人能力,這是一段 WaveNet + Ground truth Mel-Spectrum 的合成語音,Mel-Spectrum 出自測試集,你能聽出是誰么?
需要說明的是,整個訓練集來自網路公開數據,時間跨度很長,聽起來錄音似乎來自多種不同設備,有損壓縮,壓縮比也不盡相同,造成不同錄音片段在聽感和譜圖上都有明顯差異,但這些似乎絲毫沒有影響 WaveNet 的學習,它幾乎完美的從 Mel-Spectrum 還原了波形。
- 試聽請點擊鏈接
WaveNet 有很多優點,訓練快、效果好、網路結構清晰簡潔。但 WaveNet 也引入了新問題:inference 性能差,在 CPU 平台通常需要數十秒時間合成一秒語音,這讓商業化幾乎不可能。
針對這一問題,DeepMind 推出了 WaveNet 加速方案 Parallel WaveNet,Parallel WaveNet 將 inference 速度提升上千倍,我們也在這裡做了相應的嘗試,後面會做介紹,不過在此之前,我們可以先將 Tacotron 和 WaveNet 組合起來,看看效果如何。
4、Tacotron + WaveNet Vocoder
在上一節中我們已經訓練好了一個帶 condition 的 WaveNet,這個模型可以根據輸入的 Mel-Spectrum 還原波形,但要構建一個完整的 TTS 系統,我們還需要生成 Mel-Spectrum 。這個任務當然要交給 Tacotron 了,我們現在將 Tacotron 和 WaveNet Vocoder 組合起來,整體的流程是,注音文本送入 Tacotron 輸出 Mel-Spectrum, Mel-Spectrum 再送入 WaveNet 合成波形。下面,我們會放出一些 Samples,請大家體會一下合成的效果。
4.1 Samples
4.1.1 TTS or Human
下面包含了幾對語音,真人和模型分別說同一句話,你能分辨出哪些是真人,哪些是模型么?
- 試聽請點擊鏈接
4.1.2 AB Test
下面包含三組語音,分別來自參數合成、Tacotron + Griffin-Lim、以及 Tacotron + WaveNet。你認為哪一組聽感更好?
- 試聽請點擊鏈接
5、下篇預告
如前所述,DeepMind 推出的 Parallel WaveNet,使模型 的 inference 速度提升上千倍,性能跨過了商業化門檻。雲知聲對此也進行了大量實驗,但關於 Parallel WaveNet 的實現細節,還請關注端到端語音合成的下篇分享,我們的實現與 DeepMind 有不同哦!敬請期待。
5.1 Samples
下面的 Samples 是自回歸 WaveNet 和 Parallel WaveNet 的對比。據我們所知,這是業界首次公開的中文 Parallel WaveNet 樣例。
- 試聽請點擊鏈接
6、參考文獻
- Tacotron: Towards End-to-End Speech Synthesis
- Natural TTS Synthesis by Conditioning WaveNet on Mel Spectrogram Predictions
- WaveNet: A Generative Model for Raw Audio
- Parallel WaveNet: Fast High-Fidelity Speech Synthesis
- Deep Voice: Real-time Neural Text-to-Speech
- SampleRNN: An Unconditional End-to-End Neural Audio Generation Model
推薦閱讀:
※Matcap Shader 詳解【1】 - 基礎思想與Unity中實現
※回顧暴雪起訴刀塔傳奇
※史萊姆都被高等級的冒險者刷完了。
※2018年第一季度手游簡報!來了解下~
※游擊式破壞型遊戲《紅色派系:游擊戰重製版(Red Faction Guerrilla Re-Mars-tered)》
TAG:遊戲從業者 | 深度學習DeepLearning | 人工智慧 |