Erstens ist das "Modell", auf das Sie von Mahout beziehen, kein Modell, sondern eine vorberechnete Liste von Empfehlungen. Sie können dies auch mit Spark tun und in Stapelempfehlungen für Benutzer berechnen und sie dort beibehalten, wo Sie möchten. Dies hat nichts mit der Serialisierung eines Modells zu tun. Wenn Sie keine Echtzeit-Updates oder Scoring durchführen möchten, können Sie damit aufhören und einfach Spark für Batch verwenden, genau wie Sie Mahout tun.
Aber ich stimme zu, dass Sie in vielen Fällen das Modell an einen anderen Ort liefern und es bedienen möchten. Wie Sie sehen können, sind andere Modelle in Spark Serializable
, aber nicht MatrixFactorizationModel
. (Ja, obwohl es als solches gekennzeichnet ist, wird es nicht serialisiert.) Ebenso gibt es eine Standardserialisierung für Vorhersagemodelle, die PMML genannt wird, aber es enthält kein Vokabular für ein faktorisiertes Matrixmodell.
Der Grund ist eigentlich der gleiche. Während viele Vorhersagemodelle, wie ein SVM- oder logistisches Regressionsmodell, nur ein kleiner Satz von Koeffizienten sind, ist ein faktorisiertes Matrixmodell riesig und enthält zwei Matrizen mit möglicherweise Milliarden von Elementen. Deshalb denke ich, dass PMML keine vernünftige Codierung dafür hat.
Ebenso, in Spark, bedeutet dies, dass die tatsächlichen Matrizen s sind, die nicht direkt serialisiert werden können. Sie können diese RDDs im Speicher aufbewahren, sie mit Spark an anderer Stelle erneut lesen und eine MatrixFactorizationModel
von Hand auf diese Weise neu erstellen.
Sie können das Modell jedoch nicht mit Spark bereitstellen oder aktualisieren. Dafür suchen Sie wirklich Code zu schreiben, um Aktualisierungen durchzuführen und Empfehlungen spontan zu berechnen.
Es macht mir nichts aus, hier das Oryx Projekt vorzuschlagen, da sein Punkt genau diesen Aspekt, besonders für die ALS-Empfehlung, verwalten soll. Tatsächlich basiert das Projekt Oryx 2 auf Spark und enthält, obwohl es in Alpha ist, bereits die vollständige Pipeline, um die Ausgabe von MatrixFactorizationModel
zu serialisieren und zu bedienen. Ich weiß nicht, ob es Ihren Bedürfnissen entspricht, aber es könnte zumindest ein interessanter Bezugspunkt sein.
Danke für Ihre die hervorragende und detaillierte Erklärung! Ich werde Oryx versuchen :) – shihpeng