本文未經允許禁止轉載,謝謝合作。作者:Light Sea@知乎
今天我將介紹JETS,一種基於FastSpeech2和HiFi-GAN完全端到端TTS模型,我們之前介紹的TTS模型基本都是二階段的模型,因此訓練會比較繁瑣,JETS解決瞭這個問題,從而使得我們在隻訓練一個模型的情況下輸入text直接合成語音。
原文標題:<JETS: Jointly Training FastSpeech2 and HiFi-GAN for End-to-End Text-to-Speech>
當前很多主流的TTS模型,比如Tacotron2、FastSpeech,都使用二階段訓練,第一個階段從text生成梅爾頻譜(mel-spec),第二個階段使用neural vocoder從mel-spec生成語音,這種方法雖然有比較令人滿意的表現,但也有一些缺點,比如模型需要按順序訓練,因為vocoder依賴前一個模型的輸出作為輸入。
解決這些問題的方法就是完全端到端的TTS模型(E2E-TTS),近期的模型諸如FastSpeech2和VITS都有著和二階段模型類似的表現。
本文中作者提出一種基於FastSpeech2和HiFi-GAN的E2E-TTS模型JETS,模型可以直接從text生成語音。作者還提出一個alignment module,使得JETS不需要依賴外部工具如MFA來生成alignment。實驗結果證明JETS和近期比較好的E2E-TTS模型VITS有類似的表現。
模型的整體架構如下圖所示:
可以看到基本上就是組合瞭FastSpeech2和HiFi-GAN,但是多加瞭一個alignment module。
這裡我假設讀者對FastSpeech2和HiFi-GAN都比較瞭解,不瞭解的讀者可以參考我之前的文章。
FastSpeech2
HiFi-GAN
我們簡述一下計算的流程,首先text會通過encoder來編碼得到隱表示 h,然後使用alignment module我們可以知道每個token對應的duration d;之後我們使用variance adaptor來生成pitch和energy信息,根據之前得到的 d 我們可以將 h 擴展到合適的長度,這時候把 h 輸入到decoder可以生成mel-spec;最後HiFi-GAN生成語音。
下圖展示瞭variance adaptor的結構:
由於我們不需要mel-spec這個中間表示,因此FastSpeech2部分的loss隻來自variance adaptor:
HiFi-GAN的loss包含三個部分,GAN的對抗損失、feature matching loss、mel-spec loss:
681e33fd9991bf364d285ae31537f59c
Alignment是指音素和其對應的語音的長度,知道這個長度對訓練諸如FastSpeech的TTS模型非常重要。我們有很多方法可以計算它,比如像FastSpeech一樣基於attention,或是像FastSpeech2一樣基於forced alignment工具MFA,另外也有像VITS一樣和模型學習一起訓練的方法。
這裡作者使用一個alignment module來和模型的其它部分一起訓練,從而不需要多餘的步驟或是依賴於外部工具。
Alignment module的輸入為text的隱表示h和mel-spec m,作者首先使用encoder將它們編碼為 h^{enc} 和 m^{enc} ,之後我們可以計算text和mel-spec之間的距離矩陣 :
這裡作者使用瞭L2距離。
然後我們使用softmax就能得到soft alignment A_{soft}:
A_{soft}可以被視為mel-spec的frame對應某個text的概率矩陣,由此我們可以計算alignment module的objective:
這裡s是一個有效的alignment, S(h)是所有有效的alignment構成的集合, T,N 分別是mel-spec和text的長度。
什麼是“有效的alignment”呢?首先我們知道這個alignment必須是單調的,也就是說text中音素的前後關系在mel-spec中也必然保持一致,這些實際上類似於筆者之前在介紹DTW的文章中提到的要求。
回到objective,實際上(5)式最大化瞭有效alignment的後驗概率。
熟悉語音識別的讀者已經明白瞭,上式其實和CTC的objective非常類似,因此也可以使用CTC中的基於動態規劃的forward_sum算法進行高效計算。不懂CTC的讀者不需要著急,它其實是語音識別中非常著名且常用的loss,我將在之後的文章中介紹,這裡你隻需要知道有這麼個算法能計算(5)式就可以瞭。
到此我們知道瞭如何計算loss,我們現在關註如何從 A_{soft} 中得到duration,這裡作者用瞭Glow-TTS中的MAS(Monotonic Alignment Search)算法,它的原型其實也是一個著名算法——viterbi算法,viterbi算法是一個經典的求解最短路徑的動態規劃算法,不熟悉的讀者可以參考Glow-TTS的論文或是查看viterbi算法的資料,這裡就不贅述瞭。下圖是MAS的一個例子:
使用MAS我們可以把 A_{soft} 轉換為一個0-1矩陣 A_{hard},接著我們計算 sum_{j}A_{hard,i,j}就能得到duration。為瞭讓 A_{soft}和 A_{hard} 更接近,作者也使用它們之間的KLD作為額外的loss:
最終的loss為:
da503de1ca2d98b3e18366e6498b4656
註意我們隻在訓練的時候需要這個alignment module,而在推論的時候由於有duration predictor我們是不需要它的。
最後要說明的是這個alignment module在之前的工作中已經被提出瞭,因此並不是作者的原創。
JETS的loss為variance adaptor、HiFi-GAN、alignment module的loss的加和:
a767adbc3121c0f9f79daec85855d8a8
作者使用LJSpeech進行實驗,且使用FastSpeech2和VITS作為baseline,結果如下表所示:
這裡CF2就是FastSpeech2+HiFi-GAN,其中ft表示兩者分開訓練,一起fine-tuning;tr表示一起訓練。
可以看到JETS在F0 RMSE, CER和MOS上都有最好的表現,而在MCD上是CF2-ft的表現更好。總體而言表現還是令人滿意的。
本文我介紹瞭JETS,一種結合瞭FastSpeech2和HiFi-GAN的E2E-TTS模型。JETS可以直接從text中生成語音,且進一步使用alignment module來解除對外部對齊工具的依賴,在實驗中取得瞭和近期的E2E-TTS模型類似或更好的結果。總體而言,JETS在創新性上有所欠缺,但依然不失為一個有啟發和實用意義的工作。
創作不易,如果大傢覺得有收獲的話還請點贊喜歡收藏支持一下,你的支持就是我創作的動力。