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