shi*_*eng 6 recommendation-engine mahout mahout-recommender apache-spark
我正在使用Spark来构建推荐系统原型.经过一些教程后,我能够MatrixFactorizationModel从我的数据中训练出来.
然而,Spark mllib训练的模型只是一个Serializable.如何使用此模型为真实用户推荐?我的意思是,如果用户数据增加,我怎样才能将模型保存到某种数据库中或更新它?
例如,由Mahout推荐库训练的模型可以存储到像Redis这样的数据库中,然后我们可以稍后查询推荐的项目列表.但是我们如何才能在Spark中做类似的事情呢?有什么建议吗?
首先,您从Mahout引用的"模型"不是模型,而是预先计算的推荐列表.您也可以使用Spark执行此操作,并为用户计算批量建议,并将其保留在您喜欢的任何位置.这与序列化模型无关.如果您不想进行实时更新或评分,您可以停在那里,就像使用Mahout一样只使用Spark批处理.
但我同意在很多情况下你确实希望将模型运送到其他地方并提供服务.如您所见,Spark中的其他模型是Serializable,但不是MatrixFactorizationModel.(是的,即使它被标记为这样,它也不会序列化.)同样,有一个名为PMML的预测模型的标准序列化,但它不包含因式矩阵模型的词汇表.
原因实际上是一样的.尽管许多预测模型(如SVM或逻辑回归模型)只是一小组系数,但是因式矩阵模型非常庞大,包含两个可能具有数十亿个元素的矩阵.这就是为什么我认为PMML没有任何合理的编码.
同样,在Spark中,这意味着实际的矩阵是RDD无法直接序列化的.您可以将这些RDD保存到存储中,使用Spark在其他地方重新读取它们,然后MatrixFactorizationModel手动重新创建.
但是,您无法使用Spark提供或更新模型.为此,您实际上正在编写一些代码来执行更新并动态计算建议.
我不介意在这里建议Oryx项目,因为它的目的是管理这方面,特别是对于ALS推荐.事实上,Oryx 2项目基于Spark,虽然在alpha中,已经包含了完整的序列化和服务输出的管道MatrixFactorizationModel.我不知道它是否符合您的需求,但至少可能是一个有趣的参考点.
| 归档时间: |
|
| 查看次数: |
2175 次 |
| 最近记录: |