推荐系统如何在生产中运作?

时间:2017-08-03 13:50:16

标签: apache-spark machine-learning recommendation-engine

我是新手,并开始学习Spark。关于推荐系统如何在生产环境中工作,或者如何将其部署到生产环境,我有一般性的问题。

以下是电子商务网站系统的一个小例子。

First Run of the engine

据我所知,一旦系统建成,我们可以在开始时将数据提供给引擎(我们可以运行作业或运行引擎的程序/进程),它会给出结果,这些结果将被存储针对每个用户返回数据库。下次用户登录网站时,可以获取数据,引擎先前从数据库中计算出的数据,并显示为推荐项目。

我所遇到的困惑是“这些系统”如何根据用户活动生成输出。例如如果我在Youtube上观看视频并刷新页面,Youtube会开始向我展示类似的视频。 那么,我们是否总是在后台运行这些推荐引擎,并根据用户的活动不断更新结果?如何快速,快速地完成它?

2 个答案:

答案 0 :(得分:2)

简短回答:

  1. 推理速度快;训练是缓慢的部分。
  2. 再培训是对现有模型的调整,而不是从头开始。
  3. 再培训只是定期的,很少是#34;按需提供"。
  4. 答案很长:

    他们根据用户活动的长基线生成此输出。这是引擎从您最近的观点中获得的内容:任何人在同一天观看该视频将获得相同的推荐。

    某些推荐系统会考虑您的个人历史记录,但这通常只是根据个人的预测评分对推荐列表进行排序。这是通过您自己的流派类型和每个视频的其他特征的通用模型完成的。

    通常,每天更新一次,并且更改很小。每次提出请求时,他们都不会从头开始重新训练模型。您个人模型的参数和重量都存储在您的帐户下。当您添加评分(而不只是查看视频)时,您的帐户会被标记,并且模型会在下次方便的时候更新。

    此更新将从您当前的型号开始,并且只需要运行几个时代 - 除非您评估了大量的视频评分与之前的预测相比有很大差异。

答案 1 :(得分:2)

要添加到Prune的答案,根据系统的设计,还可以考虑用户最近的互动。

这有两种主要方式:

  • 折叠:您最近的交互用于重新计算个人模型的参数,同时保持模型的其余部分不变。这通常非常快,可以完成以响应每个请求。
  • 直接将交互作为输入的模型:某些模型可以通过将用户的交互作为输入直接计算推荐,而不存储只能通过再训练更新的用户表示。例如,您可以通过简单地平均最近与之交互的项目的表示来表示用户。可以响应每个请求重新计算此表示。

事实上,最后一种方法似乎构成了YouTube系统的一部分。你可以在Covington等人找到细节。 针对YouTube推荐的深度神经网络 paper