語音合成的目標是使得計算機能夠發(fā)出跟人一樣自然流暢且?guī)в懈星榈穆曇簦固垢5膶W者嘗試基于Tacotron實現(xiàn)了一個StoryTime模型,該模型依賴于一個編碼器、解碼器、以及注意力機制來模擬生成人類水平的頻譜,期望它可以替代成為說書的。
在谷歌發(fā)布Tacotron模型之前,wavenet也是完全用神經(jīng)網(wǎng)絡來合成語音的模型,它采用自回歸的方法生成了讓人印象深刻的音頻,不過正是由于其自回歸的方法需要依賴于過去生成的所有樣本來生成新的樣本,因此其生成的速度十分緩慢,但是它可以捕捉不同說話人的特征,并且可以在他們之間隨意切換。
后來百度研究院發(fā)布了Deep Voice語音合成系統(tǒng),不同于wavenet一體式的做法,DeepVoice的做法是將傳統(tǒng)的基于參數(shù)合成系統(tǒng)的各個組件均替換成了神經(jīng)網(wǎng)絡,并且讓每個模塊各自進行訓練,該方法的缺點就是需要對每個模塊進行精細調參,這樣會出現(xiàn)錯誤累積的問題。
而Tacotron是一個完全端對端的語音合成模型(除了最后一步神經(jīng)網(wǎng)絡沒有直接生成波形信號之外),它不需要額外的音素信息或語言模型,而是直接可以將文本轉化成語音,這也是本文StoryTime所采取的模型。
1. 預處理階段
首先要處理的就是收集音頻語料以及所對應的文本標簽,這里作者下載的是哈利波特的聽書音頻,以及對應的文本材料。接下來要做的就是對這個音頻進行分割以及賦予每個小音頻正確的文本標簽。對于文本其實比較好處理,因為章節(jié)之間的格式很明顯,很容易可以使用正則表達式來得到想要的分割。
對于音頻的分割就麻煩一些,因為目標是得到音頻與文字之間的大致對齊。由于章節(jié)與章節(jié)之間一般情況下都會出現(xiàn)大約3秒鐘的停頓,所以作者首先基于停頓大于3秒鐘進行分割,默認會得到不同的章節(jié),然后有些章節(jié)與章節(jié)之間的停頓小于3秒,所以按上面方法分割的文件中會有包含了多個章節(jié)的情況,而這個又是無法自動分割的,因為容易與句子之間的停頓混淆。無奈之下,作者最終采用了聲學軟件Audible來手動對它們進行進一步的劃分,最終將劃分后的片段
放入開源的對齊軟件Gentle中,就可以得到樣本對。整個流程如下圖所示。
2.模型細節(jié)
這里采用的就是谷歌發(fā)布的Tacotron模型,如下圖所示,總的來說由五個部分構成,分別是文本編碼器、音頻特征編碼器、注意力、解碼器、合成器。下面我將逐一介紹每個部分。
首先,對于文本編碼器部分,將詞向量作為兩個帶ReLU激活函數(shù)的全連接層的輸入,并在這里采取了50%的dropout以提高模型的泛化能力,這一部分是對輸入的預訓練,論文中稱之為prenet。prenet的輸出作為CBHG網(wǎng)絡的輸入,其中CBHG網(wǎng)絡是由Convolutional Bank+Highway Network+GRU組成。這里作者使用了16層一維卷積網(wǎng)絡,因為輸入是單詞的embedding矩陣,一維卷積縱向作用到矩陣上面,16層卷積網(wǎng)絡分別擁有大小從1到16的不同的卷積核,通過這種不同大小卷積核的方式來提高模型泛化能力,并且每一層卷積都可以認為是一個起到k-gram的作用。然后經(jīng)過池化層和highway network以得到更高維的特征,并輸入到雙向GRU網(wǎng)絡中得到序列層面特征,并將從prenet出來的輸出與這里進行連接,構成一個residual connection,最終得到的輸出就是作為注意力模型的上下文特征。
另一個模塊就是注意力和RNN解碼器,注意到對于每一幀頻譜的輸入,解碼器輸出的是r幀頻譜,這種做法可以加速執(zhí)行時間,不過給訓練和生成的實現(xiàn)方法上帶來了差異。在訓練過程中,當預測了r幀梅爾頻譜以后,第r個時間點的頻譜標簽將作為模型的輸入,模型基于這個預測下一批r幀梅爾頻譜;在生成階段,除了一開始模型使用0填充的幀作為輸入以外,后面的時刻將會使用前一時刻輸出的r幀中的最后一幀梅爾頻譜作為輸入。如下圖所示,解碼器和注意力層中所用的均為GRU,注意力層是一個帶有Bahdanau注意力機制的GRU,解碼RNN由兩個帶有residual connection的GRU層構成,解碼器自始至終都是每步產(chǎn)生r幀輸出,最終解碼器的輸出作為CBHG網(wǎng)絡的輸入。這種解碼器只需要執(zhí)行T/r步,假設T為輸入的總幀數(shù)。
對于解碼器的CBHG網(wǎng)絡,與前面編碼器CBHG唯一的不同之處在于這里使用的k是8而不是16,這是因為在這里數(shù)據(jù)的維度有所降低,經(jīng)過卷積層得到輸出維度為80,剛好就是梅爾頻譜特征的維度。最后經(jīng)過highway network和雙向GRU即可得到頻譜圖,利用griffin lim算法即可將該頻譜圖轉化成音頻。至于griffin lim算法的轉化效果,不是特別理想,因為即使是將一段清晰的音頻,提取其頻譜特征,通過griffin lim算法轉化出來的音頻相比于原始音頻還是多了一些噪音。
總結一下,這是一篇實踐性的文章,在谷歌的Tacotron論文發(fā)布以后,利用自己的數(shù)據(jù)來一步步調參優(yōu)化進而搭建一個自己的語音合成系統(tǒng)。
-
編碼器
+關注
關注
45文章
3651瀏覽量
134767 -
谷歌
+關注
關注
27文章
6173瀏覽量
105633
原文標題:基于Tacotron模型的語音合成實踐
文章出處:【微信號:DeepLearningDigest,微信公眾號:深度學習每日摘要】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論