Sistemi di raccomandazione: una guida completa ai modelli di machine learning

Nov 25 2022
Sfruttare i dati per aiutare gli utenti a scoprire nuovi contenuti Sistemi di raccomandazione: perché e come? I sistemi di raccomandazione sono algoritmi che forniscono suggerimenti personalizzati per gli elementi più rilevanti per ciascun utente. Con la massiccia crescita dei contenuti online disponibili, gli utenti sono stati inondati di scelte.

Sfruttare i dati per aiutare gli utenti a scoprire nuovi contenuti

Foto di Javier Allegue Barros su Unsplash

Sistemi di raccomandazione: perché e come?

I sistemi di raccomandazione sono algoritmi che forniscono suggerimenti personalizzati per gli elementi più rilevanti per ciascun utente. Con la massiccia crescita dei contenuti online disponibili, gli utenti sono stati inondati di scelte. È quindi fondamentale che le piattaforme web offrano consigli sugli articoli a ciascun utente, al fine di aumentare la soddisfazione e il coinvolgimento degli utenti.

YouTube consiglia i video agli utenti, per aiutarli a scoprire e guardare contenuti rilevanti per loro in mezzo a un numero enorme di contenuti disponibili. (Immagine per autore)

L'elenco seguente mostra esempi di piattaforme web note con un numero enorme di contenuti disponibili , che necessitano di sistemi di raccomandazione efficienti per mantenere gli utenti interessati.

  1. YouTube . Ogni minuto le persone caricano 500 ore di video , ovvero ci vorrebbero 82 anni a un utente per guardare tutti i video caricati solo nell'ultima ora.
  2. Spotify . Gli utenti possono ascoltare oltre 80 milioni di brani musicali e podcast .
  3. Amazzonia . Gli utenti possono acquistare più di 350 milioni di prodotti diversi .

Feedback esplicito vs Feedback implicito

Nei sistemi di raccomandazione, i modelli di apprendimento automatico vengono utilizzati per prevedere la valutazione rᵤᵢ di un utente u su un elemento i . Al momento dell'inferenza, raccomandiamo a ciascun utente u gli elementi l con la valutazione prevista più alta rᵤ .

Abbiamo quindi bisogno di raccogliere il feedback degli utenti, in modo da poter disporre di una verità di base per l'addestramento e la valutazione dei nostri modelli. Una distinzione importante deve essere fatta qui tra feedback esplicito e feedback implicito .

Feedback esplicito vs. implicito per i sistemi di raccomandazione. (Immagine per autore)

Il feedback esplicito è una valutazione fornita esplicitamente dall'utente per esprimere la propria soddisfazione per un articolo. Esempi sono: numero di stelle su una scala da 1 a 5 dato dopo l'acquisto di un prodotto, pollice su/giù dato dopo aver guardato un video, ecc. Questo feedback fornisce informazioni dettagliate su quanto un utente ha apprezzato un articolo, ma è difficile raccogliere poiché la maggior parte degli utenti in genere non scrive recensioni o fornisce valutazioni esplicite per ogni articolo che acquista.

Il feedback implicito , d'altra parte, presuppone che le interazioni utente-elemento siano un'indicazione delle preferenze. Esempi sono: cronologia degli acquisti/navigazione di un utente, elenco dei brani riprodotti da un utente, ecc. Questo feedback è estremamente abbondante , ma allo stesso tempo è meno dettagliato e più rumoroso (es. qualcuno potrebbe acquistare un prodotto come regalo per qualcun altro). Tuttavia, questo rumore diventa trascurabile rispetto alla vastità dei dati disponibili di questo tipo e la maggior parte dei moderni sistemi di raccomandazione tende a fare affidamento su feedback impliciti .

Matrice di valutazione degli elementi utente per set di dati di feedback espliciti e feedback impliciti. (Immagine per autore)

Dopo aver raccolto feedback espliciti o impliciti, possiamo creare la matrice di valutazione degli elementi utente rᵤᵢ . Per un feedback esplicito, ogni voce in rᵤᵢ è un valore numerico, ad esempio rᵤᵢ = "stelle date da te al film i " o "?" se l'utente u non ha valutato l'articolo i . Per il feedback implicito, i valori in rᵤᵢ sono valori booleani che rappresentano la presenza o la mancanza di interazione, ad esempio rᵤᵢ = "l'utente ha guardato il film i ?". Si noti che la matrice rᵤᵢè molto scarso, poiché gli utenti interagiscono con pochi elementi tra tutti i contenuti disponibili e recensiscono ancora meno elementi!

