В последние несколько дней я работал с Mahout, пытаясь создать механизм рекомендаций.Проект, над которым я работаю, содержит следующие данные:
12M пользователей 2M элементов 18M пользовательских логических элементов
Я сейчас экспериментируюс 1/3 от полного набора, который мы имеем (т.е. 6M из 18M рекомендаций).При любой конфигурации, которую я пробовал, Mahout давал весьма неутешительные результаты.Некоторые рекомендации заняли 1,5 секунды, а другие - более минуты.Я думаю, что разумное время для рекомендации должно составлять около 100 мс.
Почему Mahout работает так медленно?
Я запускаю приложение на Tomcat со следующей JVMаргументы (хотя их добавление не имеет большого значения):
-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);