Внедрение рекомендателя SVD в Mahout

У меня есть набор данных из 50 миллионов пользовательских настроек, содержащий 8 миллионов различных пользователей и 180 тысяч различных продуктов. В настоящее время я использую логическую модель данных и имею базовый рекомендатель, основанный на сходстве танимото. Я пытаюсь изучить различные алгоритмы для получения лучших рекомендаций и начал с SVD с факторизатором ALSWR. Я использовал базовый рекомендатель SVD, предоставленный mahout, следующим образом.

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

ALSWRFactorizer factorizer = new ALSWRFactorizer(dataModel, 50, 0.065, 15);

recommender = new SVDRecommender(dataModel, factorizer);

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

У меня есть пара сомнений относительно подхода: -

  1. Как лучше выбрать параметры факторизации и сколько времени обычно занимает факторизация? Я пробовал с вышеуказанными параметрами, и сама факторизация работала более 30 минут.
  2. Есть ли способ обслуживать запросы в реальном времени немного быстрее, так как скалярное произведение со всеми возможными векторами элементов приводит к большому времени запроса? Есть что-то как оффлайн СВД?
  3. Глядя на размер набора данных, который у меня есть, должен ли я попробовать какой-нибудь другой факторизатор?

person user1045047    schedule 17.12.2013    source источник


Ответы (1)


Я хочу ответить на все ваши вопросы вместе.

Учитывая размер ваших данных и запрос в реальном времени, вы должны использовать другой подход.

  1. Выполните расчет сходства офлайн-элементов, который не нужно делать так часто для элементов с большим количеством оценок. Они в основном не меняются. Вы можете пересчитать товар с небольшим рейтингом.
  2. Рассчитайте прогноз рейтинга пользовательских элементов для каждого пользователя в режиме реального времени, используя список сходства элементов. Эта операция не такая затратная, так как у вас гораздо меньше элементов, чем у пользователей. Это также операция с постоянным временем, когда размер элемента не сильно меняется.
person fatih    schedule 07.01.2014
comment
У нас уже работает этот подход. Мы реализовали базовый элемент-предмет, теперь пытаемся реализовать другой алгоритм, используя какую-то форму SVD. Из того, что я прочитал, я надеялся, что у SVD будет лучшее качество рекомендаций. - person user1045047; 10.01.2014
comment
Я думаю, вам не повезло, когда у вас есть требования в реальном времени. Кстати: вы НАДЕЕТЕСЬ на лучшее качество? вы можете сначала попробовать алгоритм и посмотреть, лучше он или нет! - person fatih; 11.01.2014
comment
Вот о чем мой вопрос, я читал о SVD, и теперь я пробую его, но, как уже говорилось, мое первое сомнение связано с тем, как настроить алгоритмы и запустить факторизацию. Помимо этого, второе, что я спросил, это есть ли способ предоставлять рекомендации в режиме реального времени, может быть, это должен быть отдельный вопрос. - person user1045047; 12.01.2014
comment
Мне очень жаль. Я забыл о вашем первом вопросе. Вы должны выполнить поиск по сетке для наилучшего параметра для ваших данных. Я не знаю о возможности реального времени. Но вы можете кэшировать факторизацию. Какова скорость рекомендации при использовании кеша? - person fatih; 13.01.2014