大模型學會聽音樂了!風格樂器精準分析,還能剪輯合成

騰訊pcg arc實驗室 投稿

量子位 | 公眾號 qbitai

能處理音樂的多模態大模型,終於出現了!

只見它準確分析出音樂的旋律、節奏,還有使用的樂器,甚至其中的意境也能解讀。

【音樂效果請移步公眾號】

而且它不僅會聽,只要給它一段文字和圖片,它就會在理解圖片意境之後,結合文字要求來創作:

【音樂效果請移步公眾號】

甚至是給靜默的視頻配上聲音:

【音樂效果請移步公眾號】

現有的音樂它也能編輯,比如從一段音樂中去除鼓的聲音

【音樂效果請移步公眾號】

以上的這些效果,都出自騰訊pcg arc實驗室新推出的基於多模態模型的音樂理解與生成框架m2ugen

它可以進行音樂理解、音樂編輯以及多模態音樂生成(文本/圖像/視頻到音樂生成)。

研究團隊在模型的五種能力上分別和現有模型進行了一一對比,並在多模態音樂生成的三個子任務上(文本/圖像/視頻到音樂生成)做了主觀評測實驗,發現m2ugen模型性能均優於現有模型。

此外,由於沒有很多合適數據集用於模型訓練,研究團隊還研發了一套數據生成方法,製作了mucaps、muedit、muimage、muvideo四個數據集並發布。

目前團隊已將模型代碼庫在github開源,並在huggingface上開放了模型權重和訓練所需數據集(需申請)。

那麼,m2ugen究竟是怎樣實現的呢?

模型共分四個模塊

m2ugen模型分為四個模塊區域,分別是多模態特徵編碼器、多模態理解適配器、橋接llm以及音樂理解與生成模塊。

下圖展示了m2ugen模型的整體框架:

多模態特徵編碼器

為了實現多模態音樂理解與生成,模型需要處理多模態輸入。

基於此,研究團隊應用了一些現有的模態編碼器,如音樂編碼器mert、圖像編碼器vit和視頻編碼器vivit。

vit和vivit是視覺領域常用的兩個基於transformer的編碼器,在現有的一些llm相關工作中經常涉及,因此開發者選用這兩個分別作為圖像和視頻編碼器。

對於音樂輸入,前序工作mu-llama證明了mert模型顯著優於其他比較的音頻/音樂編碼器,因此在m2ugen中研究團隊選用mert作為音樂輸入的編碼器。

多模態理解適配器

該模塊的主要作用是將編碼器輸出的特徵向量進行信息整合,輸入到後續的llm中和文本輸入一起控制llm的輸出。

如下圖所示,該模塊主要由1d卷積層、線性映射層和一個稠密網絡模塊(dense network)組成。

最後的稠密網絡模塊如下圖:

該模塊由三個子模塊組成,包含正則化層(nomarlization)、線性層(linear)、激活函數(silu)等組件。

該過程可由下式表示:

其中xi表示第i個子模塊之後的輸出嵌入向量,lj,i表示第i個子模塊的第j層線性層,ni表示第i個子模塊內的正則化層,silu是激活函數。

該稠密網絡設計延續自團隊的前序工作mu-llama。

在稠密網絡之後,輸出4096維的嵌入向量,提供給下游的llm使用。

橋接llm

為了將多模態上下文信息引入llm,研究者將來自相鄰上游多模態理解適配器的輸出接入到llm的指定層。

研究者採用了meta研發的llama 2模型作為底座llm,如下圖所示。

這裡選用的模型版本是llama 2 7b模型,包含n=32個隱層。

從該模型的頂層算起,每l層(l=6)引入一個模態信息,從上至下依次引入音樂、圖像和視頻模態信息,並使用零初始值注意力模塊,底部的(n-3l-1)層則採用原始的注意力模塊。

llm的文本指令從底層,也即第一層輸入。利用該技術,llm被賦予了通過其他模態信息來引導llm輸出的能力。

音樂理解與生成模塊

受next-gpt工作啟發,本模型引入了特定的音頻標記[aud],用來區分音樂問答和生成任務。

