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