Approcci di filtraggio basati sul contenuto e collaborativi

Il sistema di raccomandazione può essere classificato in base al tipo di informazioni utilizzate per prevedere le preferenze dell'utente come filtraggio basato sul contenuto o collaborativo.

Approcci di filtraggio basati sul contenuto e collaborativi per i sistemi di raccomandazione. (Immagine per autore)

Approccio basato sui contenuti

I metodi basati sul contenuto descrivono gli utenti e gli elementi in base ai loro metadati noti . Ogni elemento i è rappresentato da una serie di tag pertinenti, ad esempio i film della piattaforma IMDb possono essere etichettati come "azione", "commedia", ecc. Ogni utente u è rappresentato da un profilo utente, che può essere creato da informazioni utente note: ad esempio sesso ed età o dall'attività passata dell'utente.

Per addestrare un modello di Machine Learning con questo approccio possiamo utilizzare un modello k-NN . Ad esempio, se sappiamo che l'utente ha acquistato un articolo i , possiamo consigliarti gli articoli disponibili con caratteristiche più simili a i .

Il vantaggio di questo approccio è che i metadati degli elementi sono noti in anticipo, quindi possiamo applicarlo anche a scenari di avvio a freddo in cui un nuovo elemento o utente viene aggiunto alla piattaforma e non abbiamo interazioni utente-elemento per addestrare il nostro modello . Gli svantaggi sono che non utilizziamo il set completo di interazioni utente-elemento note (ogni utente viene trattato in modo indipendente) e che abbiamo bisogno di conoscere le informazioni sui metadati per ciascun elemento e utente.

Approccio di filtraggio collaborativo

I metodi di filtraggio collaborativo non utilizzano i metadati dell'elemento o dell'utente, ma cercano invece di sfruttare i feedback o la cronologia delle attività di tutti gli utenti per prevedere la valutazione di un utente su un determinato elemento deducendo le interdipendenze tra gli utenti e gli elementi dalle attività osservate.

Per addestrare un modello di Machine Learning con questo approccio in genere proviamo a raggruppare o fattorizzare la matrice di valutazione rᵤᵢ per fare previsioni sulle coppie non osservate ( u,i ), ovvero dove rᵤᵢ = “?”. Di seguito in questo articolo presentiamo l' algoritmo Matrix Factorization , che è il metodo più popolare di questa classe.

Il vantaggio di questo approccio è che viene utilizzato l'intero insieme di interazioni utente-elemento (ovvero la matrice rᵤᵢ ), che tipicamente consente di ottenere una precisione maggiore rispetto all'utilizzo di modelli Content-Based. Lo svantaggio di questo approccio è che richiede alcune interazioni dell'utente prima che il modello possa essere adattato.

Approcci ibridi

Infine, esistono anche metodi ibridi che tentano di utilizzare sia i metadati noti sia l'insieme delle interazioni utente-elemento osservate. Questo approccio combina i vantaggi dei metodi Content-Based e Collaborative Filtering e consente di ottenere i migliori risultati. Più avanti in questo articolo presentiamo LightFM , che è l'algoritmo più popolare di questa classe di metodi.

Filtraggio collaborativo: fattorizzazione della matrice

Gli algoritmi di fattorizzazione della matrice sono probabilmente i metodi di filtraggio collaborativo più popolari ed efficaci per i sistemi di raccomandazione. La fattorizzazione matriciale è un modello a fattori latenti assumendo che per ogni utente u e elemento i ci siano rappresentazioni vettoriali latenti pᵤ, qᵢ R ᶠ st rᵤᵢ possono essere espresse univocamente – cioè “fattorizzate” – in termini di pᵤ e qᵢ . La libreria Python Surprise fornisce eccellenti implementazioni di questi metodi.

Fattorizzazione della matrice per feedback esplicito

