1
本文作者: 雪莉?休斯敦 | 2017-03-22 21:40 |
AI科技評論按:百度前段時間推出了語音合成應用 Deep Voice,雷鋒網(wǎng)也于近日回顧了百度在語音識別及語音合成的研究歷程《從SwiftScribe說起,回顧百度在語音技術的七年積累》,但對于不了解TTS的同學們來說,要理解 Deep Voice 同樣困難。
而百度首席科學家吳恩達在 Twitter 上轉(zhuǎn)發(fā)了MIT Dhruv Parthasarathy 的一篇medium 文章,其詳細闡述了Baidu Deep Voice 的具體原理及操作方法。吳恩達表示,“如果你是語音合成的新手,那么這篇文章便是 Deep Voice 優(yōu)秀且可讀性強的一個總結(jié)。感謝@dhruvp! ”雷鋒網(wǎng)AI科技評論編譯,未經(jīng)許可不得轉(zhuǎn)載。
這是解析運用深度學習進行百度語音合成的第二篇文章。
在這篇文章中,我們將介紹使用有標簽的數(shù)據(jù)對各個語音合成步驟進行實際訓練的方法。
關于上篇文章,歡迎參考AI科技評論的此前文章《吳恩達盛贊的Deep Voice詳解教程,教你快速理解百度的語音合成原理(上)》。
Deep Voice 的 Arxiv鏈接:https://arxiv.org/abs/1702.07825 。
首先將上篇介紹語音合成流程的文章進行總結(jié),便于理解后面的原理介紹:
“It was early spring” -> [IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, R, IH1, NG, .]
[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),…]
[IH1 (140hz, 0.5s), T (142hz, 0.1s), . (Not voiced, 0.2s), W (140hz, 0.3s),…] -> 音頻
那么,我們實際通過什么樣的方式來訓練這些步驟的模型,從而得到可靠的預測結(jié)果呢?
下面,我們將逐個講解訓練流程中的每個環(huán)節(jié)。
語音合成的第一步就是使用語素—音素轉(zhuǎn)換模型將文本轉(zhuǎn)換成音素。
上一篇文章中我們就介紹了這個例子:
Input?—?“It was early spring”
Output?—?[IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, R, IH1, NG, .]
在大多數(shù)情況下,我們可以使用音素字典直接將文本輸入,并得到如上對應的音素結(jié)果。
但如果出現(xiàn)音素字典沒有覆蓋的詞呢?這其實時常發(fā)生,就跟我們?nèi)祟惤?jīng)常會增加新的詞匯一樣(比如,“谷歌”,“截屏”等等的)。那么,在遇到新詞的時候,我們便需要一個回退機制來預測音素了。
Deep Voice使用神經(jīng)網(wǎng)絡來實現(xiàn)這個功能。準確來講,它沿用過了Yao和Zweig在微軟進行的Sequence to Sequence(Seq2Seq)的學習方法來進行文本對應的音素預測。
與其將這個原理用我自己的語言剖析深入,還是附上我覺得解釋得比較好的視頻和文章給大家來理解(視頻地址)。
Quoc Le(Google Brain的深度學習研究院和Sequence to Sequenc分析模型的作者)在灣區(qū)深度學習學校關于Sequence to Sequenc分析模型的課程
數(shù)據(jù)構(gòu)成
那么,基于上述原理,訓練使用的數(shù)據(jù)和標簽是什么樣子的呢?
Input(X-逐字的)
[“It”, “was”, “early”, “spring”]
標簽(Y)
[[IH1, T, .], [W, AA1, Z, .], [ER1, L, IY0, .], [S, P, R, IH1, NG, .]]
通過查詢標準音素字典(比如CMU這個,鏈接),我們可以得到與輸入文本一一對應的標簽。
在上一篇中,我們講過,在語音合成的時候我們需要預測音素的持續(xù)時間和基頻。而通過音素的音頻剪輯,我們可以輕易地獲取這兩個數(shù)據(jù)。
Deep Voice運用了分割模型來獲取每個音素的音頻剪輯。
分割模型將每個音素發(fā)聲的場景進行匹配,從而獲取其對應的音頻分割片段和其在音頻中的發(fā)聲位置。
如下圖所示:
分割模型預測了音素在一組音頻剪輯中的發(fā)聲位置和時長
數(shù)據(jù)構(gòu)成
分割模型真正有趣的部分在于其預測的不是每個獨立音素的位置,而實際是預測了每組音素對的位置。此外,這種模式是無監(jiān)督的,因為我們事實上無法知道語音片段中語素對應的真正位置的標簽信息。分割模型通過CTC loss模型來訓練,你可以通過鏈接,深入了解它的原理。
如下是數(shù)據(jù)的形式:
Input(X)
“It was early spring”的音頻剪輯
對應的音素
[IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, R, IH1, NG, .]
Outputs(Y)
音素對和它們在音頻中的起始時間
[(IH1, T, 0:00), (T, ., 0:01), (., W, 0:02), (W, AA1, 0:025), (NG, ., 0:035)]
為什么要去預測音素對而不是獨立的每個音素呢?因為當我們對給定時間戳對應的某個音素進行預測時,在該音素發(fā)聲的中間位置預測的概率是最大的。
對獨立單個的音素而言,給定語音對應某個音素的概率在語音的發(fā)聲正中最大;而對成對的音素而言,概率最大值出現(xiàn)在兩個音素交界點上
對成對的音素來說,概率最大值出現(xiàn)在兩個音素交界點上(見上圖)。我們可以輕易的檢測出兩個音素發(fā)聲的交界點,因此,使用音素對可以讓我們更簡單地進行定位。
在語音合成步驟中,我們需要對音素的持續(xù)時間和基頻進行預測。
根據(jù)步驟二,我們已經(jīng)從分割模型中拿到了音素的持續(xù)時間和基頻,現(xiàn)在我們可以通過模型訓練來預測新音素的數(shù)據(jù)了。
分割模型輸出是持續(xù)時間模型和基頻率模型的標簽
Deep Voice通過一組單一共同訓練的模型輸出這些數(shù)據(jù)。
如下是數(shù)據(jù)組成:
Input(X)
音素
[IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, R, IH1, NG, .]
標簽(Y)
每個音素的持續(xù)時間和基頻,通過分割模型獲取
[(IH, 0.05s, 140 hz), (T, 0.07s, 141 hz), … ]
有了這些數(shù)據(jù),我們就可以進行時間和Fo函數(shù)預測了。
最后,我們需要對語音合成流程中的實際生成語音的步驟進行訓練。與Deep Mind中的WaveNet非常相似,這個模型具有如下的架構(gòu):
我們將會把真實的語音剪輯作為標簽來進行訓練
數(shù)據(jù)構(gòu)成:
Input(X)
帶有持續(xù)時間和基頻信息的音素
[(HH, 0.05s, 140 hz), (EH, 0.07s, 141 hz), ... ] ?
標簽(Y)
對應文本的真實語音剪輯
這樣,我們就將語音合成的各個步驟過了一遍,由此便可以進行語音合成了。
恭喜你!讀到這里,你已經(jīng)知曉了Deep Voice生成語音的過程了,并且你也了解了每個步驟的訓練方法。這里將訓練方法總結(jié)一下:
Input(X)
“It was early spring”
標簽(Y)
[IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, R, IH1, NG, .]
Input(X)
It was early spring的音頻波形
音素
[IH1,T,.,W,AA1,Z,.,ER1,L,IY0,.,S,P,R,IH1,NG,.] ?
output(Y)
音素對和各音素對在音頻中的起始時間
[(IH1, T, 0:00), (T, ., 0:01), (., W, 0:02), (W, AA1, 0:025), (NG, ., 0:035)]
Input(X)
音素
[IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, R, IH1, NG, .] ?
標簽(Y)
[(IH, 0.05s, 140 hz), (T, 0.07s, 141 hz), ... ]
4、訓練語音合成
Input(X)
[(HH, 0.05s, 140 hz), (EH, 0.07s, 141 hz), ... ]
標簽(Y)
文本對應的真實語音剪輯
到這里,你已經(jīng)充分了解了語音合成中的各個步驟,并對其實現(xiàn)和訓練的方法有了一定的認識,感謝你對這個系列百度Deep Voice的教程的閱讀。
via medium,雷鋒網(wǎng)編譯
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。