In che modo le aziende utilizzano il filtro collaborativo per imparare esattamente ciò che desideri

Foto di Jens Johnsson su Unsplash

In che modo aziende come Amazon e Netflix sanno esattamente cosa vuoi? Sia che si tratti di quel nuovo set di altoparlanti che hai visto negli occhi, o del prossimo episodio di Black Mirror, il loro uso di algoritmi predittivi ha reso il lavoro di vendita di oggetti incredibilmente efficiente.

Ma per quanto a tutti noi piacerà una succosa teoria della cospirazione, no, non impiegano sensitivi.

Usano qualcosa di molto più magico: la matematica. Oggi esamineremo un approccio chiamato filtro collaborativo.

Che cos'è esattamente il filtro collaborativo?

Come menziona Jeremy Howard nel suo fantastico corso di deep learning su fast.ai, i modelli strutturati di deep learning non ottengono molto amore in questi giorni.

Probabilmente perché non vedresti cose del genere:

Fonte: https://cdn.vox-cdn.com/thumbor/NN7jTnph9VCkyyt2nrTFml3XbYw=/0x0:600x338/1200x800/filters:focal(252x121:348x217):no_upscale()/cdn.vox-cdn.com/uploads/ch/ image / 57380619 / ezgif.com_gif_maker__1_.0.gif

Ma gli algoritmi strutturati come il filtro collaborativo sono quelli usati più spesso nel mondo reale. Sono la ragione per cui le cose che compaiono in fondo alla pagina su Amazon sembrano così allettanti da acquistare.

Fonte: https://www.highspot.com/wp-content/uploads/Amazon_Recommended_Edit.png

Il filtro collaborativo funziona secondo un principio fondamentale: è probabile che ti piaccia ciò che piace a qualcuno simile a te.

Il compito dell'algoritmo è trovare qualcuno che abbia abitudini di acquisto o di osservazione simili alle tue e suggerirti a cosa ha assegnato un punteggio elevato.

Può anche funzionare al contrario.

L'algoritmo può consigliare un prodotto simile a un altro prodotto a cui in precedenza hai assegnato un punteggio elevato. Tutto questo controllo di somiglianza e confronto viene effettuato da un'algebra lineare abbastanza semplice (matematica matriciale).

Fonte: https://johnolamendy.files.wordpress.com/2015/10/01.png

È davvero così facile?

Non così in fretta. Prima di iniziare a gettare vettori e punti-prodotti, affrontiamo un problema significativo affrontato da qualsiasi algoritmo di sistema di raccomandazione: il problema dell'avvio a freddo.

Fonte: https://thermex-systems.com/wp-content/uploads/portathaw-cold-start-system-on-heavy-dump-truck.jpg

Vedi, il filtro collaborativo funziona bene quando hai due cose:

  • molti dati su ciò che piace a ciascun cliente (in base a ciò che in precedenza aveva valutato elevato)
  • molti dati su quale pubblico ogni film o prodotto potrebbe soddisfare (in base al tipo di persone che lo hanno valutato in alto).

E i nuovi utenti e i nuovi prodotti, per i quali non disponi di molte informazioni?

Fonte: https://1843magazine.static-economist.com/sites/default/files/styles/article-main-image-overlay/public/0312ILIN03-web.jpg

Il filtro collaborativo non funziona bene in questi scenari, quindi potresti dover provare qualcos'altro. Alcune soluzioni comuni implicano l'analisi dei metadati o il fare in modo che i nuovi utenti affrontino alcune domande per apprendere le loro preferenze iniziali.

Fonte: http://img.techiesparks.com/2015/07/apple-music-artists.png

Ok, ora sulle cose interessanti

Come la maggior parte dei problemi di apprendimento automatico, è probabilmente una buona idea dare prima un'occhiata ai dati. D'ora in poi, userò l'esempio di film e classificazioni (principalmente ispirato al set di dati Movielens utilizzato nel corso fast.ai).

Lo visualizzeremo costruendo una tabella di utenti rispetto alla partitura che hanno dato ai film.

Ogni riga rappresenta un utente e ogni colonna un film.

Il riferimento incrociato ti dirà quale valutazione un utente ha assegnato a un film (su una scala da 1 a 5, dove 0 significa "non ha guardato").

Considereremo il nostro modello di filtro collaborativo un successo se è in grado di riempire gli zeri. Ciò significherebbe che è in grado di prevedere in che modo ciascun utente classificherebbe un film, in base sia a come è l'utente che a come è il film.

