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