首頁科技 > 正文

使用英偉達NeMo讓你的文字會說話,零基礎實現自然語音生成任務

2021-08-04由 量子位 發表于 科技

語音合成

技術可以將文字資訊轉換成標準流暢的語音且進行朗讀,在公共服務、智慧交通、泛娛樂、智慧硬體等領域具有廣泛應用。

在第3期英偉達x量子位NLP公開課上,英偉達開發者社群經理分享了【

使用NeMo讓你的文字會說話

】,介紹了語音合成技術的理論知識,並透過程式碼演示講解了如何使用NeMo

快速完成自然語音生成任務

使用英偉達NeMo讓你的文字會說話,零基礎實現自然語音生成任務

以下為分享內容整理,文末附直播回放、課程PPT&程式碼、往期課程內容整理。

大家好,我是來自NVIDIA企業級開發者社群的李奕澎。今天直播的主題是使用對話式AI工具庫—Nemo讓你的文字會說話。

使用英偉達NeMo讓你的文字會說話,零基礎實現自然語音生成任務

今天的分享,我將首先簡要介紹語音合成技術的發展歷程、應用場景,及其工作流程和原理;然後詳細介紹語音合成技術中的深度學習模型的結構;最後將進入程式碼實戰部分,給大家介紹如何使用NeMo、結合端到端深度學習模型,快速完成自然語音生成任務。

語音合成技術

語音合成

技術是對話式AI場景中的一個子任務,對話式AI本質上是一個人機互動的問題,讓機器聽懂人說的話,看懂人寫的文字,說出人類能聽懂的話。其中讓機器開口說話的部分,就是今天要講到的

語音合成

(Text to Speech,TTS)技術。

使用英偉達NeMo讓你的文字會說話,零基礎實現自然語音生成任務

語音合成技術解決的主要問題是如何將文字資訊轉換為可聽的聲音資訊,也就是讓機器能夠像人一樣開口說話。

工作流程

簡單來說,首先給出文字並進行預處理,將預處理結果給到模型、進行特徵提取;然後生成語音的特徵表示,即頻譜圖;再將頻譜圖作為輸入給到另外一個模型,即聲碼器,進行聲音的生成。

使用英偉達NeMo讓你的文字會說話,零基礎實現自然語音生成任務

語音合成技術的

發展歷程

也很悠久,1939年時,誕生了世界上第一臺電子語言合成器—The Voder,它是由貝爾實驗室製作研發的,雖然現在聽起來它的發音並不OK,但在1939年的時代背景下,The Voder的誕生引起了很大轟動,推動了語音合成技術的發展。

1979年,麻省理工學院開發出了著名的語音合成系統—MITtalk,提升了語音合成的質量,它的缺點是發音不自然。

1992年,隨著PSOLA語音拼接技術的使用,就使得合成的語音更加自然,貼近於人類自然說話的聲音。

2014年左右,隨著深度學習的興起,神經網路相繼使用在語音合成當中,語音合成技術更加成熟。

2016年,Google團隊提出的WaveNet橫空出世,大大推動了深度學習模型在語音合成領域中的應用。WaveNet是一種自迴歸模型,它透過上一個時刻序列的資訊來預測當前時刻的輸出,同時又大量的使用了卷積神經網路進行特徵提取。

受到WaveNet模型的啟發,隨後相繼出現了更多更先進的端到端深度學習模型,比如Tacotron、Fastspeech2、MelGan等,這些優秀的模型推動了語音合成技術的產業化,現在我們隨處都能見到語音合成技術的應用。

使用英偉達NeMo讓你的文字會說話,零基礎實現自然語音生成任務

語音合成技術的

應用場景

非常廣泛,比如在公共服務領域的智慧客服、智慧播報;智慧硬體方面的智慧音箱、智慧機器人;智慧交通領域的語音導航、車載互動系統等;文化娛樂方面的有聲閱讀、廣播劇;教育領域的語音教育、早教機器人等。

語音合成技術的工作流程和原理

使用英偉達NeMo讓你的文字會說話,零基礎實現自然語音生成任務

關於語音合成技術的

工作流程

,我們拿到文字後,首先要對文字進行預處理,將文字分詞,分成字元級別或音素級別。文字中的標點也需要進行預處理,機器可以透過標點符號獲得句子表達的語氣。完成預處理環節後,我們就可以拿到文字中的語言特徵的特徵向量。

第二步,將特徵向量輸入到基於深度學習模型的編碼器中,對特徵向量進行提取和編碼,就可以得到隱藏層的特徵資訊;將隱藏層的特徵資訊再輸入到解碼器,就可以得到語音特徵的表示,即生成的頻譜圖。

第三步,將頻譜圖輸入聲碼器,輸出對應文字的Waveform聲波。

瞭解了語音合成技術的工作流程後,再來介紹下聲學模型Tacotron2。0、MelGan聲碼器。

使用英偉達NeMo讓你的文字會說話,零基礎實現自然語音生成任務

Tacotron2.0

是由谷歌大腦團隊在2017年提出的語音合成框架。它的工作流程如上圖,首先是最下方的編碼器部分,輸入文字,並進行字元級別的切分,拿到字元的向量;會經過三個卷積層以及雙向的LSTM長短期神經網路來提取文字中的特徵資訊和位置資訊。

