我正在尝试使用Cloud ML Engine构建上下文感知推荐系统,该系统使用context prefiltering
方法(as described in slide 55, solution a),并且正在使用此Google Cloud tutorial (part 2)来构建演示。为了这个演示的目的,我已经按照时间戳将数据集分为Weekday和Weekend上下文以及Noon和Afternoon上下文。
在实践中,我将学习四种模型,以便可以按“周日未知”,“周末未知”,“未知中午”,“未知下午”,“工作日下午”,“工作日下午”等进行上下文过滤。想法是使用用户对所有相关模型的预测,然后根据对上下文的了解对结果推荐进行加权(未知含义,即使用所有上下文模型并给出加权结果)。
我需要快速响应的东西,如果我不想在前端进行加权,很不幸,我会需要某种中间件。
我知道AppEngine具有预测模式,该模式将模型保存在RAM中,从而确保快速响应,因为您不必引导预测模型;那么解决上下文将很快。
但是,有没有更简单的解决方案,它还能保证在Google Cloud中达到类似的性能?
我使用Cloud ML Engine的原因是,当我以这种方式进行上下文感知的推荐器系统时,超参数调整的数量会大量增长;我不想手动进行操作,而是使用Cloud ML Engine贝叶斯Hypertuner来完成这项工作,因此我只需要针对每个上下文模型将参数范围调整1到3次(使用自动脚本);每当重复数据集时,这都可以节省大量的Data Scientist开发时间。
答案 0 :(得分:0)
有四种可能的解决方案:
学习4个模型并使用SavedModel保存它们。然后,创建第5个模型,以还原保存的4个模型。该模型没有可训练的重量。取而代之的是,它仅计算上下文并将适当的权重应用于4个保存的模型中的每一个并返回值。您将部署的是第5个模型。
了解单个模型。将上下文作为模型的分类输入,即遵循https://arxiv.org/abs/1606.07792
使用单独的AppEngine服务,该服务计算上下文并调用基础的4个服务,对其进行权衡并返回结果。
使用用Python编写的AppEngine服务,该服务会加载所有四个已保存的模型,并调用这四个模型并对其加权,然后返回结果。
选项1涉及更多的编码,并且很难正确设置。
选项2是我的选择,尽管它会根据您的期望更改模型公式。如果您走这条路,那么以下是MovieLens上的示例代码,您可以对其进行修改:https://github.com/GoogleCloudPlatform/cloudml-samples/tree/master/movielens
由于额外的网络开销,选项3引入了更多的延迟
选项4减少了#3的网络延迟,但是您失去了并行性。您将不得不在选项3和4之间进行实验,以在总体上提供更好的性能