8

Sono in procinto di progettare un sito Web che è costruito attorno al concetto di raccomandare vari elementi agli utenti in base ai loro gusti. (ad esempio, articoli che hanno valutato, articoli aggiunti alla loro lista dei preferiti, ecc.) Alcuni esempi di questo sono Amazon, Movielens e Netflix.Creazione di un filtro collaborativo/Sistema di raccomandazione

Ora, il mio problema è che non sono sicuro da dove iniziare per quanto riguarda la parte matematica di questo sistema. Sono disposto a imparare la matematica che è richiesta, è solo che non so che tipo di matematica è richiesta.

Ho dato un'occhiata ad alcune delle pubblicazioni su Grouplens.org, in particolare "Towards a Scalable kNN CF Algorithm: Exploring Effective Applications of Clustering". (pdf) Sono abbastanza bravo a capire tutto fino alla pagina 5 "Generazione di pronostici"

p.s. Non sto cercando esattamente una spiegazione di cosa sta succedendo, anche se potrebbe essere utile, ma sono più interessato alla matematica che ho bisogno di sapere. In questo modo posso capire cosa sta succedendo.

risposta

8

Programming Collective Intelligence è un'introduzione al campo molto semplice, con un sacco di codice di esempio in Python. Per lo meno, aiuterà a preparare il terreno per la comprensione della matematica nei documenti accademici sull'argomento.

+0

Grazie per il suggerimento del libro! – John

5

Algorithm of the Intelligent Web (H Marmanis, D Babenko, Manning publishing) è un testo introduttivo sul tema. Copre anche i concetti di ricerca, ma il suo obiettivo principale è la classificazione, i sistemi di raccomandazione e così via. Questo dovrebbe essere un buon primer per il tuo progetto, permettendoti di fare le domande giuste e di scavare più a fondo dove le cose appaiono più promettenti o pratiche nella tua situazione.

Il libro include anche un "ripasso" di argomenti matematici rilevanti (principalmente algebra lineare), ma questo aggiornamento è minimo; farai meglio sul web.

Un modo piacevole per scoprire o tornare in algebra lineare è seguire Prof. Gilbert Strand's 18.06 lecture series disponibile su MIT OpenCourseWare.

algebra

lineare non è l'unica via di salvezza ;-) potreste trovare utile di rispolverare le statistiche concetti di base come la distribuzione, covarianza, inferenza bayesiana ...

+1

Grazie, darò un'occhiata al libro. E grazie per la serie di conferenze. – John

10

Mi spiego la procedura che la gli autori hanno introdotto (come ho capito):

ingresso:

  • dati formazione: utenti, articoli e valutazioni degli utenti a questi elementi (non necessariamente ogni utente valutazione All articoli)
  • utente target: un nuovo utente con alcune valutazioni di alcune voci
  • voce di destinazione: un elemento senza valutazione da parte dell'utente di destinazione che vorremmo prevedere un punteggio per questo.

uscita:

  • previsione per l'elemento bersaglio di utente di destinazione

Questo può essere ripetuto per un gruppo di elementi, e poi il ritorno gli articoli N-top (voti più alti previsti)

Procedura:
L'algoritmo è molto simile al metodo naive KNN (cerca tutti i dati di allenamento per trovare utenti con valutazioni simili per l'utente di destinazione, quindi combina i loro voti per dare la previsione [votazione]).
Questo semplice metodo non scala molto bene, poiché il numero di utenti/articoli aumenta.

L'algoritmo proposto è quello di raggruppare prima gli utenti di allenamento al K gruppi (gruppi di persone che hanno valutato gli elementi allo stesso modo), dove K < < N (N è il numero totale di utenti).
Quindi analizziamo quei cluster per individuare a quale utente di destinazione si trova più vicino (invece di guardare tutti gli utenti di formazione).
Infine selezioniamo l fuori da quelli e facciamo la nostra previsione come media ponderata dalla distanza a quelli l cluster.

Si noti che la misura di somiglianza utilizzata è il coefficiente correlation e l'algoritmo di clustering è l'algoritmo K-Means bisettrice. Possiamo semplicemente utilizzare lo standard kmeans e possiamo utilizzare anche altre metriche di similarità come Euclidean distance o distanza coseno.

