DOMANDA Creazione di un modello di machine learning per consigliarmi le canzoni

Pubblicità

Hero467

Utente Attivo
Messaggi
692
Reazioni
404
Punteggio
74
Ciao a tutti,

scommetto la mia mano destra che chiunque in questo forum usi/abbia usato qualche servizio di streaming musicale. La maggior parte probabilmente Spotify, ed è quello che userò per il mio esempio.

A molti sarà capitato di lasciar andare le varie canzoni, lasciando a Spotify la libertà di scegliere le canzoni da mettere, spesso proponendovene di nuove. E qualche volta vi sarà capitato di pensare “ma come gli è venuto in mente di propormi sta roba” ascoltando una canzone non di proprio gusto.

A me questo pensiero (anche se in modo meno family friendly) capita spessissimo, perché ascolto principalmente un genere musicale molto di nicchia, e molte canzoni di questo genere comunque non mi soddisfano. Sono una persona esigente, insomma.

Ho fatto qualche ricerca, giusto per capire perché Spotify, pur centrando il genere che ascolto, non riesca a consigliarmi canzoni di mio gusto con la frequenza che vorrei (quella attuale è di una canzone buona ogni 20) e, semplificando molto, Spotify non si basa esclusivamente sui dati ottenuti sul singolo utente per consigliarli i pezzi, perché ovviamente sarebbe un quantitativo di dati esigua. Quello che fa Spotify è, oltre ad analizzare i singoli, studiare le masse con gusti simili, i pezzi più piaciuti di un determinato genere, i pezzi mainstream in quel momento ed una miriade di altri dati. Come ci si aspetterebbe da un colosso del genere il suo algoritmo è estremamente complesso, ciò per gestire l’enorme mole di dati che riceve e per trarre il meglio da essi.
Questo funziona con la maggior parte delle persone, che ascoltano tutti più o meno gli stessi generi e gli stessi pezzi (non lo dico per generalizzare, ma tutti i miei conoscenti ascoltano tutti le stesse cose), quindi un algoritmo del genere in quel caso funziona bene. Ma se doveste applicarlo ad un’utenza che ascolta uno o più generi di nicchia, quasi sicuramente rendendo impossibile trovarne vari che hanno gli stessi esatti gusti, otterrete un algoritmo che funziona male, come nel mio caso.


Ho quindi pensato di incrociare le mie (ahimè scarse) conoscenze di teoria musicale con un po’ di buon senso e le mie conoscenze di programmazione per provare a sviluppare un algoritmo più efficace dal punto di vista di questa categoria di utenti. L'algoritmo si andrebbe più a concentrare più sulla canzone in sé che su altri tipi di dati, utilizzando esclusivamente i dati del singolo.

So che questo avrebbe il problema del minuscolo quantitativo di dati, ma ritengo che, se pensato bene, sarebbe più efficace.

Mi sono limitato a fare una panoramica, quindi se qualcuno è disposto a darmi una mano fornirò senza esitazione più dettagli
 
Ciao, il problema che stai affrontando e' sicuramente complesso. Ho in mente qualcosa che possa esserti utile, prova a fornirmi ulteriori informazioni...
Ti anticipo tuttavia che cio' che stai cercando di fare non e' assolutamente semplice perche' si tratta di un problema di continual learning. In sostanza esce un nuovo brano(e devi gia' trovare un database che contenga tutte le info) e dal modello calcolato lo mandi in inferenza, a quel punto ti piace ? Si'/No Il modello ha sbagliato, deve modificare i pesi. In tutto cio' la mole di dati deve essere grande. Le possibilita' son svariate, puoi rimanere su ml e fare un kmeans, KNN o andare sul deep learning e potresti puntare a: autoencoders sparsi( alla fine ti generano una specie di dizionario che contiene delle associazioni con le canzoni) oppure una architettura a transformers.
Ma in tutti i casi non risolvi i problemi che hai:
Hai bisogno di dati( puoi usare milion song dataset)
hai bisogno delle tue valutazioni(gran problema)
Devi avere le risorse.
In tutti i casi avresti sicuramente overfitting
 
Ciao, il problema che stai affrontando e' sicuramente complesso. Ho in mente qualcosa che possa esserti utile, prova a fornirmi ulteriori informazioni...
Certo, grazie per la risposta intanto.

Visto che il problema dell'algoritmo di spotify è che si concentra troppo su dati "esterni" agli effettivi brani, il mio intento è di creare un modello che accetti solo parametri legati alla canzone in se. Quelli che ho individuato fin'ora sono
  • tutti i dati tecnici del brano, come tempo, energia, ritmo, tonalità (soprattutto questa, perché un una preferenza per i brani che sono in certe scale piuttosto che altre)...
  • altre informazioni come genere, artista, il periodo di uscita...
  • e come ultimo, ma con estremo rilievo un mio voto che va da 1 a 10