在模型訓練階段,對於以音樂作為輸出(即音樂生成任務)的訓練樣本對(如文本指令-音樂對),這些音頻標記會添加在llm輸出的末尾,用於指示下游的音樂輸出。

在模型推理階段,假如用戶輸入的指令和音樂生成有關,比如generate a music using flute(用笛子生成一段音樂),則llm的輸出會包含音頻標記,從而下游的音樂解碼器會接收該指令並生成以笛子作為演奏樂器的音樂;

反之如果llm的輸出沒有音頻標記,則表明用戶期望的是音樂理解任務,此時由llm直接回應用戶提問。

研究人員嘗試了兩種音樂解碼器——audioldm 2和musicgen,其中musicgen的音樂生成表現相較audioldm 2更好。

提出新數據集,訓練分三階段

訓練數據集

如本文研究貢獻所述,本研究構造了四組數據集mucaps、muedit、muimage和muvideo,數據樣本示例如下圖所示。

mucaps數據集

約1200小時來自audioset和一些網站的公開音樂;

利用mu-llama模型對搜集的音樂文件生成音樂註解組成音樂-文本對。

muedit數據集

從audioset構建音樂池(音樂池和mucaps不同),並篩選出約60小時相似的音樂-音樂對;

篩選條件包括速度(tempo)、beats(節拍)等,從而得到大體相似,但有一定區別的音樂-音樂對(比如使用的樂器不同);

將音樂-音樂對看作是源-目標對,將源音樂的註解文本輸入給mpt-7b[14]模型得到人類端對話,目標音樂的註解文本輸入給mpt-7b模型得到模型端對話,也即源音樂和目標音樂都得到對應指令用於模型訓練。

muimage/muvideo數據集

從audioset再另外採樣一些圖像/視頻-音樂對(和mucaps/muedit中的音樂均不同,最小化音樂重複),用blip/videomae模型對圖像/視頻做圖像/視頻註解;

將圖像/視頻+音樂的註解文本輸入到mpt-7b模型,分別得到人類端和模型端對話。

以上數據集構造腳本可參見:

https://github.com/shansongliu/m2ugen/tree/main/datasets

而m2ugen模型的訓練參考了next-gpt的訓練方式,分為三個階段,分別是編碼端訓練、解碼端訓練和編解碼聯合訓練。

階段1:編碼端訓練

該階段凍結多模態編碼器和llm,只訓練多模態理解適配器;

利用來自mucaps/coco/muvideo的音樂/圖像/視頻-文本對做階段1訓練;

訓練損失為交叉熵損失,即比較llm的輸出和目標註解文本。

階段2:解碼端訓練

這一階段不考慮編碼測(模態編碼器和適配器),凍結llm,訓練輸出映射模塊;

此階段旨在訓練llm生成指示下游音樂解碼器輸出音樂的指令,或直接根據輸入指令對輸入的音樂做問答或註解;

需要對齊的是音樂解碼器(audioldm 2/musicgen)的文本編碼器輸出和m2ugen模型輸出映射模塊產生的條件嵌入向量,即對輸出端進行對齊;

此階段在訓練時,通過添加特定的音頻標記[aud]來指示是否生成音樂。如果llm的輸出中包含[aud],則同時生成文本+音樂(音樂生成),如果不包含,則只生成文本(音樂問答);

損失函數採用交叉熵和均方誤差,其中交叉熵是比較llm輸出的音頻標記和真值音頻標記,均方誤差是比較m2ugen模型輸出映射模塊產生的條件嵌入向量和音樂解碼器的文本編碼器的輸出文本嵌入向量。

階段3:編解碼聯合訓練

該階段凍結多模態編碼器和llm,訓練多模態理解適配器和輸出映射模塊,以及llm中的lora參數;

此階段訓練時訓練數據有alpaca(通用知識)、musicqa、muimage、muvideo和muedit;

為了使模型可以同時生成音樂和文本, muimage、muvideo和muedit三個數據集在階段3訓練時llm輸出端添加了特定的音頻標記(和階段2訓練類似)。

未來,研究團隊的工作重點是進一步提升模型的細粒度音樂理解能力,並改善生成音樂與輸入指令之間的相關性,也使音樂編輯能力更加精確。

論文地址:https://arxiv.org/pdf/2311.11255.pdf