然後將編碼器輸出的特徵向量輸送到一個注意力機制層,對文字中的字元的特徵資訊進行深度的理解。它將從預處理網路當中拿到每一幀的語音特徵,與每一個字元之間做一個注意力機制,將文字字元和語音的每一幀做對齊。

接下來,輸入給兩層的LSTM進行解碼,這裡的解碼是一幀接一幀的遞迴迴圈過程,經過一個線性變換的連線層映射出兩個分支。

其中一個分支會輸出頻譜圖,經過一個基於殘差網路形式的5層卷積層進行後處理,對解碼生成的頻譜圖進行精調和改善,最後再生成出目標的頻譜圖。給生成的頻譜圖對接一個聲碼器,就可以生成對應的聲音檔案了。

另外一個分支是用來預測輸出的序列是否已經完成,如果完成了就Stop Token,不再進行頻譜圖的生成。

語音合成技術中的深度學習模型

使用英偉達NeMo讓你的文字會說話,零基礎實現自然語音生成任務

對抗神經網路

MelGan

聲碼器的工作流程如上圖。

MelGan

模型的結構包含生成器(Generator)和判別器(Discriminator)兩部分。生成器不斷生成假的音訊資料,下方拿喇叭的小人則輸入真實的音訊,判別器接收這兩種音訊、並判斷音訊的真假。

我們需要不斷訓練判別器,提高它的判別能力。同時我們還要訓練生成器,讓它透過判別器的反饋、不斷提高合成的假音訊的質量。當生成器能夠合成出接近真實音訊的音訊資料時,那麼這個模型就完成訓練的部分進而用來做推理。

MelGan的主要優勢在於它的引數特別小,且合成語音的速度非常快,適用於低延遲的、即時的、線上的語音合成應用。

下面具體看一下MelGan中生成器和判別器的內部結構。

使用英偉達NeMo讓你的文字會說話,零基礎實現自然語音生成任務

首先看

生成器

,如上圖。以Tacotron2。0模型生成的頻譜圖作為輸入,輸入到到聲碼器中,首先會經過一層卷積層來

提取頻譜特徵

。我們知道Mel頻譜圖的時間解析度會比原始的音訊低256倍,所以我們要想把聲音從頻譜圖中還原的話,就需要在

生成器

的結構設計上進行上取樣(Upsampling Layer)的操作,以獲得更多的頻譜圖上的特徵資訊,來增加影象的解析度。

這裡接了兩層的

上取樣層

,它的內部使用了反捲積操作,可以放大頻譜圖的尺寸。然後它會接上一層Residual stack,是帶有擴展卷積模組的殘差網路層。擴展卷積透過差值補零的方式,讓卷積核的感受野指數級放大。

在MelGan中,透過大量使用擴展卷積模組來增加感受野,更好地理解在長距離的幀與幀之間的資訊關聯性。

接下來,再連線一層常規的卷積,就可以生成語音的音訊了。那麼我們生成的音訊質量如何?這裡就需要判別器來打分。

使用英偉達NeMo讓你的文字會說話,零基礎實現自然語音生成任務

上圖是

判別器

的結構。為了實現判別,學習音訊在不同頻率範圍的一些特徵,這裡採用了多尺度的

判別器

模組的設計。上圖設計了三個

判別器

模組,內部都是相同的網路結構,由前後各1層一維的卷積和4層分組卷積所構成。

其中第一個判別器模組在原始的音訊上執行,第二個判別器模組會在原始音訊降頻兩倍後的音訊上執行,第三個模組會在原始音訊降頻4倍後的音訊上執行。這樣的設計能夠讓每個模組都在自己的頻段上各盡其職、互不干擾,確保在對音訊進行建模的過程中具有更好的平衡性。

所以,將生成器合成出來的假音訊和真實的原始音訊輸入到判別器,這時候判別器就相當於一個二分類器,使用均方差作為損失函式,然後透過反向傳遞來更新引數。

那麼判別器的反饋和打分就可以促成生成器不斷的提高,生成器的提高又促使判別器不斷的提高,相互對抗,最後生成器合成的音訊能夠達到足夠接近於真實音訊的效果,這就是MelGan模型的結構和工作流程。

程式碼實戰:使用NeMo快速完成自然語音生成任務

瞭解了語音合成的理論知識後,我們一起看下如何在NeMo中快速、方便地實現語音合成任務。

使用英偉達NeMo讓你的文字會說話,零基礎實現自然語音生成任務

在NeMo中完成語音合成任務非常簡單,我們只需要載入模型、輸入文字,模型會解析文字、生成頻譜圖,進而生成音訊,只需要四五行程式碼就可以搞定。

另外,我們還可以在NeMo中呼叫其他更先進的模型,輸入文字直接生成音訊,真正做到端到端的模型的使用。

接下來,我們一起進入程式碼實戰的部分,去實際體驗如何在NeMo中快速呼叫這些模型,讓我們的文字會說話(程式碼實戰部分見直播回放第33分鐘起)。

直播回放連結:https://www。bilibili。com/video/BV1Rq4y1X7ih/

課程PPT&原始碼下載連結:https://pan。baidu。com/s/1Zvhp8F4q8WmLmK3uA6FknA 提取碼: yip4

— 完 —

頂部