MuseNet

Loimme MuseNetin, syvän neuroverkon, joka pystyy tuottamaan neljän minuutin musiikkisävellyksiä kymmenellä eri soittimella ja yhdistelemään tyylejä countrysta Mozartiin ja Beatlesiin. MuseNetiä ei ohjelmoitu eksplisiittisesti musiikin ymmärryksemme perusteella, vaan se löysi harmonia-, rytmi- ja tyylimalleja oppimalla ennustamaan seuraavan merkin sadoista tuhansista MIDI-tiedostoista. MuseNet käyttää samaa yleiskäyttöistä valvomatonta teknologiaa kuin GPT-2, laajamittainen muunnosmalli, joka on koulutettu ennustamaan seuraava merkki sekvenssissä, olipa kyse sitten äänestä tai tekstistä.

Näytteet

Koska MuseNet tuntee monia eri tyylejä, voimme sekoittaa sukupolvia uudella tavalla. Tässä mallille annetaan Chopinin Nocturnen kuusi ensimmäistä säveltä, mutta sitä pyydetään tuottamaan pop-tyylinen kappale, jossa on piano, rummut, basso ja kitara. Malli onnistuu sekoittamaan nämä kaksi tyyliä vakuuttavasti, ja koko bändi liittyy mukaan noin 30 sekunnin kohdalla:

Kokeile MuseNetiä

Olemme innoissamme nähdessämme, miten niin muusikot kuin muutkin kuin muusikot käyttävät MuseNetiä uusien sävellysten luomiseen!

Simppelitilassa (näytetään oletusarvona) kuulet sattumanvaraisia kuratoimattomia näytteitä, jotka olemme valmiiksi luoneet. Valitse säveltäjä tai tyyli, valinnainen alku kuuluisasta kappaleesta ja aloita generointi. Näin voit tutustua erilaisiin musiikkityyleihin, joita malli voi luoda. Edistyneessä tilassa voit olla suoraan vuorovaikutuksessa mallin kanssa. Täydennykset kestävät kauemmin, mutta luot täysin uuden kappaleen.

Joitakin MuseNetin rajoituksia ovat:

  • Kyselemäsi instrumentit ovat vahvoja ehdotuksia, eivät vaatimuksia. MuseNet luo jokaisen nuotin laskemalla todennäköisyydet kaikkien mahdollisten nuottien ja instrumenttien kesken. Malli siirtyy tekemään instrumenttivalinnoistasi todennäköisempiä, mutta aina on olemassa mahdollisuus, että se valitsee jotain muuta.
  • MuseNetillä on vaikeampaa tyylisuuntien ja instrumenttien parittomien parien kanssa (kuten Chopin bassolla ja rummuilla). Generaatioista tulee luonnollisempia, jos valitset instrumentit, jotka ovat lähimpänä säveltäjän tai yhtyeen tavanomaista tyyliä.

Säveltäjä- ja soitintunnukset

Loimme säveltäjä- ja soitintunnukset antaaksemme paremman kontrollin siihen, millaisia näytteitä MuseNet tuottaa. Harjoittelun aikana nämä säveltäjä- ja instrumentointimerkit liitettiin jokaisen näytteen eteen, jotta malli oppisi käyttämään tätä tietoa nuottiennusteiden tekemisessä. Generointihetkellä voimme sitten ehdollistaa mallin luomaan näytteitä valitsemallamme tyylillä aloittamalla kehotuksella, kuten Rachmaninoffin pianokäynnistys:

tai kehotuksella Journey-yhtye, jossa on piano, basso, kitara ja rummut:

Voimme visualisoida MuseNetin upotukset saadaksemme käsityksen siitä, mitä malli on oppinut. Tässä käytämme t-SNE:tä luodaksemme 2D-kartan eri musiikkisäveltäjien ja -tyylien upotusten kosini-yhdennäköisyydestä.

Vie hiiren kursori tietyn säveltäjän tai tyylin päälle nähdäksesi, miten se liittyy muihin.

Pitkän aikavälin rakenne

MuseNet käyttää Sparse Transformerin uudelleenlaskentaa ja optimoituja ytimiä kouluttaakseen 72-kerroksisen verkon, jossa on 24 tarkkaavaisuuspäätä – täydellä tarkkaavaisuudella 4096 tokenin kontekstissa. Tämä pitkä konteksti voi olla yksi syy siihen, miksi se pystyy muistamaan kappaleen pitkän aikavälin rakenteen, kuten seuraavassa Chopinia imitoivassa näytteessä:

Se pystyy myös luomaan musiikillisia melodisia rakenteita, kuten tässä Mozartia imitoivassa näytteessä:

Musiikin tuottaminen on käyttökelpoinen alue Sparse Transformerin testaamiseen, koska se sijaitsee tekstin ja kuvien välimaastossa. Siinä on tekstin joustava merkkirakenne (kuvissa voit katsoa N merkkiä taaksepäin ja löytää edellisen rivin, kun taas musiikissa ei ole kiinteää lukumäärää, jonka perusteella voit palata edelliseen tahtiin). Voimme kuitenkin helposti kuulla, pystyykö malli havaitsemaan pitkän aikavälin rakenteen satojen tai tuhansien merkkien suuruusluokassa. On paljon selvempää, jos musiikkimalli sotkee rakenteen muuttamalla rytmiä, tavalla, joka ei ole yhtä selvä, jos tekstimalli menee lyhyelle tangentille.

