Proposta di tesi s249863
Closed this issue · 4 comments
Studente proponente
s249863 Marra Carlo
Titolo della proposta
Sviluppo di un'applicazione software per la generazione automatica di playlist attraverso la ricerca ricorsiva e grafi pesati.
Descrizione del problema proposto
Creare una playlist soddisfacente è una sfida comune per ogni individuo. Ogni persona ha gusti musicali unici e mutevoli, rendendo difficile la selezione di brani che rispecchino perfettamente il proprio umore e le preferenze del momento. La vasta gamma di generi musicali, artisti e canzoni disponibili rende ancora più complicata la creazione di una playlist che riesca a catturare l'essenza di chi siamo. La soluzione proposta mira alla ricerca della miglior playlist possibile a seguito di alcune linee guida dell’utente.
Descrizione della rilevanza gestionale del problema
Per molti individui, trovare una playlist adatta alla situazione può svolgere un ruolo significativo nella motivazione per iniziare un progetto o un viaggio. La musica ha il potere di influenzare le nostre emozioni, creando l'atmosfera e l'energia desiderate. Una playlist ben selezionata può stimolare la creatività, migliorare il focus, la produttività e amplificare l'entusiasmo per l'attività imminente.
Descrizione dei data-set per la valutazione
Il data-set utilizzato sarà “Spotify - All Time Top 2000s Mega Dataset“. Questo dataset contiene le statistiche audio di 2000 brani tra i più ascoltati su Spotify. I dati comprendono circa 15 colonne che descrivono ogni brano e le sue caratteristiche. Sono inclusi brani pubblicati dal 1956 al 2019 di artisti noti e famosi come Queen, The Beatles, Guns N' Roses, ecc.
Indirizzo data-set: https://www.kaggle.com/datasets/iamsumat/spotify-top-2000s-mega-dataset
Questi dati sono estratti dalla playlist di Spotify “Top 2000s“ su PlaylistMachinery utilizzando Selenium con Python. Più specificamente, sono stati raccolti da http://sortyourmusic.playlistmachinery.com/.
Contenuto:
Index: ID
Title: Nome del brano
Artist: Nome dell’artista
Top Genre: Genere del brano
Year: Anno di rilascio del brano
Beats per Minute(BPM): Battiti per minuto medi delle canzone
Energy: L’”energia” di una canzone. Più alto è il valore, più è energica la canzone. I valori vanno da 0 a 100.
Danceability: Più alto è il valore, più facile è ballare su questo brano. I valori vanno da 0 a 100.
Loudness (dB): Più alto è il valore, più alta è l'intensità del volume del brano.
Valence: Più alto è il valore, più positivo è l'umore della canzone. I valori vanno da 0 a 100.
Length: La durata del brano.
Acoustic: Più alto è il valore, più acustica è la canzone. La musica acustica (o unplugged) comprende la musica che usa principalmente strumenti che producono il suono con mezzi acustici, anziché elettrici o elettronici. I valori vanno da 0 a 100.
Speechiness: Più alto è il valore, più parole parlate contiene la canzone. I valori vanno da 0 a 100.
Popularity: Più alto è il valore, più popolare è la canzone. I valori vanno da 0 a 100.
Descrizione preliminare degli algoritmi coinvolti
L'applicazione si dividerà in due sezioni indipendenti: la sezione "Surprise Me" e la sezione "My Mix".
Sezione "Surprise Me"
L’utente avrà il compito di specificare alcuni requisiti che il risultato dovrà soddisfare. Tra queste vi sono:
- L’intervallo di anni in cui le tracce della playlist sono state pubblicate.
- Il genere musicale della playlist desiderata e, una volta scelto, facoltativamente l’artista preferito appartenente al genere scelto precedentemente.
- Il grado di presenza richiesta delle cinque caratteristiche principali, Energia (E), Ballabilità (D), Positività (V), Acustica (A) e Popolarità (P) attraverso un punteggio da 1 a 10.
Gli input ricevuti saranno usati per creare un grafo pesato in cui i nodi saranno tutte le canzoni che soddisfano il genere scelto e l’anno di pubblicazione desiderato.
Ad ogni traccia verrà attribuito un punteggio di affinità con le cinque caratteristiche richieste.
Dati i cinque gradi (
Attraverso questo punteggio, il peso di ciascun vertice sarà calcolato attraverso la differenza (in valore assoluto) di punteggio dei due nodi, di conseguenza un peso basso corrisponderà ad un alta affinità.
Una volta ottenuto il grafo, si procederà con una ricerca ricorsiva (opportunamente ottimizzata) che troverà la playlist con il più basso valore totale di vertici percorsi. In caso di più possibili affinità con il brano successivo e la presenza di una brano dell’artista preferito, la scelta ricadrà su quest’ultimo in caso di pesi dei vertici simili.
L’idea di limitare la ricerca ad un singolo genere potrà essere allargata a due o più in caso di buone prestazioni dell’algoritmo.
La playlist trovata sarà poi inserita all’interno della tabella dell’applicazione software e il suo punteggio all’intento della casella di testo sottostante.
Nel caso in cui, a seguito del termine della ricerca, la playlist non superi la metà del numero minimo di canzoni o del minimo di minuti richiesti, l’applicazione si occuperà di segnalarlo all’utente e proporrà alcune modifiche da effettuare sui requisiti.
Sezione "My Mix"
L'utente potrà aggiungere, prima della ricerca, le sue canzoni preferite inserendo rispettivamente genere, artista e brano.
Una volta aggiunte, potrà decidere il numero massimo di canzoni nella playlist o il numero massimo di minuti totali.
A quel punto si procederà allo studio delle canzoni inserite per creare una playlist che sia coerente per genere, span di anno di pubblicazione e attributi.
Per la determinazione dei gusti dell'utente si farà la media della somma di ciascun attributo del brano i-esimo.
Preso come esempio l'attributo "Popolarità" e
Il punteggio di ciascun potenziale brano sarà quindi:
La divisione di ciascun fattore per 10 è solamente per rendere i punteggi consistenti con quelli della prima sezione (da 1 a 10).
Si procederà quindi, come nella sezione precedente, alla creazione del grafo pesato con le relative affinità e alla ricerca ricorsiva della playlist ottima.
Nota
Nonostante questo progetto sia molto simile ad un altro proposto poco meno di tre anni fa da un altro studente, le similitudini si trovano solo nel database utilizzato (stessi attributi associati a ciascun brano) e nell’obiettivo del progetto in sé.
Le differenze sostanziali si trovano nel processo di creazione del risultato ottimo, nel criterio di selezione dei brani, di identificare l’affinità tra loro (quindi con le richieste dell’utente) e di conseguenza nell’applicazione software adibita a ricevere gli input dell’utente.
Una playlist musicale è, per definizione, una lista di brani musicali selezionati e organizzati in un determinato ordine per essere riprodotti in successione, per questo la ricerca ricorsiva sarà preceduta dalla creazione di un grafo pesato che permetterà alla prima di creare una playlist che segua un ordine coerente.
Descrizione preliminare delle funzionalità previste per l’applicazione software
L’applicazione software di ciascuna delle due sezioni sarà divisa graficamente in VBox parti, una a sinistra e una a destra, rispettivamente per la descrizione delle preferenze e per la visione del risultato ottenuto.
Sezione "Surprise Me"
La parte di sinistra conterrà nello specifico:
- Due TextArea per la scelta del numero massimo di brani richiesto e per i minuti massimi totali della playlist. Queste due TextArea saranno accompagnate da due CheckBox per segnalare quali dei due vincoli l’utente preferisce che venga rispettato.
- Una ChoiceBox per la scelta del genere preferito. Il genere scelto servirà a costruire il grafo su cui eseguire la ricerca.
- Una ChoiceBox per la scelta dell’artista preferito. Questa verrà compilata al momento della scelta del genere preferito.
- Due TextArea per la scelta rispettivamente dell’anno minimo e massimo della pubblicazione dei brani da inserire (dal 1956 al 2019). Se lasciato in bianco, non si avranno vincoli.
- Cinque Slider orizzontali che, attraverso una scala da 1 a 10, serviranno all’utente per condividere i propri gusti e aspettative sulla playlist finale. I cinque attributi degli Slider saranno Energia, Ballabilità, Positività, Acustica e Popolarità.
- Due bottoni per il reset degli input e per l’avvio della ricerca.
La VBox di destra conterrà:
- Una tabella per la visualizzazione del risultato finale.
- Una casella di testo non modificabile per la segnalazione di errori dell’utente.
Sezione "My Mix"
La parte di sinistra conterrà nello specifico:
- Due TextArea per la scelta del numero massimo di brani richiesto e per i minuti massimi totali della playlist. Queste due TextArea saranno accompagnate da due CheckBox per segnalare quali dei due vincoli l’utente preferisce che venga rispettato.
- Una ChoiceBox per la scelta del genere preferito. Il genere scelto servirà a costruire il grafo su cui eseguire la ricerca.
- Una ChoiceBox per la scelta dell’artista preferito. Questa verrà compilata al momento della scelta del genere preferito.
- Una ChoiceBox per la scelta del brano dell'artista preferito. Questa verrà compilata al momento della scelta dell'artista preferito.
- Tre bottoni, rispettivamente per il reset degli input, per l’avvio della ricerca e per l'aggiunta della canzone selezionata alla playlist di partenza.
La VBox di destra conterrà:
- Una tabella per la visualizzazione del risultato finale.
- Una casella di testo non modificabile per la segnalazione di errori dell’utente.
Per concludere, in ciascun tab si avrà in basso una Label che conterrà alcune linee guida per la buona riuscita dell’applicazione e una piccola descrizione di ciascun valore degli slider.
Non mi è del tutto chiara la struttura del grafo che hai in mente.
Se i nodi (o vertici) rappresentano ciascuno una canzone, allora che cosa rappresenta un arco del grafo?
Nella frase "il peso di ciascun vertice sarà calcolato attraverso la differenza (in valore assoluto) di punteggio dei due nodi" non mi è chiaro che cosa intendi, perché "vertice" e "nodo" in realtà sono sinonimi nei grafi.
Probabilmente questo problema si può risolvere senza fare uso di grafi. Ciò non sarebbe un problema, la componente algoritmica è ampiamente rappresentata dalle parti successive.
Farei anche molta attenzione all'approccio ricorsivo (occorre limitarlo fortemente, altrimenti la vastità di questo data-set renderà la ricerca infinitamente lunga).
Fammi sapere in merito al grafo, grazie.
Sì, mi perdoni, è stato un errore di battitura, la frase corretta sarebbe dovuta essere:
"il peso di ciascun arco sarà calcolato attraverso la differenza (in valore assoluto) di punteggio dei due nodi"
Volendo fare un esempio:
Nodo A: punteggio di 1270;
Nodo B: punteggio di 599;
Nodo C: punteggio di 1528;
Partendo dal nodo A:
L'arco A-B ha un peso di
L'arco A-C ha un preso di
L'algoritmo prediligerà fortemente il nodo C, scartando il B e velocizzando la ricorsione.
In alternativa si potrebbe addirittura non inserire archi che superano un certo peso prima che la ricorsione inizi, permettendo di avere meno strade possibili da percorrere.
ok, ma il grafo è un grafo completo? perché in questo caso forse il grafo non serve (basta una lista?), e le differenze le posso calcolare direttamente durante la ricorsione.
Comunque questi sono dettagli legati all'implementazione, per il momento la proposta è approvata e puoi iniziare a lavorarci.
Innanzitutto, grazie mille.
Per quanto riguarda il grafo, l'idea è quella di inserire gli archi al di sotto di un certo peso, al fine di velocizzare la ricorsione. Le differenze più alte non saranno considerate strade percorribili in principio e dunque non inseriti nel grafo.