394 čitanja
394 čitanja

Muzika i ML: grupisanje na Spotify audio funkcijama

by Aidar Gain7m2025/04/01
Read on Terminal Reader

Predugo; Citati

Istražio sam kako da koristim mašinsko učenje bez nadzora da grupišem 5000 pesama u smislene plejliste koristeći Spotify audio funkcije. Kombinujući tehnike grupisanja kao što su K-Means, PCA i eksternu validaciju iz Last.fm žanrova, procenio sam kvalitet grupisanja sa metrikama kao što su Silhouette Score i NMI – balansirajući statističku ispravnost sa muzičkim smislom.
featured image - Muzika i ML: grupisanje na Spotify audio funkcijama
Aidar Gain HackerNoon profile picture
0-item


Uvod

Muzika nas okružuje svaki dan. Postavlja nas, motivira, pa čak i poboljšava kognitivne performanse. Brzi ritmični taktovi mogu nam povećati energiju, dok nam sporije, melodičnije melodije pomažu da se opustimo. Međutim, kreiranje savršene liste za reprodukciju često je lični i dugotrajan zadatak. Glavne platforme za striming oslanjaju se na muzičke stručnjake da sastavljaju liste za reprodukciju, ali očigledno, kao iu većini oblasti, potrebna nam je neka automatizacija i pomoć mašine pri korištenju podataka.


Kao neko ko sluša više od 2 sata muzike dnevno u različitim žanrovima, producira muziku i kreira plejliste za ličnu upotrebu, ova tema mi duboko rezonuje. Ovaj projekat mi je omogućio da kombinujem svoju strast za muzikom sa svojom profesionalnom ekspertizom u analitici podataka dok istražujem praktične primene algoritama mašinskog učenja. Osim toga, inspirisao me je Spotify-jev inženjerski članak — budući da su lider u strimingu muzike, postavili su standard za inovacije u ovom prostoru i pružili nam visokokvalitetne podatke.

Izjava o problemu

Cilj ovog projekta bio je istražiti tehnike grupiranja kako bi se pjesme automatski grupirale u smislene playliste. Može li nam mašinsko učenje pomoći da kreiramo liste za reprodukciju koje izgledaju jednako kurirano kao i one od strane stručnjaka za ljude? Ili, u najmanju ruku, može li osigurati da death metal i klasične svite nisu na istoj listi?


Da bih se pozabavio ovim, koristio sam skup podataka od ~5.000 pjesama sa Spotify audio funkcijama, kao što su plesnost, tempo i energija. Pored toga, ugradio sam Last.fm API podatke da bih dobio informacije o žanru, omogućavajući eksternu validaciju kvaliteta grupisanja.


Naš zadatak:

  • Grupirajte pjesme u kohezivne liste za reprodukciju na osnovu audio funkcija.
  • Potvrdite ove klastere u odnosu na Last.fm žanrove kako biste osigurali kvalitetu.

Početni pogled na podatke

Prije nego što sam se upustio u strojno učenje, vizualizirao sam skup podataka koristeći osnovne značajke. Ispod je dijagram pjesama zasnovan na tempu i plesnosti :

Čak i bez naprednih tehnika, možemo prepoznati neke obrasce. Na primjer, Brahmsova uspavanka se lako može prepoznati u regiji niskog tempa i niskog plesa, dok se Eminemova The Real Slim Shady pojavljuje u oblasti srednjeg tempa i visokog plesa.


Međutim, korištenje svih dostupnih funkcija omogućit će nam da otkrijemo bogatije obrasce i automatiziramo kreiranje popisa pjesama. Evo kompletne liste funkcija:

Nabavite uzorak odgovora API-ja Audio Features Track

Nenadzirano grupisanje

Sada, naš cilj je da izvršimo početno grupisanje. Ideja je da se primeni čisto mašinsko učenje bez nadzora — mi ne znamo prave oznake klastera i težimo da odredimo optimalan broj klastera koristeći praktične metode. Da bismo to postigli, proći ćemo kroz nekoliko osnovnih koraka. Na kraju ćemo pogledati rezultate grupiranja i pokušati razumjeti nove obrasce.

Skaliranje

