首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >火花-如何在生产中使用经过训练的推荐模型?

火花-如何在生产中使用经过训练的推荐模型?
EN

Stack Overflow用户
提问于 2015-01-07 08:23:42
回答 3查看 2.3K关注 0票数 6

我正在使用星火建立一个推荐系统原型。在阅读了一些教程之后,我已经能够根据我的数据来训练一个MatrixFactorizationModel

但是,由Spark训练的模型只是一个Serializable。如何使用此模型为实际用户提供推荐?我的意思是,如果用户数据增加了,我如何将模型保存到某种数据库中,或者更新它呢?

例如,Mahout推荐库所训练的模型可以存储到像Redis这样的数据库中,然后我们可以查询推荐的项目列表。但我们怎样才能在星火中做类似的事情呢?有什么建议吗?

EN

回答 3

Stack Overflow用户

发布于 2015-01-07 18:31:11

另一种使用Spark创建recs的方法是搜索引擎方法。这基本上是Solr或Elasticsearch提供的共现推荐服务。将因式分解与共现进行比较是不可能的,所以我将只描述后者。

您将交互(用户id、项id)输入到Mahout的spark-itemsimilarity中。这将为交互数据中的每个项目生成类似项的列表。默认情况下,它将作为csv出现,因此可以存储在任何地方。但是它需要被搜索引擎索引。

在任何情况下,当您想要获取recs时,您使用用户的历史记录作为查询,您将得到一个作为recs的有序项列表。

此方法的一个优点是可以为任意多个用户操作计算指示数。用户采取的任何与您想推荐的内容相关的操作都可以使用。例如,如果您想推荐购买,但您也记录产品视图。如果你把产品视图和购买同等对待,你可能会变得更糟(我试过了)。然而,如果你计算一个购买指标和另一个(实际上是交叉发生的)产品视图指标,他们对购买的预测是一样的。这会增加用于recs的数据。可以对用户位置进行相同类型的操作,以便将位置信息混合到购买资源中。

您还可以根据上下文偏倚您的recs。如果您在目录中的“电子”部分,您可能希望recs向电子产品倾斜。将电子产品添加到针对项的“类别”元数据字段的查询中,并使其在查询中得到提升,您就会有偏颇的recs。

由于指示符的所有偏差和混合都发生在查询中,这使得recs引擎很容易调优到多个上下文,同时只维护一个通过搜索引擎进行的多字段查询。我们从Solr或Elasticsearch获得可伸缩性。

分解或搜索方法的另一个好处是,可以使用全新的用户和新的历史记录来创建recs,旧的Mahout推荐程序只能向运行作业时已知的用户和交互推荐。

这里的描述:

  • 马乌特博士
  • 幻灯片
  • 星火:推荐人的新发现,第1部分
  • 星火:推荐人的新发现,第二部分
  • 实用机器学习电子书
票数 2
EN

Stack Overflow用户

发布于 2015-01-19 21:07:33

您应该在减少的RDD (用户,产品)对上运行model.predictAll(),如MahoutHadoop作业中的一组,并存储结果以供在线使用.

https://github.com/apache/mahout/blob/master/mrlegacy/src/main/java/org/apache/mahout/cf/taste/hadoop/item/RecommenderJob.java

票数 0
EN

Stack Overflow用户

发布于 2015-12-31 06:39:43

您可以使用函数.save(sparkContext,outputFolder)将模型保存到您选择的文件夹中。在实时提供建议的同时,您只需使用MatrixFactorizationModel.load(sparkContext,modelFolder)函数将其作为MatrixFactorizationModel对象加载即可。

@Sean :MatrixFactorizationObject不包含分解矩阵:用户特性和项特征矩阵,而不是推荐/预测评分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27815147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档