今日arXiv最熱大模型論文:點擊即可播放!港中文發布大模型寫歌神器!

一首歌,包含作詞作曲兩個部分。擅長作詞or作曲就已經很牛了。比如方文山是周杰倫的御用作詞人,而周杰倫寫過很多耳熟能詳的曲子。而兼具作詞作曲才華的全能創作人卻是難得一見。

最近港中文發布了一款歌曲創作大模型SongComposer,作詞作曲都不在話下。 并且擅長讓歌詞和旋律相互交融,讓整首歌聽起來更加和諧。

先來幾個小demo一起欣賞一下:

根據歌詞編寫旋律

歌詞:突如其來的那一場 誰在路旁 在路旁 聽見我自由放聲唱 和我一樣 背上行囊 腳步丈量遠方

根據旋律作詞:

給出以下旋律:

生成的歌詞:他們也曾像我一樣 追著風跑著 卻找不到方向 只能像我這樣 停在路上 有一點累 卻也不覺的 有一點心為了追逐夢想 我總是選擇最難的路

最終合成的歌曲:

續寫歌曲:

給出歌曲的開頭

續寫結果

根據文本生成歌曲:

甚至你需要輸入“用悠揚的旋律和緩慢的節奏創作一首關于愛和自由的歌曲”,SongComposer就能根據文本提示生成一首包含詞曲的歌:

怎么樣,是不是聽起來還不錯,有那味了。如果再加上編曲老師的潤色,一首完整度較高的流行歌曲就完成了!

除此之外,作者還發布了用于訓練的歌詞-旋律配對數據集,以及一套評估生成歌曲質量的指標,相信可以推動智能音樂創作往前邁進一大步!

論文標題:
SongComposer: A Large Language Model for Lyric and Melody Composition in Song Generation

公眾號「夕小瑤科技說」后臺回復“SongComposer”獲取論文PDF!

SongCompose-PT Dataset

本節概述了SongCompose-PT數據集的編制、創建和結構,其中包括單獨的歌詞、旋律和在單詞級別上將歌詞與旋律同步的歌詞-旋律配對集合。

純歌詞數據集

從兩個在線來源收集純歌詞數據集:

  • Kaggle數據集,包括帶有Spotify Valence標簽的15萬首歌曲的歌詞。

  • Music Lyric Chatbot數據集,包含14萬首中文歌曲的歌詞。從28.3萬首中英文歌曲中刪選而來的高質量的歌詞。

純旋律數據集

為了將旋律數據集組織成基于文本的結構,使用MIDI文件作為純旋律數據集,其結構簡單,能夠在沒有復雜音頻處理的情況下高效提取和操作旋律。

使用pretty midi解析MIDI文件,僅從中提取“旋律”或“人聲”軌道,由于MIDI中的旋律被表示為隨時間推移的一系列音符,每個音符具有特定的音高、開始和結束時間戳,最終獲得一個旋律屬性三元組列表,包括{音符音高、音符持續時間、休止符持續時間}。

其中約4.5萬條條目來自LMD-matched MIDI數據集,約8萬條來自網絡爬蟲。再進行必要的數據過濾以刪除重復和質量不佳的樣本,最終剩下大約2萬個MIDI樣本。

配對歌詞-旋律數據集

大量歌詞和旋律配對數據對于訓練LLM進行歌曲創作非常重要。但是歌曲與旋律的對齊非常困難,需要詳細的注釋和特定的專業知識。它包括確保歌詞與一個或多個旋律音符精確匹配,并標注精確的時間戳,如下圖所示:

本文利用了來自LMD-full數據集的7,998首歌曲,以及來自Reddit數據集的4,199首歌曲。此外,還結合了OpenCpop數據集其中100首中文流行歌曲,以及M4Singer數據集其中700首高質量中文歌曲。

為了進一步豐富配對歌詞-旋律數據,本文還抓取網絡信息創建了一個包含4,000首經典中文歌曲的數據集。收集歌詞-旋律數據的流程如下圖所示:

  1. 數據來源爬取:搜集大量的mp3文件及其對應的歌詞文件,包括句級別的時間戳。

  2. 歌詞清理:使用GPT-4清理歌詞文本中的不相關細節,如歌曲標題、藝術家姓名和制作信息。

  3. 分段切片:為了減輕長時間對齊的挑戰和誤差積累,根據歌詞文件中提供的時間戳將音頻和歌詞切片為大約10秒的配對段落(每個段落大約三句)。

  4. 音樂源分離:利用UVR4這個公開的音樂分離工具,從原始音頻中分離人聲和伴奏部分。

  5. 歌聲轉錄:使用數字音頻工作站軟件FL Studio5自動生成初步的樂譜,捕捉每個音符的音高和起始-結束時間。

  6. 詞邊界注釋:通過Pypinyin6將歌詞轉換為音素序列,然后利用音頻對齊工具——Montreal Forced Aligner獲取歌詞中每個詞語的邊界。

  7. 詞級別對齊:利用動態時間扭曲(DTW)算法,根據起始-結束時間對單詞和音符進行對齊。