Za većinu algoritama i metoda koje ćemo kasnije primijeniti, skalirani podaci su od suštinskog značaja. Ovi algoritmi se oslanjaju na proračune (kao što su udaljenosti ili varijanse) koji su osjetljivi na skalu karakteristika. Skaliranje sve pretvara u zajedničku jedinicu tako da se sve karakteristike tretiraju pravedno. Ovo osigurava da svaka karakteristika podjednako doprinosi procesu grupiranja. Koristit ćemo nekoliko različitih skalera.


Ispod je primjer projektovanja naših podataka na dvije karakteristike: duration_ms i tempo . Lijeva grafika prikazuje originalne podatke; desno prikazuje rezultat nakon primjene dva skalera — PowerTransformer i MinMaxScaler:

Skaliranje čini karakteristike uporedivim — sada grupiranje ima više smisla


Smanjenje dimenzionalnosti sa PCA

Sljedeći korak je analiza glavnih komponenti (PCA), koja smanjuje broj karakteristika uz zadržavanje najvažnijih informacija. Ovo olakšava vizualizaciju i ubrzava grupisanje.


Slikovito rečeno, PCA pronalazi projekcije - poput obasjanja baterijske lampe na 3D objekt da bi se stvorila 2D sjenka. Lampa je postavljena tako da senka (projekcija) zadrži što više detalja o originalnom objektu.


Isprobaćemo različite brojeve komponenti i uporediti rezultate. U našem slučaju ćemo testirati 10 opcija. Evo primjera projektiranja pjesama na dvije glavne komponente:

PCA projekcija


K-Means Clustering

K-Means je popularan algoritam za grupisanje podataka koji grupiše podatke u unapred definisani broj klastera (k). Ali kako se odlučujemo za optimalno k?

Ponekad imamo poslovna ograničenja. Naš skup podataka uključuje oko 5.000 pjesama. Tipično, playliste na streaming servisima sadrže između 20 i 250 pjesama. Dakle, za moj specifični slučaj upotrebe, potrebno mi je više od 20 klastera.


Silhouette Score pomaže u procjeni kvaliteta grupiranja mjerenjem koliko se svaka tačka podataka uklapa unutar dodijeljenog klastera u poređenju s ostalima. Viši rezultat siluete (bliži 1) znači da su klasteri dobro definirani i jasno odvojeni.

Najbolja kombinacija parametara

Sa toliko stupnjeva slobode, kako možemo pronaći najbolju kombinaciju parametara? Odgovor je simulacija. Mogu isprobati različite kombinacije – skalere, broj PCA komponenti i broj klastera – i odabrati onu koja ima najbolji učinak. U mom slučaju je bilo 935 mogućih kandidata. Hajde da vizualizujemo rezultate.

Ovaj grafikon prikazuje rezultate silueta (x-osa) za različite kombinacije komponenti PCA (predstavljene veličinom kruga), skalera (boja) i broja klastera (y-osa). Da bismo pojednostavili izbor, trebali bismo se fokusirati na opcije u gornjem desnom dijelu, na primjer:

Prva smislena kombinacija sa najvišim rezultatom siluete koristi MinMax skaler, 2 glavne komponente i 6 klastera. Iako 6 klastera ne ispunjava naš poslovni zahtjev da imamo više od 20 klastera, to ipak vrijedi detaljnije ispitati.

Početni rezultat klasteriranja

Kao što je ranije spomenuto, ugradio sam Last.fm podatke sa informacijama o žanru za naše umjetnike. Ovo je savršen trenutak da ga primijenite na naš skup podataka kao koristan kriterij validacije. Odabrao sam 5 najpopularnijih žanrova ovog skupa podataka, dok su ostali grupisani pod "ostalo".


Vraćajući se na našu kombinaciju s najboljim učinkom, sada smo spremni da uporedimo rezultirajuće klastere koristeći oznake žanra. Ispod je vizualizacija koja prikazuje postotak udjela žanrova po klasterima, zajedno sa brojem pjesama u svakom klasteru.

Ako se sećate, spomenuo sam u izjavi o problemu da je jedan od mojih ciljeva bio da napravim razliku između death metala i klasične muzike — iskreno, to je bio slučajan primer. Ali iznenađujuće, ovaj kriterij radi prilično dobro za ovu konkretnu postavku klasteriranja. Pogledajte pažljivije: klasteri 0 i 4 se sastoje od otprilike polovine klasične muzike, gotovo bez death metala, dok su klasteri 2 i 3 suprotni, u velikoj mjeri predstavljaju death metal. Obećavajući početak!


