0

Rails で実行され、そのデータが MySQL に保存されている Web アプリをサポートするレコメンデーション エンジンを構築したいと考えています。ある種のリアルタイム風のファッション。桁違いに、おそらくすべてのユーザーで 1 秒間に数十回のインタラクションが発生していると思います。1 日あたり 100 万のデータポイント。

私の質問は、物事を迅速に処理できるように、分析をどのように構造化して処理するかです。私がすでに知っていることを利用して、Ruby と R (RServe、RSRuby) のフレーバーを使用して、既存のデータセットで SVD/クラスタリング/アンサンブル/whatevermodels を実行し、サンプリングによってモデル/式を頻繁に更新できますが、それは物事を行うための本当に不格好な方法。これを行うより良い方法は何ですか?MySQL で直接計算を実行しますか? 優れた数学関数を備えたクールな Ruby ライブラリを使用していますか? 市販のレコメンデーション エンジン パッケージを使用しますか?

(提案された「同様の質問」リンクをすべて見たにもかかわらず、私はそこに何があるかについて明確に認識していません。甘い皮肉です。:( )

PS: 私のバックグラウンド: R を数年間使用している数値担当者ですが、完全に静的/オフライン データ用です。Python、Rails などの初心者プログラマーですが、その分野で働くことができます。

4

1 に答える 1

2

本当にリアルタイムが必要ですか?

これらの「リアルタイム」のケースのほとんどは、通常、真のリアルタイムを実際には必要としませんが、バックグラウンドで実行できることがわかりました。おそらく現在選択されているアイテム (他の人がこのアイテムで購入した関連アイテム) について、過去の販売に関する顧客の推奨事項を提示したい Web ショップを想定すると、設定された間隔でそのデータを事前に計算することができます。

上記のようなケースでは、Rake タスクを使用して手間のかかる作業を行うことをお勧めします (過去の販売に関するレコメンデーションは、実際にはセッション中に変更されるものではなく、関連するアイテムのレコメンデーションもかなり静的です)。

そのため、結果の (事前計算された) データをアクティブなユーザーに提供している間に、Cron ジョブまたは Web アプリケーションに対して非同期であるその他の定期的なタスク中にそれらを計算します。そうすれば、Web リクエストの最大実行時間よりも長く実行できるため、計算の複雑さについても多少の柔軟性が得られます。

サンプルの rake タスクは次のようになります。

task :calculate_recommendations => :environment do
  // do your calculation
  // you have full access to ActiveRecord here
end

(必ず含めてください:environment。そうしないと、Rake はデータベース接続をロードしません。

どのように計算を行うかはあなた次第ですが、Recommendifyのような Gemを見て、推奨の計算に使用しているライブラリを確認することをお勧めします。多分それはあなたに役立つでしょう。

また、RubyToolboxにはRecommender-Engine カテゴリがあり、類似したいくつかの gem がリストされており、正しい方向へのポインターを提供する可能性があります。

于 2012-07-19T09:44:34.687 に答える