Skip to content

xinyu-intel/ncf_mxnet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

93 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Neural Collaborative Filtering

Build Status

This is MXNet implementation for the paper:

Xiangnan He, Lizi Liao, Hanwang Zhang, Liqiang Nie, Xia Hu and Tat-Seng Chua (2017). Neural Collaborative Filtering. In Proceedings of WWW '17, Perth, Australia, April 03-07, 2017.

Three collaborative filtering models: Generalized Matrix Factorization (GMF), Multi-Layer Perceptron (MLP), and Neural Matrix Factorization (NeuMF). To target the models for implicit feedback and ranking task, we optimize them using log loss with negative sampling.

Author: Dr. Xiangnan He (http://www.comp.nus.edu.sg/~xiangnan/)

Code Reference: https://github.com/hexiangnan/neural_collaborative_filtering

Environment Settings

We use MXnet with MKL-DNN as the backend.

  • MXNet version: MXNet Master(TBD)

Install

pip install -r requirements.txt

Dataset

We provide the processed datasets on Google Drive: MovieLens 20 Million (ml-20m), you can download directly or run the script to prepare the datasets:

python convert.py ./data/

train-ratings.csv

  • Train file (positive instances).
  • Each Line is a training instance: userID\t itemID\t

test-ratings.csv

  • Test file (positive instances).
  • Each Line is a testing instance: userID\t itemID\t

test-negative.csv

  • Test file (negative instances).
  • Each line corresponds to the line of test.rating, containing 999 negative samples.
  • Each line is in the format: userID,\t negativeItemID1\t negativeItemID2 ...

Pre-trained models

We provide the pretrained ml-20m model on Google Drive, you can download directly for evaluation or calibration.

dtype HR@10 NDCG@10
float32 0.6393 0.3849
float32 opt 0.6393 0.3849
int8 0.6395 0.3852
int8 opt 0.6396 0.3852

Training

# train ncf model with ml-20m dataset
python train.py # --gpu=0

Model Optimizer

# optimize nc model
python model_optimizer.py

Calibration

# neumf calibration on ml-20m dataset
python ncf.py --prefix=./model/ml-20m/neumf --calibration
# optimized neumf calibration on ml-20m dataset
python ncf.py --prefix=./model/ml-20m/neumf-opt --calibration

Evaluation

# neumf float32 inference on ml-20m dataset
python ncf.py --batch-size=1000 --prefix=./model/ml-20m/neumf
# optimized neumf float32 inference on ml-20m dataset
python ncf.py --batch-size=1000 --prefix=./model/ml-20m/neumf-opt
# neumf int8 inference on ml-20m dataset
python ncf.py --batch-size=1000 --prefix=./model/ml-20m/neumf-quantized
# optimized neumf int8 inference on ml-20m dataset
python ncf.py --batch-size=1000 --prefix=./model/ml-20m/neumf-opt-quantized

Benchmark

usage: bash ./benchmark.sh [[[-p prefix ] [-e epoch] [-d dataset] [-b batch_size] [-i instance] [-c cores/instance]] | [-h]]

# neumf float32 benchmark on ml-20m dataset
sh benchmark.sh -p model/ml-20m/neumf
# optimized neumf float32 benchmark on ml-20m dataset
sh benchmark.sh -p model/ml-20m/neumf-opt
# neumf int8 benchmark on ml-20m dataset
sh benchmark.sh -p model/ml-20m/neumf-quantized
# optimized neumf int8 benchmark on ml-20m dataset
sh benchmark.sh -p model/ml-20m/neumf-opt-quantized

Releases

No releases published

Packages

 
 
 

Contributors