Få utskriftsvennlig versjon ved å trykke på denne

Hvordan Spotify finner neste sang med bruk av maskinlæring?

Når du sitter å hører på musikk via Spotify har du da lurt på hvordan Spotify finner neste sang for deg da? Her får du svaret!

En sang er, som alt annet i en datamaskin, en tallrekke som bestående av nuller (0)og enere (1).  En enkelt sang kan være representert av opp mot flere millioner nuller og enere. Ved hjelp av maskinlæring og statistikk kan du analysere disse tallene. Dette kan for eksempel brukes for å anbefale nye sanger basert på en sang du liker og sitter og hører på akkurat nå.

Tradisjonelt sett har dette vært gjort ved at man danner seg en profil av hva du og vennene dine hører på, og så basert på det kommer Spotify med en anbefaling til neste sang. Dette kalles "collaborative filtering", noe du kan lese om her: http://ansatte.uit.no/robert.jenssen/rec.html.

Et alternativ til dette er å bruke metoder som analyserer de konkrete tallene som sangen du hører på består av. Det man da typisk gjør er å se på sanger med kort "avstand" til den sangen du hører på akkurat nå.

For å analysere sangen, henter vi ut relevant informasjon/egenskaper fra sangen ved hjelp av fysikk og matematikk. Disse egenskapene kan da videre analyseres ved hjelp av maskinlæringsalgoritmer. Typiske egenskaper vi kan bruke er:

  • Frekvensinnhold – En bråkete rockesang med mye gitarer og høye trommer inneholder mer høye frekvenser enn en rolig jazzballade med vokal og piano.
  • Tempo
  • Variasjon i lydtrykk(volum) – Igjen, en rolig jazzballade vil ha mye mindre variasjon i volum i løpet av sangen enn en intens sang beregnet på dansegulvet.

I denne omgang skal vi ta for oss algoritmer som egner seg til å visualisere data. Det betyr rett og slett at vi kan se på datasettet med øynene våre og velge sang ut i fra hva som er nærmest det vi hører på nå.

Analyse

Vi har lastet ned 400 sanger fra Spotify, gjennom en åpen webportal som heter Echo Nest. Listen består av 100 sanger hver fra av de følgende kategorier: «classic rock», «top-hits», «hip-hop»og «classical». Samler vi alle sangene utenom pop («top-hits») og kjører det gjennom en av de mest populære visualiseringsalgoritmer, som kalles
«t-SNE» får vi ut følgende resultat:

De forskjellige kategoriene er markert med forskjellige farger og symboler, og vi ser klare skiller mellom de forskjellige kategoriene. Legg merke til at dette kun er basert på enerne og nullene sangene!

Vi ser også noen "tvilsomme" tilfeller hvor sanger er nært hverandre i forhold til tall, men som ikke gir mening i forhold til våre forventinger til musikk. Dette er stort sett umulig å unngå siden noen sanger rett og slett er for like hverandre på tvers av kateogorier. Mer om dette litt senere.

Vi velger oss nå en tilfeldig sang fra datasettet på figuren, for eksempel rockesangen lengst til høyre i bildet markert med en trekant snudd på hodet (figur 2). Det viser seg å være Queen med «Another One Bites the Dust». Hvis vi nå sitter og koser oss med den sangen vil vi gjerne at neste sang som kommer likner på den vi hører på nå.

Går vi inn i figuren og finner nærmeste sang finner vi at det er også Queen, men nå med "We will rock you".

 

Går vi enda et steg videre og finner nærmeste sang til «We will rock you» er den nærmeste sangen ZZ TOP med "La Grange".  Kanskje ikke helt Queen, men ganske lik stil om du setter deg ned og hører på sangen.

 

Foreløpig konklusjon: Dette gir mening og er kun basert på tall og maskinlæring!!

Til slutt går vi over til et mer tvilsomt tilfelle. La oss si at vi sitter og koser oss med Johann Sebastian Bachs gode gamle episke «Toccata and Fugue i D-moll», markert med en grønn trekant i midten av figuren. Om vi da går til nærmeste låt får vi oss en ubehagelig overraskelse: Jack U og Justin Bieber med «Where are you now» -- fysj og fysj!!

 

 

Linker til slutt:

Maskinlæringslabben ved uit: http://site.uit.no/ml/

API for å kunne analysere musikkdata: http://the.echonest.com/

Wikipedia: https://en.wikipedia.org/wiki/Dimensionality_reduction

Metode brukt for å analysere data: https://lvdmaaten.github.io/tsne/ 



 

Skip to main content