In primo luogo, il "modello" a cui ti riferisci da Mahout non è un modello, ma un elenco precompilato di raccomandazioni. Puoi farlo anche con Spark e calcolare in batch i consigli per gli utenti e mantenerli ovunque desideri. Questo non ha nulla a che fare con la serializzazione di un modello. Se non vuoi fare aggiornamenti o segnare in tempo reale, puoi fermarti lì e usare Spark per batch proprio come fai con Mahout.
Ma concordo sul fatto che in molti casi si desidera spedire il modello da qualche altra parte e servirlo. Come puoi vedere, altri modelli di Spark sono Serializable
, ma non MatrixFactorizationModel
. (Sì, anche se è contrassegnato come tale, non verrà serializzato.) Allo stesso modo, esiste una serializzazione standard per i modelli predittivi denominata PMML ma non contiene alcun vocabolario per un modello di matrice fattorizzato.
Il motivo è in realtà lo stesso. Mentre molti modelli predittivi, come un modello SVM o di regressione logistica, sono solo un piccolo insieme di coefficienti, un modello a matrice fattoriale è enorme, contenente due matrici con potenzialmente miliardi di elementi. Questo è il motivo per cui penso che PMML non abbia alcuna codifica ragionevole per questo.
Allo stesso modo, in Spark, ciò significa che le matrici effettive sono RDD
s che non possono essere serializzate direttamente. È possibile mantenere questi RDD in memoria, rileggerli altrove con Spark e ricreare a mano uno MatrixFactorizationModel
in questo modo.
Non è possibile servire o aggiornare il modello utilizzando Spark. Per questo stai veramente cercando di scrivere del codice per eseguire aggiornamenti e calcolare i consigli al volo.
Non mi interessa suggerire qui il progetto Oryx, poiché il suo punto è gestire esattamente questo aspetto, in particolare per la raccomandazione ALS. In effetti, il progetto Oryx 2 è basato su Spark e, sebbene in alpha, contiene già la pipeline completa per serializzare e servire l'output di MatrixFactorizationModel
. Non so se soddisfi le tue esigenze, ma potrebbe essere almeno un punto di riferimento interessante.
fonte
2015-01-07 09:46:38
Grazie per la tua eccellente e dettagliata spiegazione! Proverò Oryx :) – shihpeng