轉(zhuǎn)帖|實施案例|編輯:龔雪|2017-03-29 17:38:20.000|閱讀 1090 次
概述:如果你是語音合成的新手,那這篇文章教你快速理解百度的語音合成原理!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
現(xiàn)在我們繼續(xù)上文的操作
步驟1:將語素(文本)轉(zhuǎn)換為音素
“It was early spring” -> [IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, R, IH1, NG, .]
步驟2:預(yù)測每個音素的持續(xù)時間和基頻
[IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, R, IH1, NG, .] -> [IH1 (140hz, 0.5s), T (142hz, 0.1s), . (Not voiced, 0.2s), W (140hz, 0.3s),…]
步驟3:將音素,持續(xù)時間和基頻結(jié)合從而輸出文本對應(yīng)的語音
[IH1 (140hz, 0.5s), T (142hz, 0.1s), . (Not voiced, 0.2s), W (140hz, 0.3s),…] -> 音頻
那么,我們實際通過什么樣的方式來訓(xùn)練這些步驟的模型,從而得到可靠的預(yù)測結(jié)果呢?
下面,我們將逐個講解訓(xùn)練流程中的每個環(huán)節(jié)。
步驟一:訓(xùn)練語素—音素模型
語音合成的第一步就是使用語素—音素轉(zhuǎn)換模型將文本轉(zhuǎn)換成音素。
上一篇文章中我們就介紹了這個例子:
Input?—?“It was early spring” Output?—?[IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, R, IH1, NG, .]
在大多數(shù)情況下,我們可以使用音素字典直接將文本輸入,并得到如上對應(yīng)的音素結(jié)果。
但如果出現(xiàn)音素字典沒有覆蓋的詞呢?這其實時常發(fā)生,就跟我們?nèi)祟惤?jīng)常會增加新的詞匯一樣(比如,“谷歌”,“截屏”等等的)。那么,在遇到新詞的時候,我們便需要一個回退機制來預(yù)測音素了。
Deep Voice使用神經(jīng)網(wǎng)絡(luò)來實現(xiàn)這個功能。準(zhǔn)確來講,它沿用過了Yao和Zweig在微軟進(jìn)行的Sequence to Sequence(Seq2Seq)的學(xué)習(xí)方法來進(jìn)行文本對應(yīng)的音素預(yù)測。
與其將這個原理用我自己的語言剖析深入,還是附上我覺得解釋得比較好的視頻和文章給大家來理解()。
那么,基于上述原理,訓(xùn)練使用的數(shù)據(jù)和標(biāo)簽是什么樣子的呢?
Input(X-逐字的)
[“It”, “was”, “early”, “spring”]
標(biāo)簽(Y)
[[IH1, T, .], [W, AA1, Z, .], [ER1, L, IY0, .], [S, P, R, IH1, NG, .]]
通過查詢標(biāo)準(zhǔn)音素字典(比如CMU這個,鏈接),我們可以得到與輸入文本一一對應(yīng)的標(biāo)簽。
步驟二:運行分割模型
在上一篇中,我們講過,在語音合成的時候我們需要預(yù)測音素的持續(xù)時間和基頻。而通過音素的音頻剪輯,我們可以輕易地獲取這兩個數(shù)據(jù)。
Deep Voice運用了分割模型來獲取每個音素的音頻剪輯。
分割模型將每個音素發(fā)聲的場景進(jìn)行匹配,從而獲取其對應(yīng)的音頻分割片段和其在音頻中的發(fā)聲位置。
如下圖所示:
分割模型預(yù)測了音素在一組音頻剪輯中的發(fā)聲位置和時長
分割模型真正有趣的部分在于其預(yù)測的不是每個獨立音素的位置,而實際是預(yù)測了每組音素對的位置。此外,這種模式是無監(jiān)督的,因為我們事實上無法知道語音片段中語素對應(yīng)的真正位置的標(biāo)簽信息。分割模型通過CTC loss模型來訓(xùn)練,你可以通過鏈接,深入了解它的原理。
Input(X)
Outputs(Y)
為什么要去預(yù)測音素對而不是獨立的每個音素呢?因為當(dāng)我們對給定時間戳對應(yīng)的某個音素進(jìn)行預(yù)測時,在該音素發(fā)聲的中間位置預(yù)測的概率是最大的。
對獨立單個的音素而言,給定語音對應(yīng)某個音素的概率在語音的發(fā)聲正中最大;而對成對的音素而言,概率最大值出現(xiàn)在兩個音素交界點上
對成對的音素來說,概率最大值出現(xiàn)在兩個音素交界點上(見上圖)。我們可以輕易的檢測出兩個音素發(fā)聲的交界點,因此,使用音素對可以讓我們更簡單地進(jìn)行定位。
步驟三:訓(xùn)練音素的持續(xù)時間和基頻的預(yù)測模型
在語音合成步驟中,我們需要對音素的持續(xù)時間和基頻進(jìn)行預(yù)測。
根據(jù)步驟二,我們已經(jīng)從分割模型中拿到了音素的持續(xù)時間和基頻,現(xiàn)在我們可以通過模型訓(xùn)練來預(yù)測新音素的數(shù)據(jù)了。
分割模型輸出是持續(xù)時間模型和基頻率模型的標(biāo)簽
Deep Voice通過一組單一共同訓(xùn)練的模型輸出這些數(shù)據(jù)。
Input(X)
標(biāo)簽(Y)
有了這些數(shù)據(jù),我們就可以進(jìn)行時間和Fo函數(shù)預(yù)測了。
步驟四:訓(xùn)練語音合成
最后,我們需要對語音合成流程中的實際生成語音的步驟進(jìn)行訓(xùn)練。與Deep Mind中的WaveNet非常相似,這個模型具有如下的架構(gòu):
我們將會把真實的語音剪輯作為標(biāo)簽來進(jìn)行訓(xùn)練
Input(X)
標(biāo)簽(Y)
這樣,我們就將語音合成的各個步驟過了一遍,由此便可以進(jìn)行語音合成了
恭喜你!讀到這里,你已經(jīng)知曉了Deep Voice生成語音的過程了,多加練習(xí),你也能成為生成語音的大咖!
更多行業(yè)資訊,更新鮮的技術(shù)動態(tài),盡在。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn