OpenAI Jukebox

OpenAI Jukebox 是一個神經網路,能以原始音訊的形式生成音樂,實現各種流派和藝術家風格的合成,包括初步的歌唱。與產生類似 MIDI 音符的符號音樂生成器不同,Jukebox 直接對音訊進行建模,使其能夠捕捉人類聲音和複雜的音色。

技術方法:分層壓縮與生成

Jukebox 透過使用分層自動編碼器和基於 Transformer 的先驗模型,克服了對原始音訊建模的挑戰——四分鐘的 CD 品質歌曲包含超過 1000 萬個時間步長。

透過 VQ-VAE 進行原始音訊壓縮

Jukebox 使用向量量化變分自動編碼器 (VQ-VAE) 將 44kHz 的原始音訊壓縮到離散的潛在空間中。該模型採用三個壓縮層級(8x、32x 和 128x),每個層級的碼本 (codebook) 大小為 2048。為了提高性能,OpenAI 實施了三項特定修改:

  • Random Restarts: 為了防止碼本崩潰,如果碼本向量的使用率低於特定閾值,則會將其隨機重置為編碼後的隱藏狀態。
  • Separate Decoders: 每個層級都使用獨立的解碼器來重建輸入,以最大化高層級的效用。
  • Spectral Loss: 加入了頻譜損失函數來懲罰輸入與重建頻譜圖之間的差異,有助於高頻部分的重建。

透過 Sparse Transformers 進行音樂生成

一旦音訊被壓縮,三個層級的自回歸先驗模型(基於 Sparse Transformers 的簡化變體)會學習這些代碼的分布:

  • Top-level Prior: 在 8,192 個代碼(約 24 秒音訊)的上下文範圍內,對長程結構和高層級語義(旋律和歌唱)進行建模。
  • Upsampling Priors: 隨後的兩個層級會增加局部音樂結構和音色,在較短的上下文(分別為 6 秒和 1.5 秒)中細化音訊品質。

條件控制與數據集

Jukebox 是在一個包含 120 萬首歌曲的精選數據集中訓練的,其中包括 60 萬首英文歌曲,並配有來自 LyricWiki 的元數據和歌詞。該模型支持三種類型的條件控制來引導生成:

  • Artist and Genre: 透過提供藝術家和流派標籤,模型可以降低預測熵並生成特定風格的音樂。無監督聚類(透過 t-SNE)顯示模型會自然地將相似的藝術家和流派歸類在一起。
  • Lyrics: 為了處理未對齊的歌詞,Jukebox 使用線性對齊啟發式算法,對於像 hip hop 這樣較快的流派,則使用 Spleeter 提取人聲並使用 NUS AutoLyricsAlign 進行詞級對齊。編碼器-解碼器注意力層允許音樂解碼器關注歌詞編碼器。

目前的局限性

儘管具備這些能力,與人類創作的音樂相比,Jukebox 仍存在幾項技術和創意上的差距:

  • 缺乏大規模結構: 雖然存在局部連貫性和和弦模式,但模型尚未生成像副歌那樣重複的大規模結構。
  • Audio Artifacts: 下採樣和上採樣過程會引入可察覺的噪聲。
  • Sampling Speed: 由於其自回歸特性,模型速度很慢;渲染一分鐘的音訊大約需要 9 小時。
  • Dataset Bias: 訓練目前主要受限於英文歌詞和西方音樂。

開發時間線

  • July 2019: 最初開發的原始音訊模型用於重現鋼琴和提琴等樂器。
  • September 2019: 擴展了帶有藝術家和流派標籤的數據集,實現了具有長程連貫性的全長歌曲。
  • January 2020: 將 VQ-VAE 擴展到 44kHz,並將 top-level prior 從 1B 參數擴展到 5B 參數,從而實現了更清晰的歌唱和更高的品質。
  • January 2020: 引入了歌詞條件控制以學習發音和歌唱對齊。

Sources