Ipak, još uvijek primjećujemo mješavinu žanrova u mnogim klasterima, od kojih neki nisu muzički kompatibilni. Ovo sugerira da je vrijedno istražiti druge tehnike i metrike evaluacije.


Na kraju, cilj je pronaći rješenje za grupisanje koje je i statistički robusno i praktično značajno za vaš specifični slučaj upotrebe.

Grupiranje s eksternom validacijom

U ovom odeljku ćemo opširnije koristiti informacije o žanru. Ovi podaci djeluju kao naše “idealne oznake” za provjeru kvalitete klasteriranja. Naravno, to nije savršen kriterijum ili najsofisticiraniji pristup za kreiranje plejliste — ali meni lično, kao ljubitelju muzike, dobro funkcioniše. Na primjer, često radije slušam muziku specifičnu za žanr: hip-hop za motivaciju, rock na zabavama ili klasiku dok radim. To znači da ne želim da se ove plejliste mešaju zajedno.


Pokušajmo da odgovorimo na takvo pitanje: Možemo li muziku odvojiti po žanru koristeći samo karakteristike kao što su plesnost, energija, tempo, itd.?

Normalizirane međusobne informacije (NMI)

Normalizirane međusobne informacije (NMI) mjere sličnost između dva klasteriranja. Dobija između 0 i 1, gdje je:

  • 0 znači da nema preklapanja između dodjela klastera i istinitih oznaka.
  • 1 znači savršeno podudaranje sa osnovnom istinom.


Prije nego krenemo u pronalaženje najboljeg podešavanja klasteriranja pomoću NMI-a, procijenimo ga na poznatoj konfiguraciji — onoj koju smo ranije identificirali: MinMaxScaler, 2 PCA komponente i 6 klastera. Sada ćemo popraviti skaler radi jednostavnosti i fokusirati se na to kako broj PCA komponenti utiče na NMI rezultat.

Vidimo da je NMI skor za n=6 značajno viši nego za n=2 (0,29 naspram 0,18). Hajde da vizualizujemo rezultirajuće distribucije klastera:

Ovo je već veliki napredak. Sada vidimo death metal lepo izolovan u dva klastera i svu klasičnu muziku grupisanu u jednu. Obećavajuće!


Za referencu, ispod je poređenje NMI rezultata u različitim konfiguracijama grupiranja:

Najviši NMI rezultat ukazuje na najbolje grupiranje fokusirano na žanr. Ovaj rezultat je sasvim očekivan — koristeći podatke o validaciji, možemo značajno poboljšati naše muzičke grupe. Ali glavna poenta ovdje je bila potvrditi naše grupiranje K-sredstava i steći bolje razumijevanje kvaliteta etikete koristeći iste parametre.

Zaključak

U ovom projektu istraživao sam kako mašinsko učenje može pomoći grupisati muzičke numere u smislene klastere koristeći samo audio funkcije. Počevši od osnovnih tehnika učenja bez nadzora kao što su skaliranje, PCA i K-Means, potvrdio sam rezultate koristeći podatke o žanru iz stvarnog svijeta sa Last.fm-a.


Dok su rezultati silueta pomogli da se optimizira interna konzistentnost, vanjska validacija kroz usklađivanje žanra ponudila je dublji uvid u praktični kvalitet klastera. Ohrabrujuće, čak i jednostavne metode mogu uspješno odvojiti žanrove poput klasike i death metala – ističući snagu audio funkcija.


Ovo je samo početna tačka. Buduća poboljšanja bi uključivala istraživanje naprednih tehnika kao što su UMAP i HDBSCAN za poboljšanje grupisanja i korištenje SHAP-a za bolju interpretabilnost. Sa ovim alatima možemo se približiti izgradnji sistema plejlista koji su i inteligentni i muzički značajni.


Na kraju krajeva, mašinsko učenje definitivno može upotpuniti ljudsko kuriranje. Za sada nudi skalabilan način organiziranja i istraživanja velikih muzičkih biblioteka.

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks