This is our Tensorflow implementation for the paper:
Xiang Wang, Xiangnan He, Meng Wang, Fuli Feng, and Tat-Seng Chua (2019). Neural Graph Collaborative Filtering, Paper in ACM DL or Paper in arXiv. In SIGIR'19, Paris, France, July 21-25, 2019.
Author: Dr. Xiang Wang (xiangwang at u.nus.edu)
Neural Graph Collaborative Filtering (NGCF) is a new recommendation framework based on graph neural network, explicitly encoding the collaborative signal in the form of high-order connectivities in user-item bipartite graph by performing embedding propagation.
If you want to use our codes and datasets in your research, please cite:
@inproceedings{NGCF19,
author = {Xiang Wang and
Xiangnan He and
Meng Wang and
Fuli Feng and
Tat{-}Seng Chua},
title = {Neural Graph Collaborative Filtering},
booktitle = {Proceedings of the 42nd International {ACM} {SIGIR} Conference on
Research and Development in Information Retrieval, {SIGIR} 2019, Paris,
France, July 21-25, 2019.},
pages = {165--174},
year = {2019},
}
The code has been tested running under Python 3.6.5. The required packages are as follows:
The instruction of commands has been clearly stated in the codes (see the parser function in NGCF/utility/parser.py).
Gowalla dataset
python NGCF.py --dataset gowalla --regs [1e-5] --embed_size 64 --layer_size [64,64,64] --lr 0.0001 --save_flag 1 --pretrain 0 --batch_size 1024 --epoch 400 --verbose 1 --node_dropout [0.1] --mess_dropout [0.1,0.1,0.1]
Amazon-book dataset
python NGCF.py --dataset amazon-book --regs [1e-5] --embed_size 64 --layer_size [64,64,64] --lr 0.0005 --save_flag 1 --pretrain 0 --batch_size 1024 --epoch 200 --verbose 50 --node_dropout [0.1] --mess_dropout [0.1,0.1,0.1]
Some important arguments:
alg_type
ngcf
(by default), proposed in Neural Graph Collaborative Filtering, SIGIR2019. Usage: --alg_type ngcf
.gcn
, proposed in Semi-Supervised Classification with Graph Convolutional Networks, ICLR2018. Usage: --alg_type gcn
.gcmc
, propsed in Graph Convolutional Matrix Completion, KDD2018. Usage: --alg_type gcmc
.adj_type
ngcf
(by default), where each decay factor between two connected nodes is set as 1(out degree of the node), while each node is also assigned with 1 for self-connections. Usage: --adj_type ngcf
.plain
, where each decay factor between two connected nodes is set as 1. No self-connections are considered. Usage: --adj_type plain
.norm
, where each decay factor bewteen two connected nodes is set as 1/(out degree of the node + self-conncetion). Usage: --adj_type norm
.gcmc
, where each decay factor between two connected nodes is set as 1/(out degree of the node). No self-connections are considered. Usage: --adj_type gcmc
.node_dropout
--node_dropout [0.1] --node_dropout_flag 1
node_dropout_flag
also needs to be set as 1, since the node dropout could lead to higher computational cost compared to message dropout.mess_dropout
--mess_dropout [0.1,0.1,0.1]
.We provide two processed datasets: Gowalla and Amazon-book.
train.txt
test.txt
user_list.txt
item_list.txt
This research is supported by the National Research Foundation, Singapore under its International Research Centres in Singapore Funding Initiative. Any opinions, findings and conclusions or recommendations expressed in this material are those of the author(s) and do not reflect the views of National Research Foundation, Singapore.