MuseNet

Abbiamo creato MuseNet, una rete neurale profonda che può generare composizioni musicali di 4 minuti con 10 strumenti diversi, e può combinare stili dal country a Mozart ai Beatles. MuseNet non è stato programmato esplicitamente con la nostra comprensione della musica, ma ha invece scoperto modelli di armonia, ritmo e stile imparando a prevedere il prossimo token in centinaia di migliaia di file MIDI. MuseNet usa la stessa tecnologia generale non supervisionata di GPT-2, un modello di trasformazione su larga scala addestrato a prevedere il prossimo token in una sequenza, sia essa audio o testo.

Campioni

Siccome MuseNet conosce molti stili diversi, possiamo mescolare le generazioni in modi nuovi. Qui al modello vengono date le prime 6 note di un Notturno di Chopin, ma gli viene chiesto di generare un pezzo in stile pop con pianoforte, batteria, basso e chitarra. Il modello riesce a fondere i due stili in modo convincente, con l’intera band che si unisce a circa 30 secondi:

Prova MuseNet

Siamo entusiasti di vedere come musicisti e non musicisti useranno MuseNet per creare nuove composizioni!

In modalità semplice (mostrata di default), sentirai campioni casuali non curati che abbiamo pre-generato. Scegli un compositore o uno stile, un inizio opzionale di un pezzo famoso, e inizia a generare. Questo ti permette di esplorare la varietà di stili musicali che il modello può creare. In modalità avanzata è possibile interagire direttamente con il modello. I completamenti richiederanno più tempo, ma creerai un pezzo completamente nuovo.

Alcuni limiti di MuseNet includono:

  • Gli strumenti che chiedi sono suggerimenti forti, non requisiti. MuseNet genera ogni nota calcolando le probabilità su tutte le possibili note e strumenti. Il modello si sposta per rendere le tue scelte di strumenti più probabili, ma c’è sempre una possibilità che scelga qualcos’altro.
  • MuseNet ha un tempo più difficile con accoppiamenti strani di stili e strumenti (come Chopin con basso e batteria). Le generazioni saranno più naturali se si scelgono gli strumenti più vicini allo stile abituale del compositore o della band.

Kens compositore e strumentazione

Abbiamo creato i token compositore e strumentazione per dare più controllo sui tipi di campioni che MuseNet genera. Durante l’addestramento, questi token per il compositore e la strumentazione sono stati aggiunti ad ogni campione, in modo che il modello imparasse ad usare queste informazioni nel fare le previsioni delle note. Al momento della generazione, possiamo quindi condizionare il modello a creare campioni in uno stile scelto iniziando con un prompt come un inizio di piano di Rachmaninoff:

Ovvero un prompt con la band Journey, con piano, basso, chitarra e batteria:

Possiamo visualizzare le embeddings da MuseNet per ottenere una visione di ciò che il modello ha imparato. Qui usiamo t-SNE per creare una mappa 2-D della somiglianza del coseno di vari compositori e stili musicali.

Passa sopra un compositore o uno stile specifico per vedere come si relaziona con gli altri.

Struttura a lungo termine

MuseNet usa la ricomputazione e i kernel ottimizzati di Sparse Transformer per addestrare una rete a 72 strati con 24 teste di attenzione – con piena attenzione su un contesto di 4096 token. Questo lungo contesto può essere uno dei motivi per cui è in grado di ricordare la struttura a lungo termine di un brano, come nel seguente esempio che imita Chopin:

Può anche creare strutture melodiche musicali, come in questo esempio che imita Mozart:

La generazione musicale è un dominio utile per testare lo Sparse Transformer in quanto si trova su una terra di mezzo tra testo e immagini. Ha la struttura a token fluida del testo (nelle immagini si può guardare indietro di N token e trovare la riga superiore, mentre nella musica non c’è un numero fisso per guardare indietro alla misura precedente). Eppure possiamo facilmente sentire se il modello sta catturando una struttura a lungo termine dell’ordine di centinaia o migliaia di token. È molto più ovvio se un modello musicale incasina la struttura cambiando il ritmo, in un modo in cui è meno chiaro se un modello di testo va su una breve tangente.

Dataset

Abbiamo raccolto dati di allenamento per MuseNet da molte fonti diverse. ClassicalArchives e BitMidi hanno donato le loro grandi collezioni di file MIDI per questo progetto, e abbiamo anche trovato diverse collezioni online, tra cui jazz, pop, stili africani, indiani e arabi. Inoltre, abbiamo usato il dataset MAESTRO.

