私はここ数日、Mahoutと協力して、推奨エンジンを作成しようとしています。私は今我々が持っているフルセットの1/3を試しています Apache Mahoutパフォーマンスの問題
:私が働いている プロジェクトには、次のようなデータを持っています(すなわち、18Mの勧告のうち6M)。私が試したどんな構成でも、Mahoutは非常に残念な結果を出していました。いくつかの勧告は1.5秒かかり、他の勧告は1分以上かかりました。私は推薦のための合理的な時間は100msの時間枠の周りにあるべきだと思います。
なぜMahoutの動作が遅いのですか?
私は(彼らは大きな違いがありませんでした追加するにもかかわらず)、次のJVM引数でのTomcat上でアプリケーションを実行している:
-Xms4096M -Xmx4096M -da -dsa -XX:NewRatio=9 -XX:+UseParallelGC -XX:+UseParallelOldGC
は私の実験のためのコードスニペットです:
ユーザ類似1:
DataModel model = new FileDataModel(new File(dataFile));
UserSimilarity similarity = new CachingUserSimilarity(new LogLikelihoodSimilarity(model), model);
UserNeighborhood neighborhood = new NearestNUserNeighborhood(10, Double.NEGATIVE_INFINITY, similarity, model, 0.5);
recommender = new GenericBooleanPrefUserBasedRecommender(model, neighborhood, similarity);
ユーザ類似2:
DataModel model = new FileDataModel(new File(dataFile));
UserSimilarity similarity = new CachingUserSimilarity(new LogLikelihoodSimilarity(model), model);
UserNeighborhood neighborhood = new CachingUserNeighborhood(new NearestNUserNeighborhood(10, similarity, model), model);
recommender = new GenericBooleanPrefUserBasedRecommender(model, neighborhood, similarity);
アイテムの類似度1:
DataModel dataModel = new FileDataModel(new File(dataFile));
ItemSimilarity itemSimilarity = new LogLikelihoodSimilarity(dataModel);
recommender = new GenericItemBasedRecommender(dataModel, itemSimilarity);
Thnx Sean。私はあなたの提案を次のコードhttp://pastebin.com/XiuJvRhaで試してみました。しかし、パフォーマンスはまだ良くありません。 6Mセット(実際のセットの1/3)でも、推奨事項は3〜15秒かかります。あなたは何からそれを作るのですか? –
Ok - もう少しテストしましたが、1-2の推奨事項を作成したユーザーの方が約400msですばらしいとわかりましたが、10または20の推奨事項を作成したユーザーの方がはるかに多くの時間がかかります。 28の推奨事項を持つ1人のユーザーが完了するまでに1分かかりました。 –
SamplingCandidateItemsStrategyで値を調整する必要があります。例えば(10,5)を試してみてください。これはまだかなり遅く聞こえますが、かなり良いようです。キャッシュはあらかじめ計算された類似性で満たされるので、ある程度のウォームアップがあります。それが要因かどうかは分かりません。 –