MuseNet

Vi har skapat MuseNet, ett djupt neuralt nätverk som kan generera musikaliska kompositioner på 4 minuter med 10 olika instrument och som kan kombinera stilar från country till Mozart och Beatles. MuseNet programmerades inte uttryckligen med vår förståelse av musik, utan upptäckte istället mönster av harmoni, rytm och stil genom att lära sig att förutsäga nästa token i hundratusentals MIDI-filer. MuseNet använder samma generella oövervakade teknik som GPT-2, en storskalig transformatormodell som tränats för att förutsäga nästa token i en sekvens, oavsett om det är ljud eller text.

Exempel

Då MuseNet känner till många olika stilar kan vi blanda generationer på nya sätt. Här får modellen de sex första tonerna i en Chopin Nocturne, men ombeds generera ett stycke i popstil med piano, trummor, bas och gitarr. Modellen lyckas blanda de två stilarna på ett övertygande sätt, med hela bandet som medverkar runt 30 sekunder:

Prova MuseNet

Vi är spända på att se hur både musiker och icke-musiker kommer att använda MuseNet för att skapa nya kompositioner!

I det enkla läget (som visas som standard) hör du slumpmässiga, icke-kurerade prov som vi har genererat i förväg. Välj en kompositör eller stil, en valfri start av ett känt stycke och börja generera. På så sätt kan du utforska de olika musikstilar som modellen kan skapa. I det avancerade läget kan du interagera direkt med modellen. Kompletteringarna tar längre tid, men du skapar ett helt nytt stycke.

Några av MuseNets begränsningar inkluderar:

  • Instrumenten du ber om är starka förslag, inte krav. MuseNet genererar varje not genom att beräkna sannolikheterna för alla möjliga noter och instrument. Modellen skiftar för att göra dina instrumentval mer sannolika, men det finns alltid en chans att den väljer något annat.
  • MuseNet har svårare att hantera udda kombinationer av stilar och instrument (t.ex. Chopin med bas och trummor). Generationer blir mer naturliga om du väljer instrument som ligger närmast kompositörens eller bandets vanliga stil.

Kompositörs- och instrumentationstoken

Vi skapade kompositörs- och instrumentationstoken för att ge mer kontroll över vilka typer av samplingar MuseNet genererar. Under träningstiden lades dessa kompositörs- och instrumentationstoken till varje prov, så att modellen skulle lära sig att använda denna information när den gör notförutsägelser. Vid generationstillfället kan vi sedan konditionera modellen att skapa prover i en vald stil genom att börja med en uppmaning som Rachmaninovs pianostart:

Och uppmanas med bandet Journey, med piano, bas, gitarr och trummor:

Vi kan visualisera inbäddningarna från MuseNet för att få en inblick i vad modellen har lärt sig. Här använder vi t-SNE för att skapa en tvådimensionell karta över cosinuslikheten mellan olika inbäddningar av musikaliska kompositörer och stilar.

Håll muspekaren över en specifik kompositör eller stil för att se hur den förhåller sig till andra.

Långsiktig struktur

MuseNet använder de omräknade och optimerade kärnorna i Sparse Transformer för att träna ett nätverk med 72 lager och 24 uppmärksamhetshuvuden – med full uppmärksamhet över en kontext med 4096 tokens. Denna långa kontext kan vara en av anledningarna till att det kan komma ihåg långsiktiga strukturer i ett stycke, som i följande exempel som imiterar Chopin:

Det kan också skapa musikaliska melodiska strukturer, som i det här exemplet som imiterar Mozart:

Musikgenerering är en användbar domän för testning av Sparse Transformer eftersom den befinner sig på ett mellanting mellan text och bild. Den har textens flytande tokenstruktur (i bilder kan man titta tillbaka N tokens och hitta raden ovanför, medan det i musik inte finns något fast antal för att titta tillbaka till föregående takt). Ändå kan vi lätt höra om modellen fångar en långsiktig struktur i storleksordningen hundratals till tusentals tokens. Det är mycket tydligare om en musikmodell ställer till det för strukturen genom att ändra rytmen, på ett sätt som det är mindre tydligt om en textmodell går på en kort tangent.

