推荐系统中的数据收集

时间:2018-02-22 20:06:39

标签: recommendation-engine mahout-recommender recommender-systems

以能够在推荐系统中进行模型构建(离线)和预测(在线)的方式收集用户数据的正确方法是什么? 假设:

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

1 个答案:

答案 0 :(得分:0)

我建议使用像Apache PredictionIOUniversal Recommender plugin Engine.

这样的系统

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

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

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