講堂 | 譚旭:AI音樂,技術與藝術的碰撞(1)
編者按:日前,在2021全球人工智能技術大會(GAITC)的“當 AI 與藝術相遇”專題論壇上,微軟亞洲研究院主管研究員譚旭發表了題為《基于深度學習的流行音樂創作》的演講。該分享從分析流行音樂的工業化制作流程切入,介紹了深度學習是如何輔助流行音樂的創作,微軟亞洲研究院在 AI 音樂創作領域的一系列研究成果,以及當前AI音樂生成所面臨的研究挑戰等。本文為此次演講內容的完整整理,希望可以給大家在AI與藝術相互結合的研究方向上帶來更多啟發。
大家好!我是微軟亞洲研究院主管研究員譚旭,這次報告的題目是“基于深度學習的流行音樂創作”,我們將詳細探討如何將深度學習應用到流行音樂的創作過程中。我們先來看一下流行音樂的創作流程是什么樣的。
什么是流行音樂?按照字面的理解就是流行的音樂,實際上流行音樂我們通常指的是商品音樂,也就是通俗、大眾、喜聞樂見,又能商品化制作的音樂。因此,這類音樂具有固定的制作流程,包括詞曲創作、伴奏編曲、錄制樂器聲音和人聲、進行混音,最后進入到唱片制作等環節。而這是典型的工業制作流程,我們需要將其進行抽象以便在音樂創作中充分利用深度學習技術。
經過抽象我們得到了以下三個環節:
1)曲譜生成,包括詞曲和伴奏編曲的生成;
2)演奏生成,曲譜到聲音需要經過演奏的過程,相同的曲譜經過不同的演奏技巧演奏可以有非常大的差別,所以我們要基于曲譜生成演奏技巧;
3)聲音合成,根據曲譜和演奏技巧合成音樂聲音,包括人聲和樂器聲音的合成。
有了這個抽象以后,深度學習技術尤其是內容生成技術就可以應用到流行音樂的創作中了。其實音樂不只是藝術,它還包括邏輯和規則,而這些都是深度學習所擅長的。如果有足夠的數據、模型容量和計算力,深度學習就能產生比較好的效果。所以我們可以把上述流程對應到典型的深度學習應用任務上。曲譜和演奏技巧的生成,可以對應自然語言處理里的語言生成,因為它們就是用 symbolic token 符號表示,而聲音生成則可以對應到語音合成,這樣我們就能借鑒這些成熟領域的深度學習技術來幫助音樂生成了。
過去一段時間,微軟亞洲研究院在 AI 音樂創作方向上開展了一系列研究工作,包括 Song Writing(詞曲寫作)、Arrangement(伴奏生成)、Singing Voice Synthesis(歌聲合成)等。在詞曲寫作方面又涵蓋了:1) SongMASS,歌詞到旋律以及旋律到歌詞的生成;2) StructMelody,利用音樂結構信息生成旋律;3) DeepRapper,Rap歌詞押韻和節奏的生成;4) MusicBERT,通過大規模音樂數據學習音樂表征以更好的理解音樂,對音樂的風格、情感、曲式結構的理解。在伴奏編曲方面有 PopMAG 伴奏生成。在歌聲合成方面有 HiFiSinger 高保真的歌聲合成。接下來,我們將依次介紹這些工作。
詞曲寫作
在詞曲寫作方面,我們探討了歌詞生成旋律以及旋律生成歌詞兩個任務,并分析了這兩個任務的特點:
1. 要保證生成的歌詞和旋律本身具有歌詞性和旋律性。這個方面靠大量的數據做語言模型的建模可以做得還不錯;
2. 要保證歌詞和旋律的匹配度。按照傳統的術語講就是腔詞關系 (腔就是旋律、詞就是歌詞),好的腔詞關系能互相促進表達,而不好的腔詞關系會導致腔害于詞、詞害于腔。
因此,建模歌詞和旋律的關系是一個重點。要建模好關系,很重要的一個因素是要有數據,但往往歌詞和旋律的配對數據比較缺乏。除此之外,歌詞和旋律的連接也比較弱,一句歌詞可以配不同的旋律,一句旋律也可以配不同的歌詞。類比其它序列到序列學習的任務,比如語音識別、語音合成、機器翻譯等,我們可以發現源序列和目標序列都有很強的對應關系。在語音識別中,一個語音片段會嚴格對應一個字。所以歌詞和旋律這種弱的連接關系更加需要數據才能學得好,或者我們可以探索不用純依賴數據的方發去學習這種關系。
我們可以從兩方面去考慮上述問題,一方面是純粹基于深度學習的方法,從數據中去學習。另一方面是利用先驗知識,因為人類在創作歌曲時也是需要學習很多音樂知識的,比如音調、節奏、結構、曲式等,通過把音樂知識和深度學習相結合,可以更好地建模歌詞和旋律的關系。
首先介紹 SongMASS,它是純粹靠數據驅動,用深度學習來建模歌詞和旋律關系的方法。因為歌詞和旋律是弱耦合關系,缺乏數據,所以我們利用了預訓練,通過無監督、自監督、半監督的方法從無標簽數據中學習以彌補數據不足。歌詞和旋律雖然在內容上是弱耦合,但它們之間需要嚴格對齊,一個字或者音節需要對應到具體的音符。為此,我們提出了通過序列到序列學習的 encoder-attention-decoder 里的 attention 來抽取對齊關系。
預訓練采用了我們之前提出的 Masked Sequence to Sequence Pre-training (MASS) 方法,將歌詞和旋律分別看成是自然語言的一個段落,每句歌詞和旋律對應一個句子。再從源句子掩蓋一個片段,然后在****預測這個片段,通過這樣的方法我們就可以學習數據的知識了。
同時我們給 encoder-decoder attention 施加了一些約束,讓它能學習到歌詞和旋律的對齊關系。我們分別施加了句子級別和詞級別的約束,讓它呈現一個單調遞增的對角線形式。在預測過程中,可以從 attention 里抽取得到這個對齊關系。
我們從客觀和主觀評價的方式分別評估了 SongMASS 和基線方法的效果,在兩個評價方式上,SongMASS 都取得了比基線方法好很多的效果,具體實驗結果可參考 SongMASS 論文(論文鏈接:https://arxiv.org/pdf/2012.05168.pdf),更多的生成樣例可參見 demo 網頁:https://speechresearch.github.io/songmass/ 。
接下來介紹基于音樂知識輔助的深度學習方法實現的歌詞到旋律的生成。有哪些音樂知識能夠幫助歌詞到旋律的生成呢?這里大概包括以下幾個維度:音調、節奏、結構等。
我們先來看一下這些知識應用得不好會產生什么樣的問題。首先是音調的知識,我們的原則是保證歌詞和旋律的音調要一致,不能相違背,比如《故鄉的云》中“歸來吧”聽起來像是“鬼來吧”,而《你知道我在等你嗎》中“你知道我在等你嗎?”聽起來像是“你知道我在等你媽!”。導致這個問題產生的原因就是因為歌詞和旋律的聲調不一致。
第二個是節奏知識,我們說重要的歌詞要重拍、要高音、要持續。一個好的例子就是《明明白白我的心》,里面的“愿意”和“靠近”,對應的旋律就做到了強調。第三方面是結構知識,這里我們需要考慮歌詞的語句和旋律的語句要對應,起承轉合要對應,還要考慮旋律本身的重復、模進以及曲式結構。我們開展了相應的工作來利用這些音樂知識幫助旋律生成得更好。
我們的 StructMelody 工作利用音樂的結構信息實現了歌詞到旋律的生成。我們構建了一個兩階段的旋律生成方法,利用結構信息作為歌詞和旋律的橋梁。首先從歌詞中提取結構信息,然后從結構信息生成旋律。第二階段的結構信息生成旋律則可以利用自監督的方法,也就是從旋律中抽取結構,然后再訓練結構到旋律的序列到序列模型。我們只需要讓第一階段生成的結構和第二階段的結構盡量一致就可以。
舉個例子,我們對古詩詞《春曉》進行了譜曲,從歌詞抽取的結構信息包括節奏和小節劃分等信息,然后再配上****生成旋律。古詩詞一般具有固定的格律,所以可以人工設計規則,而對于不規則的歌詞,比如散文詩,就需要通過學習的方法預測結構信息了。
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。