0

什么是收集用户数据的正确方法,以使其可用于模型构建(离线)和推荐系统中的预测(在线)?假如说:

  1. 预测是通过多个服务器完成的。服务器有一些可用内存,但从用户数据的角度来看,它们被认为是无状态的。这意味着用户可以在会话期间与不同的机器进行交互,并且无论用户登陆哪台机器,用户数据都应该可用。
  2. 所有附加到文章和推荐项目(如分类、文章文本等)的元数据都可以在线和离线使用。但是,获取此数据需要 db 调用。
  3. 一些用户活动需要相当快地用于推理,而其他活动可能在它发生几小时后可用。例如,在用户点击推荐后,我们希望尽快提供此信息。另一方面,在用户浏览该内容后,可以在推理小时内获得长期浏览行为数据。
  4. 所有用户的数据都太大而无法在训练时保存在内存中。

问题:该系统应该大规模运行。人们会使用哪些主要技术和主要数据结构?

4

1 回答 1

0

我建议使用像Apache PredictionIOUniversal Recommender 插件引擎这样的系统。

PIO 实时获取用户行为的输入,并告诉 Recommender 在后台进行训练。这通常会产生用户行为的“模型”。实际的个人用户行为可以来自实时观察,并且在如何将任何数据视为影响推荐的输入方面没有区别,所有这些都可以是实时的。所以模型是以批处理的方式在后台创建的,实时的用户行为被用来制定查询,所以实时数据会影响结果。这通常称为 Lambda 风格的机器学习。

大多数类型的推荐器不允许您使用超过转换作为用户行为的证据,因此作为用户偏好的可能指标。Universal Recommender 是个例外,它可以使用任意数量的用户行为。

PIO 和 UR 建立在高度可扩展的服务之上,因此“生产”系统可以水平扩展至所需的任何规模。其中包括 HDFS、HBase、Spark 和 Elasticsearch。Universal Recommender 使用来自现代 Apache Mahout 的Correlated Cross-Occurrence (CCO) 算法,而不是旧的基于 Hadoop 的 Mahout 推荐器。

于 2018-02-23T18:35:30.457 回答