最后,本文開發了一個包含約15K個配對歌詞-旋律條目的數據集,其中約5K首為中文,10K首為英文。

SongComposer

LLM友好的歌曲表示

元組數據格式

為了將歌詞和旋律輸入到LLM中,一個直觀的策略是按順序排列它們,從一系列歌詞開始,然后是一系列音符值和時長。然而,由于其順序化方法,模型很難對齊歌詞和旋律,導致產生不對齊的輸出。

作者提出了一種統一的輸入組織方式,利用基于元組的格式,其中每個元組代表一個離散的音樂單元,可以是一個歌詞,一個旋律,或者一個歌詞-旋律對。

具體來說,在純歌詞數據的情況下,在每個元組中插入一個單詞。對于純旋律,在每個元組中包括音調、音符時長和休息時長。對于歌詞-旋律對,將歌詞和相應的音符元素合并在同一個元組內。由于一個單詞可以對應多個音符,一個單元組可能包含一個單詞以及多個音符和它們各自的時長。使用豎線(|)來分隔不同的元組,并將元組序列作為LLM的輸入,如下圖所示。

這種元組格式明確地為模型提供了歌詞和旋律之間的相互映射,有助于掌握元素之間的對應關系。

離散化時長

為了有效處理旋律中的時長信息,采用對數編碼方案將時長分為預定義數量的bin,將連續的時長范圍轉換為一組離散值。這種為LLM提供的組織良好且簡潔的輸入增強了模型捕捉音樂內容的精確時間變化的能力。

具體來說,根據時長的統計分布,將它們截取到 [xmin, xmax]。對于任意時長x,編碼過程定義如下:

設置 [xmin, xmax] = [-0.3, 6],bins = 512,? = 1,這使得時長可編碼為512個離散整數,最高可達6.3秒。相反,要將離散化值解碼為原始時長:

詞匯擴展

為了確保清晰度,通過引入由???符號表示的輔助標記,針對離散化的時間單位和音符值在模型詞匯中推廣表示形式。對于時間離散化,擴展了512個獨特token,表示為。對于音樂音符的表示,標記了十個八度內的12個音高類別,從而添加了120個不同的音樂token。

兩階段訓練

預訓練階段

為了豐富LLM的基礎音樂知識,首先在大量純歌詞和純旋律的語料庫上對模型進行預訓練。

對于旋律,采用音高移調來增強數據集。具體來說,將音高移動高低四個半音,從而將數據集擴大了九倍。

對于歌詞將整首歌曲的數據拆分成基于句子的樣本,每個樣本包含五到十行。這種制定使得模型能夠獲得更加專注和相關的學習上下文,有助于更連貫地生成歌曲。

通過這種純歌詞和旋律的訓練過程,模型已經獲得了扎實的音樂知識基礎,為更加關注歌詞和旋律之間對應關系的高級學習奠定了堅實基礎。隨后,使用配對數據引導模型生成對齊的歌詞-旋律對。根據經驗,為了保留模型處理旋律和歌詞的能力,以1:1:1樣本比例向模型輸入相等數量的純旋律、純歌詞和配對數據。

總共有0.23B個歌詞tokens、0.28B個旋律tokens和0.16B個配對數據tokens。所有數據都是使用元組數據格式輸入的。

監督微調階段

在將大量樂譜和歌詞引入模型后,為歌曲生成制作指令遵循數據,包括給定歌詞創建旋律、為旋律寫歌詞、擴展歌曲部分以及根據文本描述生成歌曲。其中,為前三個任務手動準備了3K個問答對。對于最后一個任務,使用GPT-4生成了1K首歌曲摘要,這些摘要又形成了一個文本到歌曲的數據集,指導了歌曲創作過程。

客觀評價指標

本文還構建了一個包含1188首歌曲的驗證集。其中,415首是中文歌曲,773首是英文歌曲。在后續測試中,將一些歌曲隨機分割成5至10個句子。客觀評估的重點是評估生成的輸出與真實樣本之間的相似性。

