1
本文作者: 陳鳴鳩 | 2017-03-17 10:30 |
雷鋒網(wǎng)AI科技評(píng)論按:百度前段時(shí)間推出了語(yǔ)音合成應(yīng)用 Deep Voice,雷鋒網(wǎng)也于近日回顧了百度在語(yǔ)音識(shí)別及語(yǔ)音合成的研究歷程《從SwiftScribe說(shuō)起,回顧百度在語(yǔ)音技術(shù)的七年積累》,但對(duì)于不了解TTS的同學(xué)們來(lái)說(shuō),要理解 Deep Voice 同樣困難。
而近日,百度首席科學(xué)家吳恩達(dá)在 Twitter 上轉(zhuǎn)發(fā)了MIT Dhruv Parthasarathy 的一篇medium 文章,其詳細(xì)闡述了Baidu Deep Voice 的具體原理及操作方法。吳恩達(dá)表示,“如果你是語(yǔ)音合成的新手,那么這篇文章便是 Deep Voice 優(yōu)秀且可讀性強(qiáng)的一個(gè)總結(jié)。感謝@dhruvp! ”雷鋒網(wǎng)AI科技評(píng)論編譯,未經(jīng)許可不得轉(zhuǎn)載,以下為原文內(nèi)容:
我希望把 ML/AI 領(lǐng)域最新的重要文章做成一個(gè)系列,該領(lǐng)域的文章里有相當(dāng)多非常直觀的思路,希望這些直觀的思路能在本文中有所展現(xiàn)。百度 Deep Voice 是一個(gè)應(yīng)用深度學(xué)習(xí)把文本轉(zhuǎn)換成語(yǔ)音的系統(tǒng), 這篇文章是本系列的第一篇博文,也是分析 Deep Voice 文章的上篇。
百度 Deep Voice
首先貼上Deep Voice 的 Arxiv鏈接:https://arxiv.org/abs/1702.07825
最近,吳恩達(dá)所在的百度人工智能團(tuán)隊(duì)發(fā)布了一篇令人嘆為觀止的文章,文章介紹了一種基于深度學(xué)習(xí)把文本轉(zhuǎn)換成語(yǔ)音的新系統(tǒng)。文章中百度 Deep Voice 生成的錄音例子如下所示,讓結(jié)果來(lái)說(shuō)話(錄音內(nèi)容)
百度文本轉(zhuǎn)換語(yǔ)音系統(tǒng)成果。錄音來(lái)源:http://research.baidu.com/deep-voice-production-quality-text-speech-system-constructed-entirely-deep-neural-networks/
顯而易見(jiàn),與 MacOS 的 TTS (文本轉(zhuǎn)換成語(yǔ)音)系統(tǒng)相比,百度 Deep Voice 生成的錄音聽(tīng)起來(lái)更自然,更像人類朗讀的聲音。但以上結(jié)果應(yīng)當(dāng)注意到一個(gè)大前提——百度 Deep Voice 原型有一個(gè)先天優(yōu)勢(shì),那就是它利用人類朗讀的一個(gè)錄音源件來(lái)進(jìn)行訓(xùn)練,這給它添加了一點(diǎn)人類說(shuō)話的韻味。除此之外,Deep Voice還可以訪問(wèn)頻率和持續(xù)時(shí)間數(shù)據(jù)。
除了能輸出高質(zhì)量的語(yǔ)音,論文創(chuàng)新的幾個(gè)關(guān)鍵點(diǎn)是:
1. Deep Voice 將深度學(xué)習(xí)應(yīng)用于語(yǔ)音合成的全過(guò)程。
以前的 TTS 系統(tǒng)會(huì)在某些環(huán)節(jié)上采用深度學(xué)習(xí),但在Deep Voice之前,沒(méi)有團(tuán)隊(duì)采用全深度學(xué)習(xí)的框架。
2.需要提取的特征非常少,因此容易應(yīng)用于不同的數(shù)據(jù)集。
傳統(tǒng)語(yǔ)音合成需要進(jìn)行大量的特征處理和特征構(gòu)建,但百度通過(guò)使用深度學(xué)習(xí)避免了這些問(wèn)題。這使得 Deep Voice 的應(yīng)用范圍更加廣泛,使用起來(lái)也更加方便。論文中也提到,如果需要應(yīng)用于新的數(shù)據(jù)集,與傳統(tǒng)系統(tǒng)動(dòng)輒幾個(gè)星期的時(shí)間相比,Deep Voice 可以在幾個(gè)小時(shí)內(nèi)完成重新調(diào)試:
傳統(tǒng)的 TTS 系統(tǒng)完成(重新訓(xùn)練)需數(shù)天到數(shù)周的時(shí)間進(jìn)行調(diào)節(jié),而對(duì)Deep Voice進(jìn)行手動(dòng)操作和訓(xùn)練模型所需的時(shí)間只要幾個(gè)小時(shí)就足夠。
3.與現(xiàn)有技術(shù)相比,這個(gè)系統(tǒng)非常高效,專為生產(chǎn)系統(tǒng)而設(shè)計(jì)。
相比于 DeepMind 關(guān)于人類音頻合成的開(kāi)創(chuàng)性論文中實(shí)現(xiàn)的 WaveNet ,現(xiàn)在這個(gè)系統(tǒng)的有效速度提升了400倍。
我們專注于創(chuàng)建一個(gè)能迅速實(shí)現(xiàn)產(chǎn)品化的系統(tǒng),這需要我們的模型能運(yùn)行實(shí)時(shí)推斷。Deep Voice 可以在幾分之一秒內(nèi)合成音頻,并在合成速度和音頻質(zhì)量之間提供可調(diào)和的權(quán)衡。相比之下, WaveNet 合成一秒鐘的音頻,系統(tǒng)需要跑好幾分鐘。
光說(shuō)說(shuō)這些創(chuàng)新點(diǎn)就足以令人感到興奮不已了!但是它是如何工作的呢?這篇博文的剩余部分,將嘗試深入研究 Deep Voice 的不同部分,以及分析它們是如何融合在一起的。在此之前,可能你需要先看看這個(gè)視頻,了解一下基礎(chǔ)知識(shí):
曾在斯坦福大學(xué)與Andrew Ng 一起工作的 Adam Coates 是 Deep Voice 的作者之一, Coates 博士在百度發(fā)表了關(guān)于把深度學(xué)習(xí)應(yīng)用到語(yǔ)音的演講(從3:49處開(kāi)始觀看)。
做好了功課,現(xiàn)在是時(shí)候深入探究 Deep Voice 的工作原理了!這篇博客的其余部分將遵循以下結(jié)構(gòu):
1.首先,看看 Deep Voice 如何理解一個(gè)例句并將其轉(zhuǎn)換為與人聲相似的語(yǔ)音(這一步就是大家熟知的合成流程)。
2.然后將推理流程進(jìn)一步拆解,了解每個(gè)部分的作用。
3.接下來(lái),我們將介紹這些獨(dú)立部分實(shí)際上是如何訓(xùn)練的,以及實(shí)際的培訓(xùn)數(shù)據(jù)和標(biāo)簽。
4.最后,在下一篇博文中,我們將深究用于實(shí)現(xiàn)這些不同組件的深度學(xué)習(xí)架構(gòu)。
現(xiàn)在讓我們立足高點(diǎn),看看 Deep Voice 如何識(shí)別一個(gè)簡(jiǎn)單的句子,并將其轉(zhuǎn)換為我們聽(tīng)得見(jiàn)的音頻。
我們即將探究的流程具有以下結(jié)構(gòu):
Deep Voice 的推理線路。來(lái)源:https://arxiv.org/pdf/1702.07825.pdf
為了理解這些組件是什么,以及它們?nèi)绾谓M合在一起,我們一起逐步細(xì)究合成的具體過(guò)程。我們來(lái)看看 Deep Voice 是如何處理下面這個(gè)句子的:
It was early spring.
以英語(yǔ)為代表的語(yǔ)言不是語(yǔ)音語(yǔ)言(phonetic)。
(雷鋒網(wǎng)AI科技評(píng)論按:語(yǔ)音語(yǔ)言指的是單詞拼寫與讀音一致的語(yǔ)言,比如拉丁語(yǔ)就是一種典型的語(yǔ)音語(yǔ)言,即單詞中沒(méi)有不發(fā)音的字母,每個(gè)字母都有固定的發(fā)音。 )
例如以下單詞(參考于linguisticslearner),都帶后綴“ough”:
1.thoug (和 go 里面的 o 類似 )
2.through (和 too 里面的 oo 類似)
3.cough (和 offer 里面的 off 類似 )
4.rough (和 suffer 里面的的 uff 類似)
注意,即使它們有相同的拼寫,但它們的發(fā)音卻完全不同。如果我們的 TTS 系統(tǒng)使用拼寫作為其主要輸入,即使有相同的后綴,在接受為什么"thoug"和"rough"發(fā)音如此不同上,會(huì)不可避免地會(huì)陷入困境。 因此,我們需要使用稍微不同的表達(dá)方式,展示出更多的發(fā)音信息。
音素正是這樣的一樣?xùn)|西。我們發(fā)出來(lái)的聲音由不同音素單位組成。將因素組合在一起,我們幾乎可以 重復(fù)發(fā)出任何單詞的發(fā)音。這里有幾個(gè)拆分成音素的詞語(yǔ)(改編自CMU的音素字典):
· White Room - [ W, AY1, T, ., R, UW1, M,. ]
· Crossroads - [ K, R, AO1, S, R, OW2, D, Z, . ]
在音素旁邊的1,2等數(shù)字表示應(yīng)該發(fā)重音的位置。此外,句號(hào)表示音間停頓。
因此 Deep Voice 的第一步是,利用一個(gè)簡(jiǎn)單的音素字典,把每個(gè)句子直接轉(zhuǎn)換為對(duì)應(yīng)的音素。
處理我們句子的第一步, Deep Voice 將具有以下輸入和輸出。
· Input - "It was earky spring"
· Output - [IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, R, IH1, NG,. ]
在下一篇博文中我們將介紹如何訓(xùn)練這樣的模型。
現(xiàn)在有了音素后,我們需要估計(jì)在說(shuō)話時(shí),這些音素的發(fā)音時(shí)間。這也是一個(gè)有趣的問(wèn)題,因?yàn)橐羲貞?yīng)該基于上下文來(lái)決定它們或長(zhǎng)或短的持續(xù)時(shí)間。拿下面圍繞音素“AH N”的單詞舉例:
· Unforgettable
· Fun
相比第二個(gè)單詞,“AH N”顯然需要在第一個(gè)單詞里發(fā)更長(zhǎng)的發(fā)音時(shí)間,我們可以訓(xùn)練系統(tǒng)做到這一點(diǎn)。能夠理解每個(gè)音素,并預(yù)測(cè)它們的發(fā)音時(shí)長(zhǎng)(以秒為單位)是關(guān)鍵。
在這一步我們的例句會(huì)變成以下形式:
· Input - [IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, R, IH1, NG,.]
· Output - [IH1 (0.1s), T(0.05s),. (0.01s),...]
基本頻率(藍(lán)線)是聲帶發(fā)出濁音音素期間產(chǎn)生的最低頻率(將其視為波形的形狀)。我們的目標(biāo)是預(yù)測(cè)每個(gè)音素的基頻。
為了讓發(fā)音盡可能地接近人聲,我們還想要預(yù)測(cè)出每個(gè)音素的音調(diào)和語(yǔ)調(diào)。這一點(diǎn)從多方面考量,對(duì)以漢語(yǔ)為代表的語(yǔ)言尤為重要。因?yàn)檫@些語(yǔ)言中,相同的聲音,讀出不同的音調(diào)和重音具有完全不同的含義。預(yù)測(cè)每個(gè)音素的基頻有助于我們發(fā)好每一個(gè)音素,因?yàn)轭l率會(huì)告訴系統(tǒng),什么音素該發(fā)什么音高和什么音調(diào)。
此外,一些音素并不完全都發(fā)濁音,這意味著發(fā)這些音不需要每次都震動(dòng)聲帶。
例如,拿發(fā)音“ssss”和“zzzz”做例子,注意到前者是清音 (unvoiced),發(fā)音時(shí)聲帶沒(méi)有振動(dòng),而后者是濁音 (voiced) ,發(fā)音時(shí)聲帶振動(dòng)了。
我們的基本頻率預(yù)測(cè)也將考慮到這一點(diǎn),預(yù)測(cè)出何時(shí)應(yīng)當(dāng)發(fā)清音,何時(shí)應(yīng)該發(fā)濁音。
在這一步我們的例句會(huì)變成以下形式:
· Input - [IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, ., R, Ih1, NG,.]
· Output - [IH1(140hz),T(142hz),. (Not voiced),...]
在最后一步,我們將音素、持續(xù)時(shí)間和基頻 (F0 profile) 合并,生成一個(gè)真正的音頻。
生成語(yǔ)音的最后一步是,合并音素、持續(xù)時(shí)間和頻率,輸出聲音。Deep Voice 是基于 DeepMind 的 WaveNet 基礎(chǔ)之上的改進(jìn)版本,成功地實(shí)現(xiàn)了這一步。為了理解WaveNet的基礎(chǔ)架構(gòu),強(qiáng)烈建議閱讀他們的原創(chuàng)博客文章。
基于每個(gè)輸入的貢獻(xiàn), DeepMind 的原始 WaveNet 可以把眾多不同輸入擴(kuò)大指數(shù)倍。注意上面列出的指數(shù)樹(shù)結(jié)構(gòu)。
資源:https://deepmind.com/blog/wavenet-generative-model-raw-audio/
WaveNet 生成原始波形,允許生成所有類型的聲音,不同的口音、情緒、呼吸和人類語(yǔ)音的其他基本部分都能包含在內(nèi),這樣的聲音和人類的聲音區(qū)別就非常小了。此外, WaveNet 甚至能在這一步之上生成音樂(lè)。
在發(fā)布的文章中,百度團(tuán)隊(duì)通過(guò)優(yōu)化程序的執(zhí)行能力,特別是優(yōu)化執(zhí)行生成高頻輸入的能力來(lái)改進(jìn) WaveNet 。因此, WaveNet 需要幾分鐘來(lái)生成一秒鐘的新音頻,百度修改后的 WaveNet 可能只需要幾分之一秒完成同樣的任務(wù),如 Deep Voice 的作者所述:
Deep Voice 可以在幾分之一秒內(nèi)合成音頻,并在合成速度和音頻質(zhì)量之間提供可調(diào)諧的權(quán)衡。相比之下,以前的 WaveNe 合成一秒鐘的音頻需要幾分鐘的運(yùn)行時(shí)間。
下面是 Deep Voice 管道最后一步的輸入和輸出!
·Input - [IH1(140hz,0.5s), T(142hz, 0.1s),. (Not voiced, 0.2s), W(140hz, 0.3s), ...]
·Output - see bolow. 錄音
文字轉(zhuǎn)語(yǔ)音結(jié)果。錄音來(lái)源:http://research.baidu.com/deep-voice-production-quality-text-speech-system-constructed-entirely-deep-neural-networks/
三、概要
以上就是探究的結(jié)果了!通過(guò)這三個(gè)步驟,我們已經(jīng)看到了 Deep Voice 如何理解一段簡(jiǎn)單的文字,以及如何生成這段文字的讀音。以下是這些步驟的再次總結(jié):
1.將文本轉(zhuǎn)換為音素?!癐t was early spring”
· [IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, R, IH1, NG,. ]
2.預(yù)測(cè)每個(gè)音素的發(fā)音持續(xù)時(shí)間和頻率。
· [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ù)時(shí)間和頻率,輸出該文本的聲音。
· [IH1 (140hz, 0.5s), T (142hz, 0.1s), . (Not voiced, 0.2s), W (140hz, 0.3s),…] - > Audio
但是我們?cè)撊绾螌?shí)際訓(xùn)練 Deep Voice 以便能夠執(zhí)行上述這些步驟呢? Deep Voice 如何利用深度學(xué)習(xí)實(shí)現(xiàn)這個(gè)目標(biāo)?
在下一篇博文中,我們將介紹 Deep Voice 訓(xùn)練的方方面面,并展示更多底層神經(jīng)網(wǎng)絡(luò)背后的奧妙,詳情請(qǐng)點(diǎn)擊以下鏈接 Baidu Deep Voice part2 - training
有興趣了解更多關(guān)于深度學(xué)習(xí)的知識(shí),或者工作在深度學(xué)習(xí)領(lǐng)域?發(fā)送電子郵件到 founders@getathelas.com 加入 Athelas !我們一直在尋找充滿激情和好奇心的人:https://athelas.com/jobs/
更多機(jī)器學(xué)習(xí)文章請(qǐng)點(diǎn)擊以下鏈接:
Baidu Deep Voice part2 - training
Write an AI to win at Pong from scratch with Reinforcement Learning
更多資訊請(qǐng)關(guān)注雷鋒網(wǎng)。
via athelas 雷鋒網(wǎng)編譯
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。