Последние несколько дней я работаю с Mahout, пытаясь создать рекомендательный механизм. Проект, над которым я работаю, имеет следующие данные:
Сейчас я экспериментирую с 1/3 от всего имеющегося набора (т.е. 6M из 18M рекомендаций). При любой конфигурации, которую я пробовал, Mahout давал довольно разочаровывающие результаты. На одни рекомендации уходило 1,5 секунды, а на другие - более минуты. Я думаю, что разумное время для рекомендации должно быть около 100 мс.
Почему Mahout работает так медленно?
Я запускаю приложение на Tomcat со следующими аргументами JVM (хотя их добавление не дало большой разницы):
-Xms4096M -Xmx4096M -da -dsa -XX:NewRatio=9 -XX:+UseParallelGC -XX:+UseParallelOldGC
Ниже приведены фрагменты кода для моих экспериментов:
User similarity 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);
User 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);
Item similarity 1:
DataModel dataModel = new FileDataModel(new File(dataFile));
ItemSimilarity itemSimilarity = new LogLikelihoodSimilarity(dataModel);
recommender = new GenericItemBasedRecommender(dataModel, itemSimilarity);