DeepRecommender

Deep learning for recommender systems

Github stars Tracking Chart

Deep AutoEncoders for Collaborative Filtering

This is not an official NVIDIA product. It is a research project described in: "Training Deep AutoEncoders for Collaborative Filtering"(https://arxiv.org/abs/1708.01715)

The model

The model is based on deep AutoEncoders.

AutEncoderPic

Requirements

  • Python 3.6
  • Pytorch: pipenv install
  • CUDA (recommended version >= 8.0)

Training using mixed precision with Tensor Cores

Getting Started

Run unittests first

The code is intended to run on GPU. Last test can take a minute or two.

$ python -m unittest test/data_layer_tests.py
$ python -m unittest test/test_model.py

Tutorial

Checkout this tutorial by miguelgfierro.

Get the data

Note: Run all these commands within your DeepRecommender folder

Netflix prize

  • Download from here into your DeepRecommender folder
$ tar -xvf nf_prize_dataset.tar.gz
$ tar -xf download/training_set.tar
$ python ./data_utils/netflix_data_convert.py training_set Netflix

Data stats, Dataset, Netflix 3 months, Netflix 6 months, Netflix 1 year, Netflix full, --------, ----------------, ----------------, -----------, ------------, Ratings train, 13,675,402, 29,179,009, 41,451,832, 98,074,901, Users train, 311,315, 390,795, 345,855, 477,412, Items train, 17,736, 17,757, 16,907, 17,768, Time range train, 2005-09-01 to 2005-11-31, 2005-06-01 to 2005-11-31, 2004-06-01 to 2005-05-31, 1999-12-01 to 2005-11-31, --------, ----------------, -----------, ------------, Ratings test, 2,082,559, 2,175,535, 3,888,684, 2,250,481, Users test, 160,906, 169,541, 197,951, 173,482, Items test, 17,261, 17,290, 16,506, 17,305, Time range test, 2005-12-01 to 2005-12-31, 2005-12-01 to 2005-12-31, 2005-06-01 to 2005-06-31, 2005-12-01 to 2005-12-31

Train the model

In this example, the model will be trained for 12 epochs. In paper we train for 102.

python run.py --gpu_ids 0 \
--path_to_train_data Netflix/NF_TRAIN \
--path_to_eval_data Netflix/NF_VALID \
--hidden_layers 512,512,1024 \
--non_linearity_type selu \
--batch_size 128 \
--logdir model_save \
--drop_prob 0.8 \
--optimizer momentum \
--lr 0.005 \
--weight_decay 0 \
--aug_step 1 \
--noise_prob 0 \
--num_epochs 12 \
--summary_frequency 1000

Note that you can run Tensorboard in parallel

$ tensorboard --logdir=model_save

Run inference on the Test set

python infer.py \
--path_to_train_data Netflix/NF_TRAIN \
--path_to_eval_data Netflix/NF_TEST \
--hidden_layers 512,512,1024 \
--non_linearity_type selu \
--save_path model_save/model.epoch_11 \
--drop_prob 0.8 \
--predictions_path preds.txt

Compute Test RMSE

python compute_RMSE.py --path_to_predictions=preds.txt

After 12 epochs you should get RMSE around 0.927. Train longer to get below 0.92

Results

It should be possible to achieve the following results. Iterative output re-feeding should be applied
once during each iteration.

(exact numbers will vary due to randomization), DataSet, RMSE, Model Architecture, --------, ----------------, ----------------, Netflix 3 months, 0.9373, n,128,256,256,dp(0.65),256,128,n, Netflix 6 months, 0.9207, n,256,256,512,dp(0.8),256,256,n, Netflix 1 year, 0.9225, n,256,256,512,dp(0.8),256,256,n, Netflix full, 0.9099, n,512,512,1024,dp(0.8),512,512,n

Main metrics

Overview
Name With OwnerNVIDIA/DeepRecommender
Primary LanguagePython
Program languagePython (Language Count: 1)
Platform
License:MIT License
所有者活动
Created At2017-09-08 20:48:44
Pushed At2021-05-17 23:38:49
Last Commit At2019-01-06 22:10:32
Release Count0
用户参与
Stargazers Count1.7k
Watchers Count72
Fork Count341
Commits Count41
Has Issues Enabled
Issues Count20
Issue Open Count10
Pull Requests Count13
Pull Requests Open Count1
Pull Requests Close Count2
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private