MuseNet

Am creat MuseNet, o rețea neuronală profundă care poate genera compoziții muzicale de 4 minute cu 10 instrumente diferite și poate combina stiluri de la country, la Mozart și Beatles. MuseNet nu a fost programată în mod explicit cu înțelegerea noastră despre muzică, ci a descoperit tipare de armonie, ritm și stil învățând să prezică următorul token în sute de mii de fișiere MIDI. MuseNet utilizează aceeași tehnologie nesupravegheată de uz general ca și GPT-2, un model de transformare pe scară largă antrenat pentru a prezice următorul token dintr-o secvență, fie ea audio sau text.

Eșantioane

Din moment ce MuseNet cunoaște multe stiluri diferite, putem amesteca generații în moduri inedite. Aici modelului i se dau primele 6 note ale unei Nocturne de Chopin, dar i se cere să genereze o piesă într-un stil pop cu pian, tobe, bas și chitară. Modelul reușește să îmbine cele două stiluri în mod convingător, cu întreaga formație care se alătură în jurul valorii de 30 de secunde:

Încercați MuseNet

Suntem încântați să vedem cum muzicienii și non-muzicienii deopotrivă vor folosi MuseNet pentru a crea noi compoziții!

În modul simplu (afișat în mod implicit), veți auzi mostre aleatorii necurajate pe care le-am generat în prealabil. Alegeți un compozitor sau un stil, un început opțional al unei piese celebre și începeți să generați. Acest lucru vă permite să explorați varietatea de stiluri muzicale pe care modelul le poate crea. În modul avansat, puteți interacționa direct cu modelul. Finalizările vor dura mai mult, dar veți crea o piesă complet nouă.

Câteva dintre limitările MuseNet includ:

  • Instrumentele pe care le cereți sunt sugestii puternice, nu cerințe. MuseNet generează fiecare notă prin calcularea probabilităților între toate notele și instrumentele posibile. Modelul se deplasează pentru a face ca alegerile dvs. de instrumente să fie mai probabile, dar există întotdeauna o șansă ca acesta să aleagă altceva.
  • MuseNet se descurcă mai greu cu perechile ciudate de stiluri și instrumente (cum ar fi Chopin cu bas și tobe). Generațiile vor fi mai naturale dacă alegeți instrumentele cele mai apropiate de stilul obișnuit al compozitorului sau al trupei.

Compozitor și jetoane de instrumentație

Am creat jetoane de compozitor și de instrumentație pentru a oferi mai mult control asupra tipurilor de mostre pe care MuseNet le generează. În timpul antrenamentului, aceste token-uri de compozitor și de instrumentație au fost adăugate înainte de fiecare eșantion, astfel încât modelul să învețe să utilizeze aceste informații pentru a face predicții de note. În momentul generării, putem apoi condiționa modelul să creeze eșantioane într-un stil ales, pornind de la o solicitare, cum ar fi un început de pian Rachmaninoff:

Sau o solicitare cu trupa Journey, cu pian, bas, chitară și tobe:

Potem vizualiza încorporările de la MuseNet pentru a obține o perspectivă asupra a ceea ce a învățat modelul. Aici folosim t-SNE pentru a crea o hartă bidimensională a similarității cosinusului diferitelor încorporări de compozitori și stiluri muzicale.

Treceți peste un anumit compozitor sau stil pentru a vedea cum se raportează la altele.

Structura pe termen lung

MuseNet utilizează recomputerea și nucleele optimizate ale Sparse Transformer pentru a antrena o rețea cu 72 de straturi cu 24 de capete de atenție – cu atenție deplină asupra unui context de 4096 de simboluri. Acest context lung poate fi unul dintre motivele pentru care este capabilă să rețină structura pe termen lung într-o piesă, ca în următorul eșantion care imită Chopin:

De asemenea, poate crea structuri melodice muzicale, ca în acest eșantion care îl imită pe Mozart:

Generația muzicală este un domeniu util pentru testarea Sparse Transformer, deoarece se situează pe o poziție de mijloc între text și imagini. Are structura fluidă de token-uri a textului (în imagini puteți să vă uitați înapoi la N token-uri și să găsiți rândul de deasupra, în timp ce în muzică nu există un număr fix pentru a vă uita înapoi la măsura anterioară). Cu toate acestea, putem auzi cu ușurință dacă modelul captează o structură pe termen lung de ordinul sutelor sau miilor de simboluri. Este mult mai evident dacă un model muzical încurcă structura prin schimbarea ritmului, într-un mod în care este mai puțin clar dacă un model de text intră pe o scurtă tangentă.

