2013-06-12 4 views
1

Я пытаюсь добавить рекомендации на наш сайт электронной коммерции с помощью Mahout. Я решил использовать рекомендацию на основе предметов, у меня есть около 60 тыс. Продуктов, 200 тыс. Пользователей и 4М пользовательских предпочтений. Я ищу способ дать рекомендации, вычислив сходство элементов в автономном режиме, так что метод recommender.recommend() предоставит результаты менее чем за 100 миллисекунд.Реализация автономной рекомендации по позиции с использованием Mahout

DataModel dataModel = new FileDataModel("/FilePath");

_itemSimilarity = new TanimotoCoefficientSimilarity(dataModel);

_recommender = new CachingRecommender(new GenericBooleanPrefItemBasedRecommender(dataModel,_itemSimilarity));

Я надеялся, что если кто-то может указать на метод или блог, чтобы помочь мне понять процедуру и проблемы с вычислением Автономных элементов сходства. Также рекомендуемая процедура заключалась в хранении предварительно вычисленных результатов из сходства элементов, если они должны храниться в отдельном db или в memcache?

PS - Я планирую обновить данные о предпочтениях пользователя продукта через 10-12 часов.

ответ

4

MAHOUT-1167 введена в (вскоре будет выпущен) Mahout 0,8 стволу способ вычисления сходства параллельно на одной машине. Я просто упоминаю об этом, поэтому вы помните об этом.

Если вы только собираетесь, чтобы обновить данные о предпочтениях пользователя продукт каждые 10-12 часов, вы лучше просто иметь периодический процесс, который хранит эту предвычисленную рекомендации где-то, а затем доставить их к конечному потребителю оттуда , Я не могу предоставить подробную информацию или советы в связи с тем, что это сильно изменится в зависимости от многих факторов, таких как ваша текущая архитектура, стек программного обеспечения, емкость сети и т. Д. Другими словами, в своем пакетном процессе просто запустите всех своих пользователей и попросите 10 рекомендаций для каждого из них, а затем сохраните результаты где-нибудь, чтобы доставить конечному пользователю.

1

Если вам нужен ответ в течение 100 милли секунд, это лучше делать пакетную обработку в фоновом режиме на вашем сервере и может включать в себя следующие виды работ.

  1. Получение данных из вашей собственной пользовательской базы данных (60 тыс. Продуктов, пользователей 200 тыс. Пользователей и 4 млн. Пользовательских настроек).
  2. Подготовьте модель данных на основе характера данных (число параметров, размер данных, привилегированные значения etc..lot больше) Это может быть важным шагом.
  3. Алгоритм запуска на модели данных (необходимо выбрать правильный алгоритм согласно вашему требованию). Данные рекомендации доступны здесь.
  4. Возможно, потребуется обработать результирующие данные в соответствии с требованием.
  5. хранить эти данные в базу данных (Это NoSQL во всех моих проектах)

Вышеуказанные шаги должны выполняться периодически в периодическом режиме.

Всякий раз, когда пользователь запрашивает рекомендации, ваша служба предоставляет ответ на чтение данных рекомендательные из заранее рассчитанным БД.

Вы можете посмотреть на Apache Mahout (рекомендации) для такого рода задач.

Это краткие шаги ... Надеюсь, это поможет!