Dataset

Keräsimme harjoitusdataa MuseNetiä varten monista eri lähteistä. ClassicalArchives ja BitMidi lahjoittivat suuret MIDI-tiedostojen kokoelmansa tätä projektia varten, ja löysimme myös useita kokoelmia verkosta, jotka sisälsivät jazz-, pop-, afrikkalaisia, intialaisia ja arabialaisia tyylejä. Lisäksi käytimme MAESTRO-tietokokonaisuutta.

Muuntaja koulutetaan peräkkäisellä datalla: kun sille annetaan joukko nuotteja, pyydämme sitä ennustamaan tulevan nuotin. Kokeilimme useita eri tapoja koodata MIDI-tiedostot tähän tehtävään sopiviksi merkkeiksi. Ensimmäinen oli sointukohtainen lähestymistapa, jossa jokaista samaan aikaan soivien nuottien yhdistelmää pidettiin yksittäisenä ”sointuna” ja jokaiseen sointuun määritettiin merkki. Toiseksi kokeilimme musiikillisten kuvioiden tiivistämistä keskittymällä vain nuottien alkuihin, ja yritimme edelleen tiivistää sitä käyttämällä tavuparikoodausjärjestelmää.

Kokeilimme myös kahta erilaista menetelmää ajan kulumisen merkitsemiseksi: joko merkkejä, jotka skaalattiin kappaleen tempon mukaan (niin että merkit edustivat musiikillista tahtia tai tahdin osaa), tai merkkejä, jotka merkitsivät absoluuttista aikaa sekunteina. Päädyimme koodaukseen, jossa yhdistyvät ilmaisuvoima ja ytimekkyys: yhdistimme sävelkorkeuden, äänenvoimakkuuden ja instrumentin tiedot yhdeksi merkiksi.

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
Näyte-koodaus, jossa yhdistyvät sävelkorkeus, äänenvoimakkuus ja instrumentti.

Harjoittelun aikana:

  1. Transponoimme nuotteja korottamalla ja madaltamalla sävelkorkeuksia (myöhemmin harjoittelun edetessä pienennämme transponoinnin määrää niin, että sukupolvet pysyvät yksittäisten instrumenttien vaihteluvälien rajoissa).
  2. Sovitetaan äänenvoimakkuutta, jolloin eri näytteiden kokonaisäänenvoimakkuutta nostetaan tai lasketaan.
  3. Sovitetaan ajoitusta (käytettäessä absoluuttista aikaa sekunteina -koodausta), jolloin kappaleita käytännössä hieman hidastetaan tai nopeutetaan.
  4. Käytä sekoittamista merkkien upotusavaruuteen

Luotamme myös sisäisen kriitikon: mallia pyydetään harjoitteluaikana ennustamaan, onko tietty näyte todella aineistosta vai onko se yksi mallin omista aiemmista sukupolvista. Tätä pistemäärää käytetään näytteiden valintaan sukupolven aikaan.

Embeddings

Lisäsimme useita erilaisia embeddingeja antaaksemme mallille enemmän rakenteellista kontekstia. Tavallisten sijaintikohtaisten upotusten lisäksi lisäsimme opitun upotuksen, joka seuraa ajan kulumista tietyssä näytteessä. Näin kaikille samaan aikaan soiville nuotteille annetaan sama ajallinen upotus. Tämän jälkeen lisäämme upotuksen kullekin soinnun nuotille (tämä jäljittelee suhteellista tarkkaavaisuutta, koska mallin on helpompi oppia, että nuotin 4 on katsottava taaksepäin nuottiin 3 tai edellisen soinnun nuottiin 4). Lopuksi lisäämme kaksi rakenteellista upotusta, jotka kertovat mallille, missä tietty musiikkinäyte sijaitsee laajemmassa musiikkikappaleessa. Toinen upotus jakaa laajemman kappaleen 128 osaan, kun taas toinen koodaus on lähtölaskenta 127:stä 0:aan, kun malli lähestyy (loppu)merkkiä.

Olemme innoissamme kuulemaan, mitä ihmiset luovat! Jos luot kappaleen, josta pidät, voit ladata sen ilmaiseen palveluun, kuten Instaudioon, ja sitten twiitata meille linkin (MuseNetin demossa on twiittipainike, joka auttaa tässä).

Jos olet kiinnostunut oppimaan lisää OpenAI:n musiikkityöstä, harkitse hakemista tiimiimme. Lähetä meille sähköpostitse ehdotuksia MuseNet-demoa varten. Kuulisimme myös mielellämme sinusta, jos olet kiinnostunut säveltämään MuseNetin kanssa syvällisemmin tai jos sinulla on MIDI-tiedostoja, joita haluaisit lisätä harjoitussarjaan.

MuseNet soitti 25.4.2019 kokeellisen konsertin, joka livestriimattiin OpenAI:n Twitch-kanavalla ja jossa kukaan ihminen (me mukaan lukien) ei ollut kuullut kappaleita aiemmin.

Vastaa

Sähköpostiosoitettasi ei julkaista.