La prima formula a pagina 5 è la definizione della correlazione:

corr(x,y) = (x-mean(x))(y-mean(y))/std(x)*std(y) 

La seconda formula è fondamentalmente una media pesata:

predRating = sum_i(rating_i * corr(target,user_i))/sum(corr(target,user_i)) 
       where i loops over the selected top-l clusters 

speranza che questo chiarisce cose un po ':)

+1

Grazie, è tutto ancora greco per me. Un giorno tornerò e tutto avrà un senso. :) – John

0

Probabilmente dovresti sapere:

  • algebra lineare
  • artificiale di apprendimento intelligenza/macchina/statistiche

Bello avere:

  • spazi metrici
  • topologia
  • EDA/statistiche robuste
  • algebra affine
  • Analisi funzionale
  • teoria dei grafi

Detto questo, si può andare lontano con solo buon senso. Se hai una lista di proprietà che vuoi che il tuo sistema soddisfi, sarai in grado di fare molto semplicemente scrivendo un codice che soddisfi queste proprietà.

Esempi possono essere:

  • mai fare una raccomandazione "cattivo"
  • punteggio viene monotonicamente crescente in alcuni parametri
  • tenere la porta aperta per X, Y, idea miglioramento Z che abbiamo per lungo la linea.
0

Da the official documentation del Abracadabra Recommender API, si inizia distinguendo tra:

  • Soggetti: Queste sono le entità che si desidera raccomandare a un utente. Un film o un articolo è ad esempio un soggetto. I soggetti sono caratterizzati dal fatto che hanno determinati attributi o contenuti che li distinguono tra i vari soggetti.

  • Attributi: un attributo è un termine generico per una caratteristica di un soggetto. Questo può essere qualsiasi cosa e dipende davvero da come si definisce l'argomento. Nell'esempio in cui il soggetto è un film, un attributo potrebbe essere il genere, ad es. avventura, azione, fantascienza. Un attributo potrebbe essere anche una parola chiave presente nella descrizione di questo film, il nome dell'attore, l'anno in cui è stato pubblicato un film, ecc.

  • Utenti: come suggerisce il nome, questa è la persona che desidera ricevere raccomandazioni su determinati argomenti.L'utente costruisce un profilo utente gradendo attributi o soggetti (e successivamente gli attributi allegati).

  • flusso C'è un flusso generale (ordine in cui viene fatto cose) che è rilevante per qualsiasi tipo di sistema di raccomandazione e che è anche intuitivamente facile da capire.

La prima cosa che dobbiamo sempre fare è riempire il motore del recommender con i soggetti e i loro attributi corrispondenti. Di solito questo deve essere fatto solo una volta, ma può anche essere fatto dinamicamente. Ad esempio, se si consiglia di articoli, si consiglia di farlo ogni volta che viene aggiunto un articolo al tuo sito Web o blog.

Il secondo passaggio è inserire le preferenze di un utente. Insieme all'id univoco del tuo utente, puoi addestrare il sistema recommender piacendo o non gradendo certi soggetti o attributi. Ad esempio, a un utente potrebbe essere mostrato un elenco di film e lui/lei è data la possibilità di assegnare a ciascun film una valutazione. In alternativa, l'utente potrebbe creare un profilo inserendo gli attributi che preferisce (ad esempio, quali generi, parole chiave, data di rilascio, ecc.). Questa parte spetta a te decidere e alla logica del tuo progetto.

Una volta che il sistema è stato addestrato (pieno di argomenti e preferenze dell'utente), allora possiamo chiamare il motore per fornirci raccomandazioni. Puoi farlo una volta, ma anche dinamicamente (riqualificando così il modello dopo ogni feedback ricevuto dall'utente). Poiché l'utente fornisce più feedback, il modello diventa migliore e le raccomandazioni si avvicinano alle reali preferenze dell'utente.

Si noti che con lo Abracadabra Recommender API è necessario solo inviare chiamate HTTP all'API per addestrare il modello e ricevere consigli. È possibile accedere all'API utilizzando qualsiasi lingua, quindi dal proprio sito Web o app (Angular, React, Javascript ...) o dal proprio server (NodeJS, Curl, Java, Python, Objective-C, Ruby, .NET ...) .

Problemi correlati