2013-07-17 2 views
0

Я работаю с Mahout создать механизм рекомендаций на основе следующих данных:Mahout вопросы эффективности Рекомендации

  • 100k пользователи
  • 10k элементах
  • рейтингов
  • оГО

Я m работает на Tomcat со следующими аргументами JVM:

-Xms1024M -Xmx1024M -da -dsa -XX:NewRatio=9 -server 

Рекомендации заняли около 6 секунд, это кажется медленным! Как я мог улучшить выступления Махута?

Я использую следующий код:

Эта часть запускается один раз при запуске:

JDBCDataModel jdbcdatamodel = new MySQLJDBCDataModel(dataSource); 
dataModel = new ReloadFromJDBCDataModel(jdbcdatamodel); 

ItemSimilarity similarity = new CachingItemSimilarity(new EuclideanDistanceSimilarity(model), model); 
SamplingCandidateItemsStrategy strategy = new SamplingCandidateItemsStrategy(10, 5); 
recommender = new CachingRecommender(new GenericItemBasedRecommender(model, similarity, strategy, strategy)); 

И для каждого запроса пользователя, что я делаю:

recommender.recommend(userId, howMany); 
+0

Узкое место доступа к базе данных –

+1

@JulianOrtega 'ReloadFromJDBCDataModel' загружает datamodel из базы данных в память, так что это занимает время только один раз, или я чего-то не хватает? – Thibaud

+0

Ну, так как вы действительно не делились кодом, который генерирует рекомендации, я должен был угадать –

ответ

1

Я хотел бы предложить другой подход. Используйте ночную работу, чтобы предварительно рассчитать рекомендации для ВСЕХ пользователей и загружать результаты в таблицу MySQL в ночное время. Это будет показывать рекомендации не более, чем простой вызов БД.

Поскольку у вас есть элементы 10K, для расчета рекомендаций для одного пользователя mahout необходимо внутренне умножить матрицу (10k x 10K) на другую (10K X 1) матрицу. И 6 секунд кажется довольно быстрым, учитывая размер. Reference

Теперь, если вы используете РекомендациюJob на hadoop и AWS EMR, для обработки данных на вашем масштабе потребуется ~ < 10 минут. Или вы можете выполнять одно и то же задание нераспределенным способом, просто используя цикл и предварительно вычисляя для всех пользователей последовательно. Недостатком является то, что ваши рекомендации всегда отстают на 1 день или 6 часов или на любую частоту, которую вы выбираете для работы.

Смежные вопросы