У меня есть набор данных из 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);
Согласно моему базовому пониманию, я считаю, что факторизация происходит в автономном режиме и создает пользовательские функции и функции элементов. В то время как фактические запросы обслуживаются путем вычисления лучших продуктов для пользователя путем скалярного произведения вектора пользователя и всех возможных векторов элементов.
У меня есть пара сомнений относительно подхода: -
- Как лучше выбрать параметры факторизации и сколько времени обычно занимает факторизация? Я пробовал с вышеуказанными параметрами, и сама факторизация работала более 30 минут.
- Есть ли способ обслуживать запросы в реальном времени немного быстрее, так как скалярное произведение со всеми возможными векторами элементов приводит к большому времени запроса? Есть что-то как оффлайн СВД?
- Глядя на размер набора данных, который у меня есть, должен ли я попробовать какой-нибудь другой факторизатор?