L'idea più semplice è modellare le interazioni utente-elemento attraverso un modello lineare . Per conoscere i valori di pᵤ e qᵢ , possiamo minimizzare una perdita MSE regolarizzata sull'insieme K di coppie ( u , i ) per le quali rᵤᵢ è noto. L'algoritmo così ottenuto prende il nome di fattorizzazione probabilistica della matrice (PMF) .

Fattorizzazione matriciale probabilistica: modello per rᵤᵢ e funzione di perdita.

La funzione di perdita può essere minimizzata in due modi diversi. Il primo approccio consiste nell'utilizzare la discesa del gradiente stocastico (SGD) . SGD è facile da implementare, ma potrebbe avere alcuni problemi perché sia ​​pᵤ che qᵢ sono entrambi sconosciuti e quindi la funzione di perdita non è convessa. Per risolvere questo problema, possiamo in alternativa fissare il valore pᵤ e qᵢ e ottenere un problema di regressione lineare convessa che può essere facilmente risolto con i minimi quadrati ordinari (OLS) . Questo secondo metodo è noto come minimi quadrati alternati (ALS) e consente una significativa parallelizzazione e accelerazione.

L'algoritmo PMF è stato successivamente generalizzato dall'algoritmo di decomposizione del valore singolare (SVD) , che ha introdotto termini di bias nel modello. Più specificamente, bᵤ e bᵢ misurano rispettivamente le deviazioni di valutazione osservate dell'utente u e dell'elemento i , mentre μ è la valutazione media complessiva. Questi termini spesso spiegano la maggior parte delle valutazioni osservate rᵤᵢ , poiché alcuni articoli ricevono ampiamente valutazioni migliori/peggiori e alcuni utenti sono costantemente più/meno generosi con le loro valutazioni.

Algoritmo SVD, una generalizzazione della fattorizzazione matriciale probabilistica.

Fattorizzazione della matrice per feedback implicito

Il metodo SVD può essere adattato a set di dati di feedback impliciti . L'idea è di considerare il feedback implicito come una misura indiretta di fiducia . Supponiamo che il feedback implicito tᵤᵢ misuri la percentuale di film i che l'utente u ha visto — ad esempio tᵤᵢ = 0 significa che non hai mai visto i , tᵤᵢ = 0.1 significa che ne ha guardato solo il 10%, tᵤᵢ = 2 significa che ha guardato due volte. Intuitivamente, è più probabile che un utente sia interessato a un film che ha visto due volte, piuttosto che a un film che non ha mai visto. Definiamo quindi a matrice di confidenza cᵤᵢ e una matrice di valutazione rᵤᵢ come segue.

Matrice di confidenza e matrice di rating per il feedback implicito.

Quindi, possiamo modellare la rᵤᵢ osservata utilizzando lo stesso modello lineare utilizzato per SVD, ma con una funzione di perdita leggermente diversa. Innanzitutto, calcoliamo la perdita su tutte le coppie ( u , i ) — a differenza del caso esplicito, se l'utente u non ha mai interagito con i abbiamo rᵤᵢ = 0 invece di rᵤᵢ = "?" . In secondo luogo, pesiamo ogni termine di perdita in base alla fiducia cᵤᵢ che ti piace i.

Funzione di perdita per SVD per feedback implicito.

Infine, l' algoritmo SVD++ può essere utilizzato quando abbiamo accesso a feedback sia espliciti che impliciti. Questo può essere molto utile, perché in genere gli utenti interagiscono con molti elementi (= feedabck implicito) ma ne valutano solo un piccolo sottoinsieme (= feedback esplicito). Indichiamo, per ogni utente u , l'insieme N(u) di elementi con cui u ha interagito. Quindi, assumiamo che un'interazione implicita con un elemento j sia associata a un nuovo vettore latente zⱼR . L'algoritmo SVD++ modifica il modello lineare di SVD includendo nella rappresentazione dell'utente una somma ponderata di questi fattori latenti zⱼ.

SVD++ per feedback misto (esplicito + implicito).

Approccio ibrido: LightFM

