Ho un database di circa 700k utenti insieme a oggetti che hanno guardato/ascoltato/letto/comprato/ecc. Mi piacerebbe creare un motore di raccomandazione che consiglia nuovi articoli basati su ciò che gli utenti con gusti simili hanno apprezzato, oltre a trovare effettivamente persone con cui l'utente potrebbe voler essere amico su un social network che sto costruendo (simile a last.fm).Algoritmo di raccomandazione (e implementazione) per la ricerca di oggetti e utenti simili
miei requisiti sono i seguenti:
- maggioranza degli "utenti" nel mio database non sono in realtà gli utenti del mio sito web. Sono stati estratti da fonti di terze parti. Tuttavia, quando raccomando gli utenti, vorrei limitare la ricerca alle persone che sono membri del mio sito Web (sfruttando ancora il set di dati più grande).
- Ho bisogno di prendere in considerazione più oggetti. Non "persone a cui piace questo elemento che ti piaceva ...", ma "persone a cui piacciono la maggior parte degli oggetti che ti sono piaciuti ...".
- Ho bisogno di calcolare le somiglianze tra gli utenti e mostrarli durante la visualizzazione dei loro profili (gusto-o-metro).
- Alcuni articoli sono classificati, altri no. Le valutazioni sono da 1 a 10, non da valori booleani. Nella maggior parte dei casi è possibile dedurre un valore di valutazione da altre statistiche se non è presente (ad esempio se l'utente ha preferito un articolo, ma non lo ha valutato, potrei semplicemente assumere una valutazione di 9).
- Deve interagire con il codice Python in un modo o nell'altro. Preferibilmente, dovrebbe utilizzare un database separato (possibilmente NoSQL) ed esporre un'API da utilizzare nel mio back-end web. Il progetto che sto facendo utilizza Pyramid e SQLAlchemy.
- Vorrei prendere in considerazione i generi di articoli.
- Vorrei visualizzare articoli simili sulle pagine degli articoli in base al genere (eventualmente tag) e agli utenti che hanno apprezzato l'elemento (ad esempio "persone che hanno acquistato questo articolo" di Amazon e pagine degli artisti di Last.fm). Gli oggetti di generi diversi dovrebbero ancora essere mostrati, ma hanno un valore di similarità più basso.
- Preferirei un'implementazione ben documentata di un algoritmo con alcuni esempi.
Si prega di non dare una risposta come "usa pysuggest o mahout", dal momento che quelli implementano una pletora di algoritmi e sto cercando uno che è più adatto per i miei dati/utilizzo. Sono stato interessato a Neo4j e come tutto potrebbe essere espresso come un grafico delle connessioni tra utenti e oggetti.
per i generi Raccomando i nodi delle categorie di generi a cui sono connessi gli elementi e puoi tenerne conto nella clausola di corrispondenza –
Questo è davvero molto utile, il collegamento pubblicato memorizza le informazioni in un grafico-db invece di essere un grafico approccio basato sulla raccomandazione. – Steve
Grazie! Ho fatto un po 'di lettura, aveva uno sguardo al libro di cucina cifra nella documentazione Neo4j e lo fa esattamente quello che ho bisogno di fare. Ho deciso di andare con l'approccio del database grafico per il mio motore di raccomandazione. – vomitcuddle