Dataset

Am colectat date de antrenament pentru MuseNet din mai multe surse diferite. ClassicalArchives și BitMidi au donat colecțiile lor mari de fișiere MIDI pentru acest proiect și am găsit, de asemenea, mai multe colecții online, inclusiv stiluri de jazz, pop, africane, indiene și arabe. În plus, am folosit setul de date MAESTRO.

Transformatorul este antrenat pe date secvențiale: dat fiind un set de note, îi cerem să prezică nota următoare. Am experimentat mai multe moduri diferite de a codifica fișierele MIDI în token-uri adecvate pentru această sarcină. În primul rând, o abordare în funcție de acord care a considerat fiecare combinație de note care sună la un moment dat ca un „acord” individual și a atribuit un token fiecărui acord. În al doilea rând, am încercat să condensăm modelele muzicale concentrându-ne doar pe începuturile notelor și am încercat să comprimăm și mai mult acest lucru folosind o schemă de codificare a perechilor de octeți.

Am încercat, de asemenea, două metode diferite de marcare a trecerii timpului: fie jetoane care au fost scalate în funcție de tempo-ul piesei (astfel încât jetoanele să reprezinte un timp muzical sau o fracțiune de timp), fie jetoane care au marcat timpul absolut în secunde. Am ajuns la o codificare care combină expresivitatea cu concizia: combinarea informațiilor despre intonație, volum și instrument într-un singur 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
Codarea eșantionului care combină intonația, volumul și instrumentul.

În timpul antrenamentului, noi:

  1. Transpunem notele prin ridicarea și coborârea intonațiilor (mai târziu, în timpul antrenamentului, reducem cantitatea de transpoziție, astfel încât generațiile să rămână în intervalele individuale ale instrumentelor).
  2. Augmentați volumele, mărind sau reducând volumele generale ale diverselor eșantioane.
  3. Augmentați sincronizarea (atunci când se utilizează codificarea timpului absolut în secunde), încetinind sau accelerând efectiv ușor piesele.
  4. Utilizați mixup pe spațiul de încorporare a tokenurilor

Creăm, de asemenea, un critic interior: modelului i se cere, în timpul antrenamentului, să prezică dacă un anumit eșantion provine cu adevărat din setul de date sau dacă este unul din generațiile anterioare ale modelului. Acest scor este utilizat pentru a selecta eșantioane în momentul generării.

Embeddings

Am adăugat mai multe tipuri diferite de embeddings pentru a oferi modelului un context structural mai mare. În plus față de încorporările poziționale standard, am adăugat o încorporare învățată care urmărește trecerea timpului într-un eșantion dat. În acest fel, toate notele care sună în același timp primesc aceeași încorporare temporală. Adăugăm apoi un embedding pentru fiecare notă dintr-un acord (acest lucru imită atenția relativă, deoarece modelului îi va fi mai ușor să învețe că nota 4 trebuie să se uite înapoi la nota 3, sau altfel la nota 4 din acordul anterior). În cele din urmă, adăugăm două incluziuni structurale care indică modelului unde se află un anumit eșantion muzical în cadrul piesei muzicale mai mari. Una dintre încorporări împarte piesa mai mare în 128 de părți, în timp ce a doua codificare este o numărătoare inversă de la 127 la 0 pe măsură ce modelul se apropie de simbolul (final).

Suntem încântați să auzim ce creează oamenii! Dacă creați o piesă care vă place, o puteți încărca pe un serviciu gratuit cum ar fi Instaudio și apoi să ne trimiteți un tweet cu link-ul (demo-ul MuseNet are un buton de tweet pentru a vă ajuta în acest sens).

Dacă sunteți interesat să aflați mai multe despre activitatea de muzică a OpenAI, luați în considerare posibilitatea de a aplica pentru a vă alătura echipei noastre. Vă rugăm să nu ezitați să ne trimiteți un e-mail cu sugestii pentru demo-ul MuseNet. De asemenea, ne-ar plăcea să ne contactați dacă sunteți interesat să compuneți cu MuseNet mai în profunzime sau dacă aveți fișiere MIDI pe care ați dori să le adăugați la setul de antrenament.

MuseNet a susținut un concert experimental pe 25 aprilie 2019, transmis în direct pe canalul Twitch al OpenAI, în care niciun om (inclusiv noi) nu auzise piesele înainte.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.