Il trasformatore è addestrato su dati sequenziali: dato un insieme di note, gli chiediamo di prevedere la nota successiva. Abbiamo sperimentato diversi modi per codificare i file MIDI in token adatti a questo compito. In primo luogo, un approccio corale che considerava ogni combinazione di note che suonavano in un momento come un “accordo” individuale, e assegnava un token ad ogni accordo. In secondo luogo, abbiamo provato a condensare gli schemi musicali concentrandoci solo sulle partenze delle note, e abbiamo provato a comprimere ulteriormente ciò usando uno schema di codifica a coppie di byte.

Abbiamo anche provato due diversi metodi per marcare il passaggio del tempo: o gettoni che erano scalati secondo il tempo del brano (in modo che i gettoni rappresentassero un battito musicale o una frazione di battito), o gettoni che segnavano il tempo assoluto in secondi. Siamo approdati a una codifica che combina l’espressività con la concisione: combinando le informazioni su altezza, volume e strumento in un singolo token.

bach piano_strings start tempo90 piano:v72:G1 piano:v72:G2 piano:v72:B4 piano:v72:D4 violin:v80:G4 piano:v72:G4 piano:v72:B5 piano:v72:D5 wait:12 piano:v0:B5 wait:5 piano:v72:D5 wait:12 piano:v0:D5 wait:4 piano:v0:G1 piano:v0:G2 piano:v0:B4 piano:v0:D4 violin:v0:G4 piano:v0:G4 wait:1 piano:v72:G5 wait:12 piano:v0:G5 wait:5 piano:v72:D5 wait:12 piano:v0:D5 wait:5 piano:v72:B5 wait:12
Codifica del campione che combina altezza, volume e strumento.

Durante l’allenamento, noi:

  1. Trasponiamo le note alzando e abbassando le altezze (più tardi nell’allenamento, riduciamo la quantità di trasposizione in modo che le generazioni rimangano entro le gamme dei singoli strumenti).
  2. Aumentare i volumi, alzando o abbassando i volumi complessivi dei vari campioni.
  3. Aumentare i tempi (quando si usa la codifica del tempo assoluto in secondi), rallentando o accelerando leggermente i pezzi.
  4. Utilizziamo il mixup sullo spazio di incorporazione dei token

Creiamo anche un critico interno: al modello viene chiesto durante l’addestramento di prevedere se un dato campione è veramente del dataset o se è una delle generazioni passate del modello stesso. Questo punteggio è usato per selezionare i campioni al momento della generazione.

Embeddings

Abbiamo aggiunto diversi tipi di embeddings per dare al modello un contesto più strutturale. Oltre alle incorporazioni posizionali standard, abbiamo aggiunto un’incorporamento appreso che segue il passaggio del tempo in un dato campione. In questo modo, tutte le note che suonano nello stesso momento ricevono la stessa incorporazione temporale. Aggiungiamo poi un’incorporazione per ogni nota in un accordo (questo imita l’attenzione relativa, poiché sarà più facile per il modello imparare che la nota 4 deve guardare indietro alla nota 3, o alla nota 4 dell’accordo precedente). Infine, aggiungiamo due incorporazioni strutturali che dicono al modello dove si trova un dato campione musicale all’interno del pezzo musicale più grande. Una embedding divide il pezzo più grande in 128 parti, mentre la seconda codifica è un conto alla rovescia da 127 a 0 man mano che il modello si avvicina al token (finale).

Siamo entusiasti di sentire cosa creano le persone! Se crei un pezzo che ti piace, puoi caricarlo su un servizio gratuito come Instaudio e poi twittarci il link (la demo di MuseNet ha un pulsante tweet per aiutarci in questo).

Se sei interessato a saperne di più sul lavoro musicale di OpenAI, considera la possibilità di unirti al nostro team. Sentiti libero di mandarci un’email con suggerimenti per la demo di MuseNet. Ci piacerebbe anche sentire da te se sei interessato a comporre con MuseNet in modo più approfondito, o se hai file MIDI che vorresti aggiungere al set di allenamento.

MuseNet ha suonato un concerto sperimentale il 25 aprile 2019, livestreamed sul canale Twitch di OpenAI, in cui nessun umano (compresi noi) aveva sentito i pezzi prima.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.