Dataset

Vi samlade in träningsdata för MuseNet från många olika källor. ClassicalArchives och BitMidi donerade sina stora samlingar av MIDI-filer till det här projektet, och vi hittade också flera samlingar på nätet, inklusive jazz, pop, afrikanska, indiska och arabiska stilar. Dessutom använde vi datasetet MAESTRO.

Transformatorn tränas på sekventiella data: givet en uppsättning noter ber vi den att förutsäga den kommande tonen. Vi experimenterade med flera olika sätt att koda MIDI-filerna till tokens som lämpar sig för denna uppgift. Först ett ackordbaserat tillvägagångssätt där varje kombination av toner som ljuder samtidigt betraktas som ett individuellt ”ackord” och där varje ackord tilldelas en token. För det andra försökte vi kondensera de musikaliska mönstren genom att endast fokusera på tonernas start och försökte ytterligare komprimera detta med hjälp av ett kodningsschema för bytepar.

Vi försökte också med två olika metoder för att markera tidens gång: antingen tokens som skalades i enlighet med styckets tempo (så att token representerade ett musikaliskt slag eller en bråkdel av ett slag), eller tokens som markerade absolut tid i sekunder. Vi landade på en kodning som kombinerar uttrycksfullhet med koncisitet: att kombinera information om tonhöjd, volym och instrument i en enda 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
Exempel på kodning som kombinerar tonhöjd, volym och instrument.

Under träningen:

  1. Transponerar noterna genom att höja och sänka tonhöjden (senare under träningen minskar vi transponeringsmängden så att generationerna håller sig inom de enskilda instrumentens intervall).
  2. Augmentera volymerna, genom att höja eller sänka de olika samplingarnas totala volymer.
  3. Augmentera tajmingen (när vi använder den absoluta tidskodningen i sekunder), genom att i praktiken sakta ner eller påskynda styckena något.
  4. Använd mixup på token embedding space

Vi skapar också en inre kritiker: modellen ombeds under träningstiden att förutsäga om ett givet prov verkligen kommer från datamängden eller om det är en av modellens egna tidigare generationer. Denna poäng används för att välja ut prover vid generationstillfället.

Embeddings

Vi har lagt till flera olika typer av embeddings för att ge modellen ett mer strukturellt sammanhang. Förutom de vanliga positionella inbäddningarna lade vi till en inlärd inbäddning som följer tidens gång i ett visst prov. På så sätt får alla toner som låter samtidigt samma tidsinbäddning. Vi lägger sedan till en inbäddning för varje ton i ett ackord (detta efterliknar relativ uppmärksamhet, eftersom det blir lättare för modellen att lära sig att ton 4 behöver titta tillbaka på ton 3, eller annars på ton 4 i det föregående ackordet). Slutligen lägger vi till två strukturella inbäddningar som talar om för modellen var ett givet musikaliskt prov befinner sig i det större musikstycket. Den ena inbäddningen delar upp det större stycket i 128 delar, medan den andra inbäddningen är en nedräkning från 127 till 0 när modellen närmar sig (slut)token.

Vi är spända på att höra vad folk skapar! Om du skapar ett stycke som du gillar kan du ladda upp det till en gratistjänst som Instaudio och sedan twittra länken till oss (MuseNet-demonstrationen har en tweet-knapp som underlättar detta).

Om du är intresserad av att lära dig mer om OpenAI:s musikarbete kan du överväga att ansöka om att bli medlem i vårt team. Skicka gärna e-post till oss med förslag till MuseNet-demonstrationen. Vi vill också gärna höra av dig om du är intresserad av att komponera med MuseNet på djupet, eller om du har MIDI-filer som du vill lägga till i träningsuppsättningen.

MuseNet spelade en experimentell konsert den 25 april 2019, som livestreamades på OpenAI:s Twitch-kanal, där ingen människa (inklusive oss) hade hört styckena tidigare.

Lämna ett svar

Din e-postadress kommer inte publiceras.