Pracowałem z Mahoutem w ciągu ostatnich kilku dni próbując stworzyć silnik rekomendacji. Projekt pracuję nad zawiera następujące dane: Problemy z wydajnością Apache Mahout
Jestem teraz eksperymentować z 1/3 pełnego zestawu mamy (tj. 6M z 18M zaleceń). Przy każdej konfiguracji próbowałem, Mahout dawał dość rozczarowujące wyniki. Niektóre zalecenia trwały 1,5 sekundy, podczas gdy inne trwały ponad minutę. Myślę, że rozsądny czas na rekomendację powinien wynosić około 100ms.
Dlaczego Mahout działa tak wolno?
biegnę aplikacji na Tomcat z następującymi argumentami JVM (choć dodanie ich nie robić wielkiej różnicy):
-Xms4096M -Xmx4096M -da -dsa -XX:NewRatio=9 -XX:+UseParallelGC -XX:+UseParallelOldGC
Poniżej znajdują się fragmenty kodu dla moich eksperymentów:
podobieństwo Użytkownik 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);
podobieństwo Użytkownik 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);
podobieństwo Pozycja 1:
DataModel dataModel = new FileDataModel(new File(dataFile));
ItemSimilarity itemSimilarity = new LogLikelihoodSimilarity(dataModel);
recommender = new GenericItemBasedRecommender(dataModel, itemSimilarity);
Thnx Sean. Wypróbowałem Twoje sugestie za pomocą następującego kodu http://pastebin.com/XiuJvRha. Ale wydajność nadal nie jest dobra. Nawet przy ustawieniu 6M (1/3 rzeczywistego zestawu) zalecenia nadal trwają od 3 do 15 sekund. Co z tego robisz? –
OK - Przetestowałem to nieco więcej i zauważyłem, że dla użytkowników, którzy złożyli 1-2 zalecenia, są szybkie, około 400ms, ale dla użytkowników, którzy zrobili 10 lub 20 rekomendacji, zajmuje to znacznie więcej. Jeden użytkownik z 28 zaleceniami zabrał minutę, aby zakończyć. –
Będziesz chciał dostosować wartości w SamplingCandidateItemsStrategy. Spróbuj na przykład (10,5). To wszystko wciąż brzmi dość wolno, choć wygląda całkiem nieźle. Jest trochę rozgrzewki, gdy bufory wypełniają się wstępnie podobieństwem; Nie wiem, czy to jest czynnik? –