我想构建一个推荐引擎,以支持在Rails上运行的Web应用程序,并将其数据存储在MySQL中...用户点击事物并且他们的反馈更新数据库的行以某种实时方式处理。数量级我认为在所有用户中,可能只有10次交互;每天1M数据点。
我的问题是如何构建和处理分析,以便快速处理事情。利用我已经知道的东西,我可以使用一些Ruby和R(RServe,RSRuby)在现有数据集上运行SVD / clustering / ensemble / whatevermodel,并且每隔一段时间通过采样更新模型/公式,但这似乎是一种非常笨重的做事方式。这样做的更好方法是什么?直接在MySQL中运行数学?使用一些很棒的Ruby库,它具有很好的数学函数?使用现成的推荐引擎包吗?
(尽管我看到了所有“类似问题”链接,但我对那里的内容有明显的缺乏认识。甜美的讽刺。:()
PS:我的背景:有几年R的数字人,但完全是静态/离线数据。 Python,Rails等新手程序员,但我可以在这方面工作。
答案 0 :(得分:2)
你真的需要实时吗?
我发现大多数这些“实时”案例通常并不真正需要真正的实时,但可以在后台完成。 假设一个网上商店,你希望在当前选择的项目(其他人用这个项目购买的相关项目)上向客户提供他过去销售的推荐,你可以简单地按照设定的时间间隔预先计算这些数据。
对于像上面描述的那样的情况,我建议你使用Rake任务来完成繁重的工作(过去销售的建议并不是在会话期间发生变化的事情 - 相关项目的建议也相当静态)。
因此,当您将生成的(预先计算的)数据提供给活动用户时,我会在Cron作业或其他与Web应用程序异步的重复任务期间计算这些内容。 这样,您可以更灵活地计算计算的复杂性,因为您的运行时间可能超过Web请求所需的时间。
示例rake任务看起来像这样:
task :calculate_recommendations => :environment do
// do your calculation
// you have full access to ActiveRecord here
end
(确保包含:environment
否则Rake将不会为您加载数据库连接。
你如何做计算取决于你,但我建议你看看像Recommendify这样的宝石,看看他们用来计算推荐的库。也许这对你有所帮助。
同样在RubyToolbox中有一个Recommender-Engine category列出了一些相似的宝石,可能会指向正确的方向。