I metodi di filtraggio collaborativo basati sulla fattorizzazione della matrice spesso producono risultati eccellenti, ma in scenari di avvio a freddo , in cui sono disponibili pochi o nessun dato di interazione per nuovi elementi e utenti, non possono fare buone previsioni perché mancano i dati per stimare i fattori latenti. Gli approcci ibridi risolvono questo problema sfruttando elementi noti o metadati dell'utente per migliorare il modello di fattorizzazione della matrice. La libreria Python LightFM implementa uno degli algoritmi ibridi più popolari.

In LightFM, assumiamo che per ogni utente u abbiamo raccolto un insieme di annotazioni di tag Aᵁ(u) — ad esempio “maschio” , “età < 30” , … — e allo stesso modo ogni elemento i ha un insieme di annotazioni Aᴵ(i) — es. “price > 100 $” , “book” , … Poi modelliamo ogni user tag da un fattore latente xᵁₐ R ᶠ e da un termine di bias bᵁₐ R , e assumiamo che la rappresentazione vettoriale dell'utente pᵤ e il suo bias associato bᵤ può essere espresso semplicemente come la somma di questi termini xᵁₐe bᵁₐ , rispettivamente. Adottiamo lo stesso approccio per i tag degli articoli, utilizzando fattori latenti xᴵₐ ∈ Rᶠ e termini di bias bᴵₐ ∈ R. Una volta definiti pᵤ, qᵢ, bᵤ, bᵢ utilizzando queste formule, possiamo utilizzare lo stesso modello lineare di SVD per descrivere la relazione tra questi termini e rᵤᵢ .

LightFM: gli incorporamenti e i bias utente/elemento sono la somma dei vettori latenti associati a ciascun utente/elemento.

Si noti che ci sono tre casi interessanti di questo approccio ibrido di LightFM.

  1. Partenza a freddo. Se abbiamo un nuovo elemento i con tag noti Aᴵ(i) , allora possiamo usare i vettori latenti xᴵₐ (ottenuto adattando il nostro modello sui dati precedenti) per calcolare il suo incorporamento qᵢ , e quindi stimare per ogni utente u la sua valutazione rᵤᵢ .
  2. Nessun tag disponibile. Se non disponiamo di metadati noti per elementi o utenti, l'unica annotazione che possiamo utilizzare è una funzione indicatore, ovvero un'annotazione diversa a per ciascun utente e ciascun elemento. Quindi, le matrici delle caratteristiche dell'utente e dell'elemento sono matrici di identità e LightFM si riduce a un classico metodo di filtraggio collaborativo come SVD.
  3. Basato sul contenuto vs. ibrido. Se utilizzassimo solo tag utente o elemento senza annotazioni indicatore, LightFM sarebbe quasi un modello basato sul contenuto. Quindi, in pratica, per sfruttare le interazioni utente-elemento, aggiungiamo anche ai tag noti un'annotazione dell'indicatore diversa da ciascun utente e elemento .
  • I sistemi di raccomandazione sfruttano gli algoritmi di apprendimento automatico per aiutare gli utenti inondati di scelte nella scoperta di contenuti pertinenti.
  • Feedback esplicito vs. implicito : il primo è più facile da sfruttare, ma il secondo è molto più abbondante.
  • I modelli basati sul contenuto funzionano bene in scenari di avvio a freddo, ma richiedono la conoscenza dei metadati dell'utente e dell'elemento .
  • I modelli di filtraggio collaborativo utilizzano tipicamente la fattorizzazione della matrice: PMF, SVD, SVD per il feedback implicito, SVD++.
  • I modelli ibridi sfruttano il meglio del filtraggio collaborativo e basato sui contenuti. LightFM è un ottimo esempio di questo approccio.
  • Wikipedia, sistema di raccomandazione .
  • "Surprise", documentazione del pacchetto Python .
  • (S. Funk 2006), Aggiornamento Netflix: provalo a casa.
  • (R. Salakhutdinov 2007), Fattorizzazione matriciale probabilistica.
  • ( Y. Hu 2008), Filtraggio collaborativo per dataset di feedback impliciti .
  • (Y. Koren 2009), Tecniche di fattorizzazione della matrice per sistemi di raccomandazione .
  • (Y. Koren 2008) La fattorizzazione incontra il vicinato: un modello di filtraggio collaborativo poliedrico.
  • ( M. Kula 2015), Integrazioni di metadati per suggerimenti per l'avvio a freddo di utenti e articoli .