🎵 Raccomandatore Musicale — Fattorizzazione a Matrice (ALS) dal Vivo
Osserva la vera fattorizzazione a matrice tramite alternating least squares apprendere dal vivo i vettori latenti di ascoltatori e brani, con raccomandazioni musicali aggiornate in tempo reale mentre i fattori appresi convergono.
Informazioni su questa simulazione
Questa simulazione costruisce una matrice sintetica di conteggi di ascolto ascoltatore × brano con una vera struttura a basso rango sepolta nel rumore, poi la fattorizza con un vero alternating least squares (ALS). Ogni passata risolve un sistema lineare regolarizzato esatto — equazioni normali tramite eliminazione gaussiana con pivoting parziale — prima per ogni riga ascoltatore tenendo fissi i vettori dei brani, poi per ogni riga brano tenendo fissi i vettori degli ascoltatori. Non c'è discesa del gradiente, nessun tasso di apprendimento calibrato a mano: ogni aggiornamento di riga è il minimizzatore ai minimi quadrati in forma chiusa del proprio sotto-problema, e l'errore di ricostruzione può solo migliorare o restare stabile a ogni mezza passata.
🔬 Cosa mostra
A sparse ratings matrix (about 28 listeners, 42 tracks, roughly 40% observed) is generated from hidden taste and genre clusters plus noise, then split into training and held-out entries. ALS learns k-dimensional listener vectors U and track vectors V so that U·Vᵀ reconstructs the observed plays. A Jacobi eigenvalue decomposition projects the learned k-dimensional factors onto their top-3 principal components for the 3D scene, and a live chart tracks RMSE on both the training entries and the held-out entries every iteration.
🎮 Come si usa
Adjust the number of latent factors k (2–12), the regularization strength λ, and the maximum ALS iterations, then press Run ALS to animate the sweeps, or Step to advance one sweep at a time. Pick any simulated listener from the dropdown to see their observed play history and the live top-6 track recommendations, highlighted with connecting lines in the 3D latent space. Drag to orbit the scene and scroll to zoom.
💡 Lo sapevi?
ALS became the workhorse of large-scale collaborative filtering — including Spark's MLlib and early Netflix-style recommenders — specifically because each half-sweep is an exact, parallelizable least-squares solve rather than an iterative gradient method, so it converges in a handful of sweeps and scales to millions of rows by distributing the independent per-row solves.
Domande frequenti
Cos'è la fattorizzazione a matrice in un sistema di raccomandazione?
La fattorizzazione a matrice approssima una grande matrice di valutazioni ascoltatore-per-brano R, per lo più vuota, come prodotto di due matrici molto più piccole, U (ascoltatori × k fattori latenti) e V (brani × k fattori latenti), in modo che R ≈ U·Vᵀ. Ogni fattore latente è un asse di gusto non etichettato — uno potrebbe correlare con il tempo, un altro con la produzione acustica rispetto a quella elettronica — appreso automaticamente dagli ascolti osservati anziché progettato a mano. Una volta appresi U e V, l'affinità prevista per qualsiasi coppia ascoltatore-brano, anche mai osservata, è semplicemente il prodotto scalare dei loro due vettori latenti.
Come funziona realmente l'alternating least squares (ALS)?
ALS sfrutta il fatto che, mentre ottimizzare congiuntamente U e V è un problema non convesso, ottimizzare U da solo con V tenuto fisso (o viceversa) è un'ordinaria regressione lineare regolarizzata con soluzione in forma chiusa. Ogni passata ALS prima fissa V e, per ogni riga ascoltatore, risolve le equazioni normali k×k (Vᵀ_ᵢV_ᵢ + λ|I_u|·I)u = Vᵀ_ᵢr_ᵢ usando solo i brani osservati di quell'ascoltatore. Poi fissa la U appena aggiornata e risolve un sistema analogo per ogni riga brano. Alternare queste due soluzioni esatte ai minimi quadrati diminuisce ripetutamente e monotonamente l'errore di ricostruzione regolarizzato fino a convergere.
Perché usare una soluzione ai minimi quadrati in forma chiusa invece della discesa del gradiente?
Poiché ogni sotto-problema ALS — aggiornare una riga mentre l'altra matrice di fattori è congelata — è una quadratica piccola e ben condizionata in k incognite, ha una soluzione esatta tramite le equazioni normali, ottenuta qui con l'eliminazione gaussiana e il pivoting parziale. Questo converge in un solo passo per riga invece di richiedere un tasso di apprendimento calibrato e molte iterazioni di gradiente, rende ogni mezza passata banalmente parallela tra le righe, ed è il motivo per cui ALS è diventato l'algoritmo di fattorizzazione a matrice predefinito per i sistemi di feedback implicito su larga scala, come i primi raccomandatori in stile Netflix e Spotify.
Cosa cambiano i controlli k, regolarizzazione e iterazioni?
k imposta la dimensionalità dello spazio latente del gusto — troppo piccolo sottoadatta generi distinti, troppo grande può sovradattarsi agli ascolti osservati sparsi e peggiorare l'RMSE held-out. La forza di regolarizzazione λ penalizza i valori dei fattori elevati nelle equazioni normali, scambiando accuratezza di addestramento con generalizzazione verso brani che un ascoltatore non ha ancora ascoltato. Il numero di iterazioni controlla quante passate alternate U/V vengono eseguite; l'RMSE sugli ingressi di addestramento osservati scende rapidamente nelle prime passate e poi si appiattisce man mano che la fattorizzazione converge.
Perché l'RMSE held-out può iniziare a salire mentre l'RMSE di addestramento continua a scendere?
L'RMSE di addestramento è misurato sugli ascolti esatti a cui ALS è stato adattato, quindi con abbastanza fattori latenti e passate può continuare a restringersi verso zero. L'RMSE held-out è misurato su ascolti deliberatamente esclusi dall'adattamento, quindi una volta che i fattori iniziano a memorizzare le peculiarità degli ascolti di addestramento anziché la struttura generale del gusto, l'errore held-out può stabilizzarsi o risalire lentamente — la classica firma dell'overfitting, ed esattamente il motivo per cui la regolarizzazione λ e un k moderato contano più dell'inseguire il minor errore di addestramento possibile.
Real alternating least squares over a sparse synthetic listener-track matrix: closed-form regularized normal equations solved per row via Gaussian elimination, RMSE tracked on training and held-out entries every sweep, and a Jacobi eigenvalue decomposition projecting the learned latent factors into 3D for live visualization.
3D · Three.js / WebGL renderer · 60 FPS target · esegue interamente lato client, nessuna installazione richiesta