Ora per l'algoritmo. Installeremo 2 matrici: una per gli utenti e un'altra per i film. Questi sono chiamati matrici di incorporamento. Chiamiamoli W_u (per gli utenti) e W_m (per i film).

Ogni matrice verrà riempita con vettori e-dimensionali (sostanzialmente matrici di dimensione e). Che cos'è e, chiedi? È un numero magico che affronterò più avanti. Per ora, lascia che sia il tuo numero naturale preferito.

Si noti che la tabella sopra, se si rimuovono le intestazioni di riga e colonna, sembra anche una matrice. Questa non è una coincidenza. Se hai familiarità con la moltiplicazione della matrice, saprai che una matrice 2 * 3 volte una matrice 3 * 2 produce una matrice 2 * 2.

Se vuoi saperne di più sulla moltiplicazione di matrici, dai un'occhiata a questa playlist sull'accademia di Khan.

Utilizzando la stessa logica, possiamo moltiplicare le nostre matrici di film e utenti. Le dimensioni funzioneranno esattamente nel modo giusto per dare una matrice delle dimensioni del set di dati della tabella originale (beh, tecnicamente devi trasporre una di esse, ma sto saltando i dettagli dell'implementazione).

Se possiamo imparare i valori delle voci nella nostra matrice di film e matrice di utenti, in teoria potremmo ripristinare la nostra tabella originale moltiplicando i due.

Abbiamo la nostra verità fondamentale: la tabella originale. Tutto quello che dobbiamo fare è capire i numeri (noti anche come pesi) che in qualche modo si moltiplicano per restituirci la tabella originale.

Inserisci l'arte mistica dell'apprendimento automatico.

Ecco come lo faremo:

  • Iniziamo con numeri completamente casuali nella matrice del film e nella matrice dell'utente.
  • Quindi, moltiplichiamo i due per ottenere un'altra matrice (che, a questo punto è anche completamente casuale) che assomiglia alla nostra tabella originale.
  • Confrontando i nostri valori previsti con i valori reali della tabella, definiamo una funzione di perdita. Questo è fondamentalmente una misura di quanto la nostra valutazione prevista fosse lontana dalla valutazione effettiva.

Nota, dobbiamo anche saltare gli zeri, poiché non vogliamo che il nostro modello preveda una valutazione di 0 per nessuno. Sarebbe piuttosto inutile.

Se vuoi maggiori informazioni sulle funzioni di perdita, consiglierei il video di Siraj Raval.

Dopo aver trovato le perdite, utilizziamo la backpropagation e la discesa gradiente per ottimizzare le due matrici per ottenere i valori giusti.

BOOM! Sono state fatte!

Ok, un breve riepilogo:

  • Abbiamo una tabella con le valutazioni che ogni utente ha assegnato a ciascun film. Se un utente non ha guardato il film, la tabella indica "0". Vogliamo prevedere gli zeri.
  • Per fare ciò, abbiamo creato due matrici, una per gli utenti e una per i film. Ogni matrice è fondamentalmente solo una pila di vettori e-dimensionali.
  • Per prevedere le valutazioni, moltiplichiamo le matrici per ottenere un'altra matrice che abbia la stessa forma della tabella in cui sono presenti le nostre previsioni. Inizialmente, il tavolo ha solo incomprensibili.
  • Ma dopo aver utilizzato le funzioni di perdita per trovare i nostri errori e aver utilizzato il duo dinamico di backpropagation e discesa del gradiente, ora abbiamo un modello in grado di prevedere con precisione la valutazione che un utente darebbe a un film. Dolce.

Ok ... ma perché funziona?

Ora se sei come me, lo capisci. Ma non lo capisci davvero. In che modo queste moltiplicazioni casuali leggono le menti? Perché non possiamo semplicemente eseguire il backprop della tabella originale e riempire gli zeri? Perché passare attraverso lo schema elaborato di cucinare due matrici separate e quindi ricostruire il tavolo? Perché? Perché? Perché? Pazienza, giovane cavalletta. Tutto è come vuole la forza.

Ricordi come ho detto che avrei affrontato il mistero della "e"? Bene, adesso lo sono.

Fonte: https://i.imgflip.com/1lai6f.jpg

Ricordiamo che le matrici che abbiamo costruito erano essenzialmente pile di vettori. Un vettore per utente e un vettore per film. Questa non è stata una decisione insignificante.

Ogni vettore è una rappresentazione di che tipo di persona è l'utente corrispondente. Condensa i tuoi gusti e antipatie, i tuoi pensieri e sentimenti, le tue speranze e paure, in un intorpidito. [].

Per capirlo meglio, ingrandiamo un determinato vettore utente, supponendo che e = 3:

Qui, i tre componenti del vettore sono [100, 0, 50]. Ogni componente rappresenta alcune caratteristiche dell'utente, che la macchina impara osservando la sua valutazione precedente.

Supponiamo (e questo non è proprio accurato, è solo un'analogia) che i tre componenti abbiano il seguente significato:

Spero che tu possa avere un'idea di come il vettore rappresenti l'idea delle preferenze dell'utente.

Quindi nell'esempio sopra, il nostro buon amico apparentemente ama i film d'azione, non è grande nei film romantici e ama anche i film commedia, ma non tanto quanto i film d'azione.

Ecco come il nostro modello di apprendimento automatico comprende la complessità umana, incorporandola in uno spazio vettoriale dimensionale.

Quindi e non è altro che un piccolo numero che scegliamo (chiamato iperparametro). Più è grande, più informazioni sfumate possiamo acquisire sui nostri utenti. Ma rendilo troppo grande e il calcolo richiederà troppo tempo.

Ma aspetta. È più bello. Dai un'occhiata a un vettore di film:

E ora, analizza il significato (interpretato dall'uomo) dei componenti:

Il nostro film di successo, m, sembra essere principalmente un film d'amore, con una buona dose di commedia cosparsa. E sappiamo tutto questo senza nemmeno guardare il film o leggere una recensione da soli!

Osservando quali tipi di utenti hanno dato punteggi alti e bassi ai film, l'algoritmo può ora creare vettori che rappresentano l'essenza di come è un film.

Per il gran finale, considera come potremmo usare queste informazioni. Abbiamo un utente, un film, m. Entrambi sono vettori. Come possiamo prevedere quale valutazione potresti dare a m? Usiamo il prodotto punto.

Il prodotto punto è quello che ottieni quando moltiplichi i componenti di un vettore con i componenti di un altro e sommi i risultati. Il risultato è uno scalare (un numero reale regolare, senza stringhe, buono e vecchio stile).

Quindi, nel nostro caso, il prodotto punto di u e m sarà:

Un misero 1350. Bene, tutto è relativo. Ma avremmo ottenuto un numero considerevolmente maggiore se non avessimo moltiplicato due dei componenti per 0.

È abbastanza chiaro che sarebbe una cattiva idea raccomandare m a te. Un'idea terribile, in effetti.

Possiamo migliorare ulteriormente il nostro modello

Per ottenere la previsione effettiva della valutazione, schiacciamo il valore scalare attraverso una funzione sigmoide ridimensionata, che limita il risultato tra 0 e 5.

Fonte: https://www.desmos.com/calculator/c4omt4vni3

Se sei un po 'preoccupato per tutti i trucchi ondulati che stiamo facendo, stai tranquillo, il computer può capire tutto.

In effetti, stiamo solo semplificando il suo lavoro, facendo cose come dire esplicitamente che tutte le valutazioni devono essere maggiori di 0 e inferiori a 5.

Ecco un altro trucco: prima di schiacciare il nostro valore scalare (chiamato attivazione) nella funzione sigmoide, possiamo aggiungere un piccolo numero chiamato bias, b. Ci saranno due pregiudizi, uno per ciascun utente e uno per ogni film.

Impilandoli insieme, otteniamo un vettore di bias per tutti gli utenti (insieme) e un vettore di bias per tutti i film (insieme). I pregiudizi spiegano che alcuni film sono universalmente amati / odiati e alcuni utenti che amano / odiano i film in generale.

E con ciò, ti presento l'equazione che può controllare la tua vita (o almeno le tue abitudini di acquisto / visualizzazione online):

Che cosa significa questo?

Per me, la parte più folle di tutto ciò è che stiamo parlando di concetti umani. Azione, romanticismo, commedia, simpatie, antipatie. Sono tutte idee umane. E pensare che tutti possano essere comunicati in un oggetto matematico è davvero affascinante.

Ora so che sono solo algoritmi e dati umani chiaramente definiti. Ma penso che ci sia ancora qualcosa di incredibile nel fatto che le moltiplicazioni matriciali possono insegnare ai computer chi siamo come individui.

Dopotutto, nonostante tutte le cose che ci rendono diversi - ciò che ci piace, ciò che sembriamo, con chi passiamo il tempo, dove siamo, come pensiamo, come interagiamo e come ci sentiamo - alle macchine che determinano cosa compriamo, ciò che guardiamo, con chi parliamo, cosa facciamo, dove trascorriamo il nostro tempo e dove non lo facciamo, siamo tutti elementi dello stesso spazio vettoriale lineare.

C'è bellezza in questo.