I dati tecnici sarebbero quelli tenuti più in considerazione, visto che riguardano proprio il brano nello specifico e come è stato costruito. Le altre informazioni andrebbero solo a fare da supporto, dando un po' di contesto per migliorare un po', ma non devono essere il focus principale. E infine il voto mio, che è importante per capire le mie preferenze.
Quindi il compito del modello sarebbe di prendere le canzoni con i voti più alti, e cercare in primis delle somiglianze tra i dati tecnici (come per esempio la tonalità, che ho citato prima), poi vedere se ci sono anche similarità nei metadati.

Confrontandomi un po' con ChatGPT (perché comunque la mia conoscenza in materia machine learning è molto scarna) avevo pensato di far analizzare la traccia audio dal modello, tramite librerie come Librosa o Essentia, che a quanto pare sono le migliori. I dati estratti sarebbero poi inseriti in un file csv insieme alle informazioni fornite da me (i metadati e il rating). Il file sarebbe poi dato in pasto a una libreria come scikit, per la creazione del modello.

Le fasi sarebbero le classiche: training con i dati forniti da me con tutte le canzoni che mi vengono in mente (sia che mi piacciano o no, così capisce anche da cosa tenersi alla larga), poi, una volta allenato il modello, seleziono una lista di canzoni che non ho mai ascoltato e le do in pasto a lui, nel frattempo ascoltandomele io. Mi farò dare una lista di queste canzoni affiancata da una percentuale di compatibilità con i miei gusti, a cui io darò ad ogni elemento un voto al lavoro svolto, sempre da 1 a 10. E infine, quando mi riterrò soddisfatto prenderò il più grande archivio di canzoni che riesco a trovare e glielo farò analizzare tutto. Ogni qualvolta avrò bisogno di una canzone gliene farò generare una in base al livello di compatibilità. Durante l'ultima fase darò comunque un voto ai suoi consigli, per continuare a migliorare il modello.


Ti anticipo tuttavia che cio' che stai cercando di fare non e' assolutamente semplice perche' si tratta di un problema di continual learning. In sostanza esce un nuovo brano(e devi gia' trovare un database che contenga tutte le info) e dal modello calcolato lo mandi in inferenza, a quel punto ti piace ? Si'/No Il modello ha sbagliato, deve modificare i pesi. In tutto cio' la mole di dati deve essere grande. Le possibilita' son svariate, puoi rimanere su ml e fare un kmeans, KNN o andare sul deep learning e potresti puntare a: autoencoders sparsi( alla fine ti generano una specie di dizionario che contiene delle associazioni con le canzoni) oppure una architettura a transformers.
Sarò onesto, ho capito la metà se non meno di ciò che hai scritto. Riusciresti a spiegarmelo un po' più semplicemente?


Ma in tutti i casi non risolvi i problemi che hai:
Hai bisogno di dati( puoi usare milion song dataset)
hai bisogno delle tue valutazioni(gran problema)
Devi avere le risorse.
In tutti i casi avresti sicuramente overfitting
Allora, il problema dei dati lo so, uno dei motivi per cui ho scritto qui era riuscire a spremere il massimo dai pochi dati a disposizione
Per la valutazione ho già risposto sopra, quindi non si pone il problema.
Non ho capito in che senso le risorse, e non so cosa sia un overfitting...



So che così posso sembrare ignorante (e lo sono), ma ho tanto tempo da impiegare, non ho fretta e ho voglia di imparare, quindi confido nel tuo aiuto :)
 
Visto che il problema dell'algoritmo di spotify è che si concentra troppo su dati "esterni" agli effettivi brani, il mio intento è di creare un modello che accetti solo parametri legati alla canzone in se. Quelli che ho individuato fin'ora sono

  • tutti i dati tecnici del brano, come tempo, energia, ritmo, tonalità (soprattutto questa, perché un una preferenza per i brani che sono in certe scale piuttosto che altre)...
  • altre informazioni come genere, artista, il periodo di uscita...
  • e come ultimo, ma con estremo rilievo un mio voto che va da 1 a 10
Allora,
c'è un servizio che ti fornisce il tuo primo punto? Ovvero che estrapola queste informazioni? È la prima ricerca che dovresti fare.
Il secondo punto sono abbastanza certo che esista.
Il tuo voto è fondamentale, perchè servirà per classificare correttamente i tuoi brani..

Considera che per fare un modello che abbia un capacità di predire bene dati futuri ci vogliono molti dati, bisogna inoltre gestire con adeguata accortezza la Loss del modello (ad esempio con una regolarizzazione L1). In questo caso i dati di train devono essere reali: essendo le canzoni approssimabili come serie temporali, è impossibile applicare una trasformazione sensata per generare altri dati.

Analizzare le tracce audio per estrapolare queste robe non è computazionalmente semplice, ci vorrà molto tempo (settimane).
Considerando il numero di feature così scorrelate dovresti avere almeno 7/8k samples con il tuo voto.

Inoltre mi parli di analisi della traccia, se non esiste un dataset che contienga tempo, energia, ritmo, tonalità non potrai usare una tecnica di machine learning, ma dovrai analizzare ogni singola traccia, pertanto dovrai per forza di cose puntare ad una rete lstm( per processare sequenze di dati come le canzoni) oppure puntare sulla self attention.