旋律生成

對于旋律評估,采用了SongMASS(提出的度量標準。其中包括音高分布相似度(PD)、時長分布相似度(DD)和旋律距離(MD)。由于與SongMASS相比的校準策略的不同,通過加法對齊ground truth和生成音符的平均音高。

歌詞生成

在歌詞生成方面,使用CoSENT模型,評估句子級別的對齊。該模型允許輸入歌詞,并計算生成歌詞與原始歌詞之間的余弦相似性。此外,結合ROUGE-2分數和BERT分數作為另外兩個用于評估歌詞生成的度量標準。ROUGE-2分數關注生成文本和原始文本之間的二元組重疊。BERT分數利用BERT-base multilingual uncased 模型基于上下文嵌入來衡量文本相似度。

主觀評價指標

選取30名參與者對每個任務中有10個案例進行評價。評分范圍為1到5,得分越高表示質量更高。

歌詞到旋律生成

歌詞到旋律生成要求根據給定的歌詞創作出一段合適的旋律。對旋律進行評估包括:(1)和聲(HMY.):評估旋律的整體質量。

(2)旋律-歌詞兼容性(MLC.):檢查生成的旋律與給定歌詞之間的契合程度。

旋律到歌詞生成

旋律到歌詞生成旨在產生與提供的旋律相匹配的歌詞。對歌詞進行評估包括:(1)流暢性(FLN.):考慮生成歌詞的語法正確性和語義連貫性。

(2)旋律-歌詞兼容性(MLC.):檢查生成歌詞與給定旋律的契合程度。

歌曲延續性

歌曲延續涉及在旋律和歌詞方面延長已有歌曲的部分。評估延續的質量包括:(1)整體質量(OVL.):衡量生成歌曲的整體質量,以其音樂吸引力為標準。(2)與歌曲提示的一致性(COH.):分析延續與提供的歌曲提示之間的自然融合,評估旋律、歌詞和其他音樂元素的連貫性。

文本到歌曲生成

歌曲延續根據文本描述生成完整的歌曲,以音樂和歌詞的形式捕捉其本質。評估重點包括:(1)整體質量(OVL.):衡量生成歌曲的整體質量,以其音樂吸引力為標準。(2)與文本輸入相關性(REL.):檢查生成歌曲與輸入文本的對齊度和相關性。

實驗結果

歌詞到旋律生成

如上表所示,該方法在調性分布相似度(PD)和時長分布相似度(DD)方面優于先進的語言模型,比GPT-4高出10個多點,并在中英雙語中實現了最低的旋律距離(MD)。

▲主觀評估

另外,在主觀評估中發現SongComposer在和聲和旋律-歌詞的搭配方面比GPT-3.5和GPT-4要好很多。這意味SongComposer更擅長讓歌詞和旋律相互配合得更好,讓整首歌聽起來更和諧。

旋律至歌詞生成

該方法在生成與原始歌詞緊密匹配的歌詞方面非常有效。主觀評估顯示,用戶們一致認為SongComposer在產生歌詞方面非常流暢且與旋律高度相關,能夠有效地捕捉并補充底層旋律的節奏。

歌曲延續

SongComposer不僅能夠獨立產出高質量的歌詞和旋律,還能夠將它們結合起來,使整首歌聽起來更和諧。

文本至歌曲生成

在文本至歌曲生成的主觀評估中,SongComposer可以根據文本提示創作出旋律優美、主題和情感完美契合的歌曲。

消融實驗

在消融研究中本文報告了針對歌詞到旋律和旋律到歌詞任務的旋律距離(MD)和BERT分數。

預訓練數據集

為了探究專門數據集對模型學習的影響,作者使用了不同純歌詞和純旋律數據集的配對數據進行訓練實驗,結果如下表所示:

研究結果顯示,如果省略了純歌詞和純旋律的數據集,模型的性能會明顯下降。這表明在訓練的早期階段,基礎旋律和抒情知識的重要性。純歌詞數據集主要提高了旋律到歌詞任務的性能,而純旋律數據集則更明顯地提高了旋律生成的水平。而結合歌詞和旋律數據集能夠帶來最佳的效果。

旋律知識的擴展詞匯

為了了解專門用于旋律知識的標記是否有利于SongComposer的性能,本文對不同的標記組合進行了消融,評估它們對模型處理和生成音樂內容的影響,如下表所示:

首先,在時長標記方面,直接將原始基于浮點數的秒數輸入到SongComposer中,而非應用離散數字。缺乏特殊時間標記將導致模型無法為歌詞到旋律任務生成正確結果。

相反,引入離散時長標記顯著提高了旋律到歌詞任務的表現,無論是否引入音符標記,BERT分數都提高了超過0.03。這驗證了時長離散化對掌握旋律結構的重要性。

其次,采用音符標記在兩個任務中都帶來了顯著改進,使用音符標記有助于模型更好地理解音符的含義,并提高了學習的效果。

結論

SongComposer利用符號化的歌曲表示法來生成旋律和歌詞,在各種任務中表現出色,如將歌詞轉換為旋律、旋律生成歌詞、歌曲延續和基于文本描述的歌曲創作,甚至在性能上超越了像GPT-4這樣的先進LLM模型。

相信SongComposer可以為LLM在音樂領域的創意應用開辟新的途徑。

公眾號「夕小瑤科技說」后臺回復“SongComposer”獲取論文PDF!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712489.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712489.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712489.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

自測-1 打印沙漏

文章預覽: 題目算法代碼 題目 算法 以前做過這個,那次是c語言寫的,一點一點處理一層一層完成,這次我換了一種語言用了另一種思想使用遞歸去寫,還是我們要先求出應該有多少層這個很容易,中間輸出部分我們算…

常見查找算法Java實現

順序&#xff08;線性&#xff09;查找二分查找/折半查找插值查找斐波那契查找 線性查找 判斷數列是否包含要求&#xff0c;如果找到了&#xff0c;就提示找到了&#xff0c;并給出下標值 // 線性查找 public static ArrayList<Integer> seqSearch(int[] arr, int value…

解決 npm install 報錯的問題

在使用 npm 安裝依賴包時&#xff0c;有時候會遇到各種報錯問題&#xff0c;以下是一些常見的報錯及解決方法&#xff1a; 1. ENOENT: no such file or directory 如果出現類似 ENOENT: no such file or directory 的報錯&#xff0c;可能是因為某些文件或目錄缺失或路徑錯誤…

動態規劃課堂3-----簡單多狀態問題(買賣股票最佳時機)

目錄 引入&#xff1a; 例題1&#xff1a;按摩師&#xff08;打家劫舍I&#xff09; 例題2&#xff1a;打家劫舍II 例題3&#xff1a;刪除并獲得點數 例題4&#xff1a;粉刷房子 例題5&#xff1a;買賣股票的最佳時機含冷凍 結語&#xff1a; 引入&#xff1a; 相信看到…

深度學習 精選筆記(8)梯度消失和梯度爆炸

學習參考&#xff1a; 動手學深度學習2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、請聯系侵刪。 ②已寫完的筆記文章會不定時一直修訂修改(刪、改、增)&#xff0c;以達到集多方教程的精華于一文的目的。 ③非常推薦上面&#xff08;學習參考&#x…

帶你快速初步了解Python列表

1.列表 列表主要是用來存儲多個數據&#xff0c;是有序的集合 2.創建列表 """ 語法&#xff1a;變量名 [數據1,數據2,數據3......] 注意&#xff1a;列表中的數據類型可以是各種不同的數據類型 """ 創建空列表 list1 [] print(list1) …

Gitlab: 私有化部署

目錄 1. 說明 2. 資源要求 3. 安裝 4. 配置實踐 4.1 服務器 4.2 人員與項目 4.2 部署準備 4.2.1 訪問變量及用戶賬號設置 4.2.2 Runner設置 4.2.3 要點 5. 應用項目 CI/CD 6. 參考 1. 說明 gitlab是一個強大且免費的代碼管理/部署工具&#xff0c;能統一集成代碼倉…

AngularJS入門

1. AngularJS簡介 AngularJS是一個JavaScript框架,用js編寫的庫 <script src="https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js"></script> <!-- 放在<body> 元素的底部。提高網頁加載速度 -->1.1. AngularJS 擴展了 HTML …

Freesia項目目錄結構

目錄結構 前端目錄&#xff1a; &#xff08;目錄結構來自layui-vue-admin&#xff09; src文件下 api&#xff08;前端請求后端服務的路由&#xff09;assert&#xff08;一些內置或必要的資源文件&#xff09;layouts&#xff08;全局框架樣式組件&#xff09;router&…

Unity(第十九部)射線

在Unity中&#xff0c;射線檢測通常用于碰撞檢測&#xff0c;比如&#xff1a;在游戲中&#xff0c;開槍射擊時&#xff0c;需要判斷擊中的物體、子彈擊中的位置&#xff1b;用鼠標來控制物體的移動&#xff1b;用鼠標拾取某個物體。 射線&#xff0c;顧名思義&#xff0c;在數…

【轉載】深度學習筆記——詳解損失函數

原文鏈接: https://blog.csdn.net/weixin_53765658/article/details/136360033 CSDN賬號: Purepisces github賬號: purepisces 希望大家可以Star Machine Learning Blog https://github.com/purepisces/Wenqing-Machine_Learning_Blog 損失函數 根據您使用的神經網絡類型和數…

第四十七回 一丈青單捉王矮虎 宋公明二打祝家莊-強大而靈活的python裝飾器

四面全是埋伏&#xff0c;宋江和眾人一直繞圈跑不出去。正在慌亂之時&#xff0c;石秀及時趕到&#xff0c;教大家碰到白楊樹就轉彎走。走了一段時間&#xff0c;發現圍的人越來越多&#xff0c;原來祝家莊以燈籠指揮號令。花榮一箭射下來紅燈龍&#xff0c;伏兵自己就亂起來了…

Northwestern University-844計算機科學與技術/軟件工程-復試注意事項【考研復習】

本文提到的西北大學是位于密歇根湖泊畔的西北大學。西北大學&#xff08;英語&#xff1a;Northwestern University&#xff0c;簡稱&#xff1a;NU&#xff09;是美國的一所著名私立研究型大學。它由九人于1851年創立&#xff0c;目標是建立一所為西北領地地區的人服務的大學。…

【力扣白嫖日記】550.游戲玩法分析IV

前言 練習sql語句&#xff0c;所有題目來自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免費數據庫練習題。 今日題目&#xff1a; 550.游戲玩法分析IV 表&#xff1a;Activity 列名類型player_idintdevice_idintevent_datedategames_played…

從 iOS 設備恢復數據的 20 個iOS 數據恢復工具

作為 iPhone、iPad 或 iPod 用戶&#xff0c;您可能普遍擔心自己可能會丟失存儲在珍貴 iOS 設備中的所有寶貴數據。數據丟失的原因多種多樣&#xff0c;這里列出了一些常見原因&#xff1a; 1. iOS 軟件更新 2. 恢復出廠設置 3. 越獄 4. 誤操作刪除數據 5. iOS 設備崩潰 …

C++筆記(五)--- 虛函數(virtual)

目錄 虛函數介紹 虛函數、覆蓋和重載區別 虛函數介紹 C的虛函數是多態性的表現 1.構造函數不能為虛函數2.子類繼承時虛函數仍為虛函數3.虛函數類外實現時&#xff0c;不需要加virtual4.有虛函數的類&#xff0c;析構函數一定要寫成虛函數&#xff08;否則可能會造成內存泄漏&…

【代碼隨想錄python筆記整理】第十六課 · 出現頻率最高的字母

前言:本筆記僅僅只是對內容的整理和自行消化,并不是完整內容,如有侵權,聯系立刪。 一、哈希表初步 在之前的學習中,我們使用數組、字符串、鏈表等等,假如需要找到某個節點,則都要從頭開始,逐一比較,直到找到為止。為了能夠直接通過要查找的記錄找到其存儲位置,我們選…

設備像素、css像素、設備獨立像素、dpr、ppi 之間的區別

設備像素、CSS 像素、設備獨立像素 (DIP)、設備像素比 (DPR) 和每英寸像素密度 (PPI) 是與屏幕分辨率和顯示質量相關的概念。它們之間的區別如下&#xff1a; 設備像素&#xff1a;設備像素是物理屏幕上的最小可見單元&#xff0c;用于實際渲染圖像或文本。它表示硬件像素點的數…

、JMETER與它的組件們

os進程取樣器 這個取樣器可以讓jmeter直接調用python寫的測試數據 這樣就可以調用python寫的測試數據給到jmeter進行調用 注意&#xff1a;1建議python返回轉json格式dumps一下&#xff1b;2py文件中需要把結果打印出來&#xff0c;可以不用函數直接編寫 傳到jmeter之后可以用…

你真的了解C語言中的【柔性數組】嗎~

柔性數組 1. 什么是柔性數組2. 柔性數組的特點3. 柔性數組的使用4. 柔性數組的優勢 1. 什么是柔性數組 也許你從來沒有聽說過柔性數組這個概念&#xff0c;但是它確實是存在的。 C99中&#xff0c;結構體中的最后?個元素允許是未知大小的數組&#xff0c;這就叫做柔性數組成員…