The PyTorch implementation of LightGCN
This is the Pytorch implementation for our SIGIR 2020 paper:
SIGIR 2020. Xiangnan He, Kuan Deng ,Xiang Wang, Yan Li, Yongdong Zhang, Meng Wang(2020). LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation, Paper in arXiv.
Author: Prof. Xiangnan He (staff.ustc.edu.cn/~hexn/)
(Also see Tensorflow implementation)
In this work, we aim to simplify the design of GCN to make it more concise and appropriate for recommendation. We propose a new model named LightGCN,including only the most essential component in GCN—neighborhood aggregation—for collaborative filtering
pip install -r requirements.txt
We provide three processed datasets: Gowalla, Yelp2018 and Amazon-book and one small dataset LastFM.
see more in
dataloader.py
run LightGCN on Gowalla dataset:
Change
ROOT_PATHin
code/world.py
cd code && python main.py --decay=1e-4 --lr=0.001 --layer=3 --seed=2020 --dataset="gowalla" --topks="[20]" --recdim=64
... ====================== EPOCH[5/1000] BPR[sample time][16.2=15.84+0.42] [saved][[BPR[aver loss1.128e-01]] [0;30;43m[TEST][0m {'precision': array([0.03315359]), 'recall': array([0.10711388]), 'ndcg': array([0.08940792])} [TOTAL TIME] 35.9975962638855 ... ====================== EPOCH[116/1000] BPR[sample time][16.9=16.60+0.45] [saved][[BPR[aver loss2.056e-02]] [TOTAL TIME] 30.99874997138977 ...
NOTE:
testbatchand enable
multicore(Windows system may encounter problems with
multicoreoption enabled)
tensorboardoption, it's good.
--seed=2020) of
numpyand
torchin the beginning, if you run the command as we do above, you should have the exact output log despite the running time (check your output of epoch 5 and epoch 116).
code/sources/for negative sampling. To use the extension, please install
pybind11and
cppimportunder your environment
dataloader.py, and implement a dataloader inherited from
BasicDataset. Then register it in
register.py.
model.py, and implement a model inherited from
BasicModel. Then register it in
register.py.
Procedure.py, and implement a function. Then modify the corresponding code in
main.py
all metrics is under top-20
tensorflow version results:
pytorch version results (stop at 1000 epochs):
(for seed=2020)
| | Recall | ndcg | precision | | ----------- | ---------------------------- | ----------------- | ---- | | layer=1 | 0.1687 | 0.1417 | 0.05106 | | layer=2 | 0.1786 | 0.1524 | 0.05456 | | layer=3 | 0.1824 | 0.1547 | 0.05589 | | layer=4 | 0.1825 | 0.1537 | 0.05576 |
| | Recall | ndcg | precision | | ----------- | ---------------------------- | ----------------- | ---- | | layer=1 | 0.05604 | 0.4557 | 0.02519 | | layer=2 | 0.05988 | 0.04956 | 0.0271 | | layer=3 | 0.06347 | 0.05238 | 0.0285 | | layer=4 | 0.06515 | 0.05325 | 0.02917 |