I modelli per farsì che siano utili devono conservare una proprietà durante il train: la generalizzazione. In parole spiccie se hai pochi dati aumenti il rischio di overfittare, ovvero imparare a memoria le feature e non riuscire a predire le nuove con una accuratezza reale.
Per risorse intendo una gpu con almeno 12GB di ram ( e ci vorrà comunque del tempo per trainare )
 
Credo di aver risposto a tutto, ma oggi son talmente cotto che non ci vedo più fammi sapere
 
Allora,
c'è un servizio che ti fornisce il tuo primo punto? Ovvero che estrapola queste informazioni? È la prima ricerca che dovresti fare.
Il secondo punto sono abbastanza certo che esista.
Il tuo voto è fondamentale, perchè servirà per classificare correttamente i tuoi brani..
Per il primo punto credo ci sia un servizio del genere. Se sono fortunato ne trovo uno che me li impacchetta già in vari formati

Considera che per fare un modello che abbia un capacità di predire bene dati futuri ci vogliono molti dati, bisogna inoltre gestire con adeguata accortezza la Loss del modello (ad esempio con una regolarizzazione L1). In questo caso i dati di train devono essere reali: essendo le canzoni approssimabili come serie temporali, è impossibile applicare una trasformazione sensata per generare altri dati.
Questo è un problema, perché i dati non posso tirarmeli giù dal nulla. Se mi impegno posso riuscire a tirarmi giù qualche centinaio di brani, ma non credo di riuscire ad arrivare a più di 500. Se non si dovrebbe andare a prendere dati da altre fonti, perdendo lo scopo primario del modello.

Analizzare le tracce audio per estrapolare queste robe non è computazionalmente semplice, ci vorrà molto tempo (settimane).
Considerando il numero di feature così scorrelate dovresti avere almeno 7/8k samples con il tuo voto.

Inoltre mi parli di analisi della traccia, se non esiste un dataset che contienga tempo, energia, ritmo, tonalità non potrai usare una tecnica di machine learning, ma dovrai analizzare ogni singola traccia, pertanto dovrai per forza di cose puntare ad una rete lstm( per processare sequenze di dati come le canzoni) oppure puntare sulla self attention.
L’analisi sarebbe da farsi solo se non trovo un database già con queste informazioni. Parlando del lato risorse però secondo me non occuperebbe così tanto. L’analisi del tempo, delle battute, del ritmo ecc sono cose che un qualsiasi software musicale fa ad occhi chiusi. Per la quantità delle tracce a 7k non ci arriverò mai. Non credo di aver mai anche ascoltato così tanti pezzi

I modelli per farsì che siano utili devono conservare una proprietà durante il train: la generalizzazione. In parole spiccie se hai pochi dati aumenti il rischio di overfittare, ovvero imparare a memoria le feature e non riuscire a predire le nuove con una accuratezza reale.
Per risorse intendo una gpu con almeno 12GB di ram ( e ci vorrà comunque del tempo per trainare )
Non c’è un qualsiasi modo per allenare l’algoritmo in mancanza di tanti dati? Considera che nella vita di qualsiasi persona uno non disporrà mai di così tanti pezzi raggruppati.
Per la gpu arrivo al massimo a 8gb
 
Il problema pricipale è la mancanza di dati, a cui non si può ovviare.
Puoi perderci tempo su se vuoi imparare qualcosa, ma non sarà assolutamente migliore di quello di spotify, non utilizzando queste tecniche. Puoi provare ad utilizzare un algoritmo genetico o un vns che ti minimizzi la tua funzione e a quel punto trovi ciò che ti interessa in modo deterministico, è una cosa fine a se stessa.

Puoi per passatempo provare a tirar su un K means, ma su metriche di un database.
 
E sarebbero più efficaci con così pochi dati?
Se pensati bene sì,sono sicuramente più semplici da implementare. Ho utilizzato il vns ed il ga in una pubblicazione sono discretamente efficaci. A volte incorrono in minimi locali perciò devi magari fare una media dei voti
 
Entrambi dovrebbero puntare ad un minimo locale, pertanto nel fine son simili. In base a come pensi la tua funzione di ottimizzazione opterai per uno o l'altro. Non c'è uno che va meglio.
Il vns è più veloce il ga è più preciso, non sono gli unici ovviamente. Se sei in gamba a livello matematico puoi provare un ottimizzazione bayesiana
 
Entrambi dovrebbero puntare ad un minimo locale, pertanto nel fine son simili. In base a come pensi la tua funzione di ottimizzazione opterai per uno o l'altro. Non c'è uno che va meglio.
Il vns è più veloce il ga è più preciso, non sono gli unici ovviamente. Se sei in gamba a livello matematico puoi provare un ottimizzazione bayesiana
....certooo

Facciamo che mi studio un attimo l'argomento, poi torno
 
Sarai sicuramente ironico, purtroppo però se ti interessa questo ramo non ci sono sconti. Non devi essere un matematico, ma devi essere in grado di comprendere ogni nozione di geometria, statistica e analisi principalmente.
 
Pubblicità
Pubblicità
Indietro
Top