Vytvořili jsme MuseNet, hlubokou neuronovou síť, která dokáže generovat čtyřminutové hudební skladby s 10 různými nástroji a kombinovat styly od country přes Mozarta až po Beatles. MuseNet nebyl explicitně naprogramován s ohledem na naše znalosti hudby, ale místo toho objevil vzorce harmonie, rytmu a stylu tím, že se naučil předvídat další token ve stovkách tisíc souborů MIDI. MuseNet používá stejnou univerzální technologii bez dohledu jako GPT-2, rozsáhlý transformační model naučený předpovídat další token v sekvenci, ať už zvukové nebo textové.
Příkladů
Protože MuseNet zná mnoho různých stylů, můžeme míchat generace novými způsoby. Zde je modelu zadáno prvních 6 not Chopinova nokturna, ale je požádán, aby vygeneroval skladbu v popovém stylu s klavírem, bicími, basou a kytarou. Model dokáže oba styly přesvědčivě smíchat a zhruba ve 30. sekundě se k němu připojí celá kapela:
Vyzkoušejte si MuseNet
Jsme zvědaví, jak budou hudebníci i nehudebníci používat MuseNet k vytváření nových skladeb!
V jednoduchém režimu (zobrazeném ve výchozím nastavení) uslyšíte náhodné nekultivované ukázky, které jsme předem vygenerovali. Vyberte si skladatele nebo styl, volitelný začátek slavné skladby a začněte generovat. Můžete tak prozkoumat rozmanitost hudebních stylů, které model dokáže vytvořit. V pokročilém režimu můžete s modelem přímo interagovat. Dokončení bude trvat déle, ale budete vytvářet zcela novou skladbu.
Mezi některá omezení MuseNetu patří:
- Požadované nástroje jsou silné návrhy, nikoli požadavky. MuseNet generuje každou notu výpočtem pravděpodobností napříč všemi možnými notami a nástroji. Model se posouvá tak, aby vaše volby nástrojů byly pravděpodobnější, ale vždy existuje možnost, že vybere něco jiného.
- MuseNet má větší potíže s lichými dvojicemi stylů a nástrojů (například Chopin s basou a bicími). Generace budou přirozenější, pokud vyberete nástroje, které jsou nejblíže obvyklému stylu skladatele nebo kapely.
Žetony skladatelů a nástrojů
Vytvořili jsme žetony skladatelů a nástrojů, abychom měli větší kontrolu nad druhy vzorků, které MuseNet generuje. Během tréninku byly tyto tokeny skladatele a instrumentace předřazeny každému vzorku, aby se model naučil tyto informace používat při předpovídání not. V době generování pak můžeme model podmínit vytvořením vzorků ve zvoleném stylu tím, že začneme výzvou, například Rachmaninovův klavírní začátek:
Nebo výzvou skupiny Journey s klavírem, basou, kytarou a bicími:
Můžeme vizualizovat vložené vzorky ze sítě MuseNet, abychom získali přehled o tom, co se model naučil. Zde používáme t-SNE k vytvoření dvourozměrné mapy kosinové podobnosti různých vložených hudebních skladatelů a stylů.
Dlouhodobá struktura
MuseNet používá přepočítávací a optimalizovaná jádra Sparse Transformer k trénování 72vrstvé sítě s 24 hlavami pozornosti – s plnou pozorností nad kontextem 4096 tokenů. Tento dlouhý kontext může být jedním z důvodů, proč si dokáže zapamatovat dlouhodobou strukturu skladby, jako v následující ukázce imitující Chopina:
Dokáže také vytvářet hudební melodické struktury, jako v této ukázce imitující Mozarta:
Tvorba hudby je užitečnou doménou pro testování Sparse Transformer, protože se nachází na pomezí mezi textem a obrázky. Má plynulou strukturu tokenů jako text (v obrázcích se můžete podívat zpět na N tokenů a najít řádek nad nimi, zatímco v hudbě neexistuje pevný počet pro pohled zpět na předchozí takt). Přesto můžeme snadno slyšet, zda model zachycuje dlouhodobou strukturu v řádu stovek až tisíců tokenů. Je mnohem zřejmější, pokud hudební model naruší strukturu změnou rytmu, a to způsobem, který je méně zřejmý, pokud se textový model vydá na krátkou tečku.
Datová sada
Tréninková data pro MuseNet jsme shromáždili z mnoha různých zdrojů. Společnosti ClassicalArchives a BitMidi věnovaly pro tento projekt své rozsáhlé sbírky souborů MIDI a také jsme našli několik sbírek online, včetně jazzových, popových, afrických, indických a arabských stylů. Kromě toho jsme použili datovou sadu MAESTRO.
Transformátor je natrénován na sekvenčních datech: zadáme-li mu sadu not, požádáme ho, aby předpověděl nadcházející notu. Experimentovali jsme s několika různými způsoby kódování souborů MIDI do tokenů vhodných pro tuto úlohu. Za prvé, akordický přístup, který považoval každou kombinaci not znějících v jednom okamžiku za samostatný „akord“ a každému akordu přiřadil token. Za druhé jsme zkusili zestručnit hudební vzory tak, že jsme se zaměřili pouze na začátky not, a to jsme se pokusili dále komprimovat pomocí schématu kódování dvojic bajtů.
Zkoušeli jsme také dva různé způsoby označování plynutí času: buď tokeny, které byly škálovány podle tempa skladby (takže tokeny představovaly hudební takt nebo zlomek taktu), nebo tokeny, které označovaly absolutní čas v sekundách. Přistoupili jsme na kódování, které kombinuje expresivitu a stručnost: kombinuje informace o výšce tónu, hlasitosti a nástroji do jediného tokenu.
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
Při tréninku:
- Transponujeme noty zvyšováním a snižováním výšek tónů (později při tréninku množství transpozice snižujeme, aby generace zůstaly v rozmezí jednotlivých nástrojů).
- Zvýšíme nebo snížíme celkovou hlasitost jednotlivých samplů.
- Zvýšíme časování (při použití kódování absolutního času v sekundách), čímž vlastně skladby mírně zpomalíme nebo zrychlíme.
- Použijeme mixup na prostoru vkládání tokenů
Vytvoříme také vnitřní kritiku: model je v době trénování požádán, aby předpověděl, zda je daný vzorek skutečně z datové sady, nebo zda se jedná o jednu z minulých generací modelu. Toto hodnocení se používá k výběru vzorků v době generování.
Vložky
Přidali jsme několik různých druhů vložek, abychom modelu dodali více strukturního kontextu. Kromě standardních pozičních embeddingů jsme přidali naučený embedding, který sleduje plynutí času v daném vzorku. Tímto způsobem jsou všechny noty, které zazní ve stejnou dobu, opatřeny stejným časovým vložením. Dále jsme přidali embedding pro každou notu v akordu (to napodobuje relativní pozornost, protože pro model bude snazší naučit se, že nota 4 se musí ohlédnout na notu 3, případně na notu 4 předchozího akordu). Nakonec přidáme dvě strukturní usazení, která modelu říkají, kde se daný hudební vzorek nachází v rámci větší hudební skladby. Jedno zakódování rozděluje větší skladbu na 128 částí, zatímco druhé zakódování je odpočítávání od 127 do 0, jak se model blíží k (koncovému) tokenu.
Jsme zvědaví, co lidé vytvoří! Pokud vytvoříte skladbu, která se vám líbí, můžete ji nahrát na bezplatnou službu, jako je Instaudio, a pak nám na Twitteru poslat odkaz (demo MuseNet má tlačítko tweet, které vám s tím pomůže).
Pokud máte zájem dozvědět se více o práci OpenAI v oblasti hudby, zvažte možnost přihlásit se do našeho týmu. Neváhejte nám napsat své návrhy pro demo MuseNet. Budeme také rádi, když se nám ozvete, pokud máte zájem komponovat s MuseNetem do větší hloubky nebo pokud máte soubory MIDI, které byste chtěli přidat do tréninkové sady.
.