GithubHelp home page GithubHelp logo

hkuds / lightgcl Goto Github PK

View Code? Open in Web Editor NEW
162.0 162.0 16.0 52.45 MB

[ICLR'2023] "LightGCL: Simple Yet Effective Graph Contrastive Learning for Recommendation"

Home Page: https://arxiv.org/abs/2302.08191

Python 100.00%
collaborative-filtering graph-contrastive-learning graph-neural-networks recommendation self-supervised-learning

lightgcl's Introduction

Hi there ๐Ÿ‘‹

โœจWelcome to the Data Intelligence Lab @ HKU!โœจ

๐Ÿš€ Our Lab is Passionately Dedicated to Exploring the Forefront of the Data Science & AI ๐Ÿ‘จโ€๐Ÿ’ป

ย  ย  ย  ย 

lightgcl's People

Contributors

hkuds avatar rick-cai avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

lightgcl's Issues

infoNCE

ไฝ ๅฅฝ๏ผŒๆˆ‘ๆ˜ฏไธ€ไธชๅฐ็™ฝ๏ผŒ็œ‹็š„่ฎบๆ–‡ไธๅคš๏ผŒ้—ฎ็š„้—ฎ้ข˜ๅฏ่ƒฝไผšๅพˆๅนผ็จš๏ผŒไฝ†ๆ˜ฏ่ฟ˜ๆ˜ฏๅธŒๆœ›ไฝ ่ƒฝ่งฃ็ญ”ๆˆ‘็š„็–‘ๆƒ‘ใ€‚ๆˆ‘ๅœจๅคง้ƒจๅˆ†่ฎบๆ–‡ไธญ็œ‹ๅˆฐ็š„infoNCEๆ‰€็”จ็š„ๅชๆœ‰ๆญฃๆ ทๆœฌ๏ผŒ่€Œ่ดŸๆ ทๆœฌๅช็”จๅœจrecไปปๅŠก็š„bprๆŸๅคฑไธญใ€‚่€Œ่ฟ™็ฏ‡่ฎบๆ–‡ไปฃ็ ็š„infoNCEไธญ้ƒฝ็”จๅˆฐไบ†ๆญฃ่ดŸๆ ทๆœฌ๏ผŒๆˆ‘ๅฐ่ฏ•ๅฐ†iidไฟฎๆ”นไธบpos๏ผŒๅช็”จๆญฃๆ ทๆœฌ๏ผŒๆ•ˆๆžœ็•ฅๅพฎไธ‹้™๏ผŒไฝ†ไพๆ—ง่กจ็Žฐ่‰ฏๅฅฝใ€‚่ฏท้—ฎ๏ผŒ่ฟ™ไธค็งๆ–นๆณ•ๆœ‰ไป€ไนˆๅŒบๅˆซๅ—๏ผŒๅ“ช็งๆ–นๆณ•ๅฅฝไธ€็‚น๏ผŸ

Some questions about the correctness of the code

Dear anthors,
I am interested in the simple while effective approach you propose. In February, I noticed this paper and download its code from https://anonymous.4open.science/r/LightGCL/. Recently I wanna do some improvements based on this work, but I notice that the code of the initial version may be incorrect? For InfoNCE loss, the code implementation is as following:

u_mask = (torch.rand(len(uids))>0.5).float().cuda(self.device)
gnn_u = nn.functional.normalize(self.Z_u_list[l][uids],p=2,dim=1)
hyper_u = nn.functional.normalize(self.G_u_list[l][uids],p=2,dim=1)
hyper_u = self.Wsl-1
pos_score = torch.exp((gnn_u*hyper_u).sum(1)/self.temp)
neg_score = torch.exp(gnn_u @ hyper_u.T/self.temp).sum(1)
loss_s_u = ((-1 * torch.log(pos_score/(neg_score+1e-8) + 1e-8))*u_mask).sum()

The neg_score should be "torch.exp(gnn_u @ self.G_u_list[l].T/self.temp).sum(1)" instead of the code above in my opinion.
And I am pretty confused about it and whether the code is correct. If not correct, how can you get such state-of-art performance?
Look forward to your reply soon.

The actual Train/Validate/Testing splitting is not consistent with Paper.

In the section 4.1.1 DATASETS AND EVALUATION PROTOCOLS, "we split the datasets into training, validation and testing sets with a ratio of 7:2:1."

However, in the code, i find out that the raw data only contain two trnMat.pkl and tstMat.pkl files. Also, the implementation directly use the testing set in the training stage as validation set. Is there anything missing when i read the code?

ไธๅฅฝๆ„ๆ€็œ‹้”™ไบ†

# sample pos and neg pos = [] neg = [] iids = set() for i in range(len(batch_users)): u = batch_users[i] u_interact = train_csr[u].toarray()[0] positive_items = np.random.permutation(np.where(u_interact==1)[0]) negative_items = np.random.permutation(np.where(u_interact==0)[0]) item_num = min(max_samp,len(positive_items)) positive_items = positive_items[:item_num] negative_items = negative_items[:item_num] pos.append(torch.LongTensor(positive_items).cuda(torch.device(device))) neg.append(torch.LongTensor(negative_items).cuda(torch.device(device))) iids = iids.union(set(positive_items)) iids = iids.union(set(negative_items))

ๅœจmain.pyไธญ็š„็ฌฌ132-137่กŒไปฃ็ ๏ผŒๆจกๅž‹้€‰็”จ็š„้‡‡ๆ ทๆ–นๆณ•ๆ˜ฏๅ‡้šๆœบ็š„ใ€‚ๅœจๆฏ่ฝฎ่ฎญ็ปƒ่ฟ‡็จ‹ไธญ๏ผŒuser็š„้กบๅบๆ˜ฏๅ›บๅฎš็š„่€Œ้ž้šๆœบใ€‚่ฟ™ๅพˆๅฎนๆ˜“ๅฏผ่‡ดๆจกๅž‹่ฟ‡ๆ‹Ÿๅˆใ€‚
ๆˆ‘ๅฏนๆจกๅž‹็š„ไปฃ็ ้‡ๆ–ฐๅšไบ†ไฟฎๆ”น๏ผŒๆ”นๅ˜ไบ†ๅ…ถๅ‡้šๆœบ็š„้‡‡ๆ ทๆ–นๆณ•๏ผˆๅ…ทไฝ“ๆ–นๆณ•ๅ‚่€ƒrecboleๆก†ๆžถไธ‹็š„้‡‡ๆ ทๆ–นๆณ•ไปฅๅŠLightGCN็š„้‡‡ๆ ทๆ–นๆณ•๏ผ‰ใ€‚็ป“ๆžœๆ˜ฏๆจกๅž‹ๅœจyelpๆ•ฐๆฎ้›†ไธŠ๏ผŒrecall@20ไธŠๆœ‰ๆ˜Žๆ˜พๆๅ‡๏ผŒไธบ0.0938๏ผŒndcg@20ๆœ‰้™ไฝŽ๏ผŒไธบ0.0508ใ€‚ไฝ†ๆ˜ฏๅœจๆจชๅ‘ๅฏนๆฏ”ไธญ๏ผŒLightGCL็š„่กจ็Žฐ็”š่‡ณ่ฟ˜ไธๅฆ‚LightGCN๏ผŒๅ‡ไฝŽไบ†0.02ๅทฆๅณใ€‚
ๆˆ‘ๆ€€็–‘ไฝœ่€…ๅœจ้€‰็”จๅ…ถไป–ๆจกๅž‹่ฟ›่กŒๅฏนๆฏ”ๅฎž้ชŒ็š„ๆ—ถๅ€™ไนŸ้‡‡็”จ็š„ๆ˜ฏ่ฟ™็งโ€œๅ‡้šๆœบโ€้‡‡ๆ ท๏ผŒ่ฟ›่€Œๅฏผ่‡ด่ฎบๆ–‡ไธญๆŠฅๅ‘Š็š„ๅ…ถไป–baselineๆจกๅž‹็š„ๆŒ‡ๆ ‡่ฟœ่ฟœไฝŽไบŽๆญฃๅธธๆƒ…ๅ†ตใ€‚

ps.ๅฆๅค–่ฟ˜ๆœ‰ไธ€็‚น๏ผŒๅœจๆ”นๅ˜ๆจกๅž‹็š„้‡‡ๆ ทๆ–นๆณ•ๅŽ๏ผŒๅ…ถไป–ๅ‚ๆ•ฐไธๅ˜๏ผŒๆจกๅž‹ๅ‡บ็Žฐไบ†ๆขฏๅบฆ็ˆ†็‚ธๆƒ…ๅ†ต๏ผŒๆˆ‘่ฎคไธบ่ฟ™ๆ˜ฏๅœจๅฏนๆฏ”ๅญฆไน ่ฟ‡็จ‹ไธญๅŠ ๅ…ฅๆƒ้‡Wไฝ†ๆœชnormalize็š„ๅŽŸๅ› ใ€‚ๆ‰€ไปฅๆˆ‘ๅŒๆ—ถๅšไบ†ๅŽปๆŽ‰WไปฅๅŠ่ฐƒๅคงtempไธค็งๆ–นๆณ•๏ผŒไปฅ้ฟๅ…ๆขฏๅบฆ็ˆ†็‚ธ๏ผŒๅ…ถ็ป“ๆžœไพๆ—งๅพˆๅทฎใ€‚

About dataset splits.

Hi. I am a very interested reader of your paper. I have a question about dataset splits and would be grateful if you answer me when you have time.

In the paper, each dataset has the following interactions:

Yelp: 1,517,326
Gowalla: 1,172,425
ML-10M: 9,988,816
Amazon-book: 2,240,156
Tmall: 2,357,450

and all datasets are split into training, validation, and testing with a ratio of 7:2:1, which means each training, validation, and testing dataset has the following interactions:

Yelp: 1,062,128 / 303,465 / 151,733 (70%, 20%, 10%)
Gowalla: 820,697 / 234,485 / 117,243 (70%, 20%, 10%)
ML-10M: 6,992,171 / 1,997,763 / 998,882 (70%, 20%, 10%)
Amazon-book: 1,568,109 / 448,031 / 224,016 (70%, 20%, 10%)
Tmall: 1,650,215 / 471,490 / 235,745 (70%, 20%, 10%)

But I found that the uploaded dataset has the following interactions: (trnMat.pkl and tstMat.pkl)

Yelp: 1069128 / - / 305466 (70%, -, 20%)
Gowalla: 1172425 / - / 130270 (100%, -, 10%)
ML-10M: 6999171 / - / 1999761 (70%, -, 20%)
Amazon-book: 2240156 / - / 640045 (100%, -, 30%)
Tmall: 2357450 / - / 261939 (100%, -, 10%)

which is far different from the paper. Am I missing something important?
I look forward to hearing back from you.

่ฎบๆ–‡็š„SVDๅˆ†่งฃๆ˜ฏๅฆๆœ‰ๆ„ไน‰

็ป่ฟ‡ๆถˆ่žๅฎž้ชŒๅ‘็Žฐๅˆ ๅŽปSVDๅˆ†่งฃ๏ผŒไธŽ่‡ช่บซ่Š‚็‚นๅฏนๆฏ”็ป“ๆžœไนŸๆ˜ฏไธ€ๆ ท็š„๏ผŒๅนถไธ”--lambda1็š„ๅ€ผไธบ1e-7่ฟ™ไนˆๅฐ๏ผŒcl_lossๆ˜ฏๅฆ็œŸ็š„ๆœ‰ไฝœ็”จๅ‘ข

SimGCLๅœจ่ฎบๆ–‡ไธญๅค„ไบŽunderfitting็š„็Šถๆ€

ไฝœ่€…ไฝ ๅฅฝ๏ผŒๆˆ‘ๆ˜ฏSimGCL็š„ไฝœ่€…๏ผŒ็ปๅธธๆœ‰ๅ…ณๆณจ่ดต็ป„็š„ๅทฅไฝœใ€‚ๆœ€่ฟ‘ไนŸๆœ‰ๆ‰“็ฎ—ๅค็ŽฐLightGCLใ€‚

ไฝ†ๆˆ‘ๅ‘็ŽฐๅœจLightGCL็š„่ฎบๆ–‡ไธญ๏ผŒSimGCLไผผไนŽๅฎŒๅ…จๅค„ไบŽๆฌ ๆ‹Ÿๅˆๆˆ–่€…้”™่ฏฏ้€‰ๆ‹ฉ่ถ…ๅ‚ๆ•ฐ็š„็Šถๆ€ใ€‚ๆˆ‘ไฝฟ็”จไบ†ๆœฌrepo้‡Œๆไพ›็š„yelpๅ’Œgowallaๆ•ฐๆฎ้›†้‡ๆ–ฐๅฏนSimGCL่ฟ›่กŒไบ†ๆต‹่ฏ•ใ€‚ๅœจไฟๆŒgeneral settingไธŽๆ–‡ไธญไธ€่‡ด็š„ๆƒ…ๅ†ตไธ‹๏ผŒๆˆ‘ๅ‡ญ็ป้ชŒ้šๆœบ้€‰ๆ‹ฉไบ† lambda_cl = 0.2, epsilon=0.1, tau=0.2็š„็ป„ๅˆ ๏ผˆๅŽไธคไธชๅ€ผๅฏนๅคงๅคšๆ•ฐๆ•ฐๆฎ้›†ๆฅ่ฏดๆ˜ฏSimGCL็š„็›ธๅฏนๆœ€ไผ˜่ถ…ๅ‚๏ผ‰๏ผŒๅœจ่ฟญไปฃๆ‰€ๆœ‰่ฎญ็ปƒๆ ทๆœฌ็ฌฌไบŒๆฌกไน‹ๅŽ็š„็ป“ๆžœๅณ่ถ…่ฟ‡ไบ†LightGCL็š„็ป“ๆžœ๏ผŒไนŸ่ฟœ่ถ…SimGCLๅœจๆ–‡ไธญ็š„็ป“ๆžœใ€‚ๆˆ‘็š„็ป“ๆžœๅฆ‚ไธ‹๏ผš

Yelp: SimGCL ็ฌฌไบŒๆฌก่ฟญไปฃ Recall@20: 0.0962 NDCG@20: 0.0833
Yelp: SimGCL ๆ”ถๆ•›๏ผˆ็ฌฌไนๆฌก๏ผ‰ Recall@20: 0.1048 NDCG@20: 0.0903
yelp: SimGCL ่ฎบๆ–‡ๆฑ‡ๆŠฅ็ป“ๆžœ Recall@20: 0.0718 NDCG@20: 0.0615
yelp: ๆ–‡ไธญLightGCL็ป“ๆžœ Recall@20: 0.0793 NDCG@20: 0.0668

Gowalla: SimGCL ็ฌฌไบŒๆฌก่ฟญไปฃ Recall@20: 0.1739 NDCG@20: 0.1060
Gowalla: SimGCL ๆ”ถๆ•› ๏ผˆ็ฌฌๅๆฌก๏ผ‰Recall@20: 0.1893 NDCG@20: 0.1145
Gowalla: SimGCL ่ฎบๆ–‡ๆฑ‡ๆŠฅ็ป“ๆžœ Recall@20: 0.1357 NDCG@20: 0.0818
Gowalla: ๆ–‡ไธญLightGCL็ป“ๆžœ Recall@20: 01578 NDCG@20: 0.0935

ๆ–‡ไธญๆๅˆฐ โ€œTo ensure a fair comparison, we tune the hyperparameters of all the baselines within the ranges suggested in the original papers.โ€ ไฝ†ๆˆ‘ๅ‘็Žฐ่ดต็ป„ๅฎž้ชŒไธญๅฎž้™…ไธŠๅฏ่ƒฝไฝฟ็”จไบ† lambda_cl = 0.01, tau=0.1ใ€‚ lambda_cl = 0.01ๅœจSimGCL็š„ๆ–‡็ซ ๅ‚ๆ•ฐๆ•ๆ„Ÿๆ€งๅฎž้ชŒไธญๅทฒ่ขซ่กจๆ˜Žไธบไธ‰ไธชๆ•ฐๆฎ้›†ไธŠ่พƒๅทฎ็š„้€‰ๆ‹ฉใ€‚ๅฆๅค–SimGCLๆ–‡็ซ ไธญไนŸๆๅˆฐโ€œ In SimGCL and SGL, we empirically let the temperature ๐œ = 0.2, and this value is also reported as the best in the original paper of SGL.โ€ tau่ฟ™ไธชๅ‚ๆ•ฐๅฎž้™…ไธŠๆ˜ฏ่พƒไธบๆ•ๆ„Ÿ็š„๏ผŒๆˆ‘็š„็ป้ชŒๆ˜ฏ0.2ๅ˜ๅˆฐ0.1ไผšๅ‡บ็Žฐ็ป“ๆžœ็š„่พƒๅคงๆณขๅŠจใ€‚ไผผไนŽLightGCLๅฎž้ชŒๆ—ถๅนถๆœชๅ‚่€ƒSimGCL็š„ๆ–‡็ซ ใ€‚

ไปฅไธŠๅ…ณไบŽSimGCL็š„็ป“ๆžœๅ‡ไธบ้€š่ฟ‡SELFRecๅพ—ๅˆฐใ€‚ๆ„Ÿๅ…ด่ถฃ็š„่ฏๅฏไปฅๅฏนๆฏ”ๆ˜ฏๅฆๆˆ‘ไปฌๅ…ณไบŽSimGCL็š„ๅฎž็Žฐๆœ‰ไธๅŒไน‹ๅค„๏ผŒๅฏผ่‡ดไบ†่ฎบๆ–‡้‡Œ้ข็š„้—ฎ้ข˜ใ€‚

------------------------- UPDATE---------------------------------------------------------------------

ๆˆ‘็”จlambda_cl = 0.2, epsilon=0.1, tau=0.2็š„็ป„ๅˆๅœจ่ดต็ป„็š„SSLRecไธŠๅฐ่ฏ•ไบ†ไธ€ไธ‹๏ผŒyelp datasetไธŠ็ป่ฟ‡ไธคๆฌก่ฟญไปฃๅŽไธบ

Recall@20: 0.0929 NDCG@20: 0.0791

ๆˆ‘ๆฒกๆœ‰่ท‘ๅฎŒๆŽๆŽ‰ไบ†๏ผŒไฝ†ไธคๆฌก่ฟญไปฃไนŸๅฅฝไบŽๆ–‡ไธญๆฑ‡ๆŠฅ็š„SimGCLไธŽLightGCL็š„็ป“ๆžœใ€‚

็„ถๅŽๆˆ‘ไนŸไฝฟ็”จไบ†SSLRec้‡Œ้ข้ป˜่ฎค็š„SimGCLๅ‚ๆ•ฐ lambda_cl = 0.01, epsilon = 0.2, tau=0.1, ไธ‰ๆฌก่ฟญไปฃ่ฎฐๅฝ•ๅฆ‚ไธ‹๏ผš

{'optimizer': {'name': 'adam', 'lr': 0.001, 'weight_decay': 0}, 'train': {'epoch': 100, 'batch_size': 256, 'save_model': False, 'loss': 'pairwise', 'test_step': 1}, 'test': {'metrics': ['recall', 'ndcg'], 'k': [10, 20], 'batch_size': 256}, 'data': {'type': 'general_cf', 'name': 'yelp', 'user_num': 29601, 'item_num': 24734}, 'model': {'name': 'simgcl', 'keep_rate': 1.0, 'layer_num': 2, 'reg_weight': 1e-06, 'cl_weight': 0.01, 'temperature': 0.1, 'embedding_size': 32, 'eps': 0.2}, 'tune': {'enable': False}, 'device': 'cuda'}
Training Recommender: 100%|โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 4177/4177 [03:48<00:00, 18.26it/s]
[Epoch 0 / 100] bpr_loss: 0.2147 reg_loss: 0.0304 cl_loss: 0.1139
[recall@10: 0.0439 recall@20: 0.0728 ] [ndcg@10: 0.0533 ndcg@20: 0.0621 ]
Training Recommender: 100%|โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 4177/4177 [03:48<00:00, 18.29it/s]
[Epoch 1 / 100] bpr_loss: 0.1037 reg_loss: 0.0536 cl_loss: 0.1022
[recall@10: 0.0478 recall@20: 0.0810 ] [ndcg@10: 0.0582 ndcg@20: 0.0686 ]
Training Recommender: 100%|โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 4177/4177 [03:48<00:00, 18.28it/s]
[Epoch 2 / 100] bpr_loss: 0.0929 reg_loss: 0.0623 cl_loss: 0.0932
[recall@10: 0.0499 recall@20: 0.0840 ] [ndcg@10: 0.0605 ndcg@20: 0.0711 ]

็ฌฌไบŒๆฌก่ฟญไปฃๅฎŒไน‹ๅŽไนŸๅทฒ็ป่ถ…่ฟ‡ไบ†LightGCL็š„็ป“ๆžœใ€‚ไนŸๅฏไปฅ็œ‹ๅ‡บ่ฟ™็ป„ๅ‚ๆ•ฐ็กฎๅฎžๅทฎไบŽSimGCL่ฎบๆ–‡้‡ŒๆŽจ่้€‰ๆ‹ฉ็š„ๅ‚ๆ•ฐใ€‚

parser1ไธญ็š„data

ๅœจparser1ไธญ๏ผŒdefault='yelp'๏ผŒ๏ผŒไฝ†ๆˆ‘ไฟฎๆ”นyelp๏ผŒๆ”นไธบgowallaๅ’Œml10mๆ•ฐๆฎ้›†๏ผŒ่ฟ˜ๆ˜ฏๅœจ่ท‘็š„yelpๆ•ฐๆฎ้›†๏ผŒ่ฏท้—ฎไฝœ่€…่ฟ™ๆ˜ฏไธบไป€ไนˆ๏ผŸๆ€Žไนˆไฟฎๆ”นไธบๅœจๅ…ถๅฎƒๆ•ฐๆฎ้›†ไธŠ่ท‘๏ผŸ

About the time complexity

Very nice work! While I find the time complexity I computed for graph convolution of LightGCL should be O[2ELd + 2IJLd] which is not aligned with that in the paper in Table 2. I think the reconstructed graph is fully connected (a dense matrix) and can not use sparse matrix multiplication to make acceleration. Can you help me figure it out? Thanks!

The performance in the paper is inconsistent with that the code does.

On Yelp, the performance of the paper is low (Recall@20: 0.0793 Ndcg@20:0.0668 Recall@40:0.1292 Ndcg@40:0.0852). The actual running is high( Recall@20: 0.1005596274687573 Ndcg@20: 0.08650433827615736 Recall@40: 0.1597782188737718 Ndcg@40: 0.10812958940033758).

The details of the actual running is following:

Test of epoch 96 : Recall@20: 0.10051406435437939 Ndcg@20: 0.08627444271978929 Recall@40: 0.15986645365267868 Ndcg@40: 0.10792282233659943
100%|โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 262/262 [00:24<00:00, 10.64it/s]
Epoch: 97 Loss: 2.5118775304037197 Loss_r: 0.3031725097476071 Loss_s: 2.2050413157193716
100%|โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 262/262 [00:24<00:00, 10.68it/s]
Epoch: 98 Loss: 2.511937270637687 Loss_r: 0.30322049376163773 Loss_s: 2.205053930974189
100%|โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 262/262 [00:24<00:00, 10.59it/s]
Epoch: 99 Loss: 2.5120028903466145 Loss_r: 0.30331670953572254 Loss_s: 2.205021769945858
100%|โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 116/116 [00:08<00:00, 13.75it/s]
-------------------------------------------
Test of epoch 99 : Recall@20: 0.1005596274687573 Ndcg@20: 0.08650433827615736 Recall@40: 0.1597782188737718 Ndcg@40: 0.10812958940033758
-------------------------------------------
Final test: Recall@20: 0.1005596274687573 Ndcg@20: 0.08650433827615736 Recall@40: 0.1597782188737718 Ndcg@40: 0.10812958940033758

On ML-10M, the performance of the paper is high (Recall@20: 0.2613 Ndcg@20:0.3106 Recall@40:0.3799 Ndcg@40:0.3387 1). The actual running is low (Recall@20: 0.22966711970088424 Ndcg@20: 0.28407235346796683 Recall@40: 0.31642916993719605 Ndcg@40: 0.30047428117834374)

The details of the actual running is following:

Epoch: 98 Loss: 2.513269269026951 Loss_r: 0.3047634800356546 Loss_s: 2.18953038922104
100%|โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 1709/1709 [07:04<00:00,  4.03it/s]
Epoch: 99 Loss: 2.5132692800480556 Loss_r: 0.3047331753462082 Loss_s: 2.1895613562928227
100%|โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 273/273 [00:23<00:00, 11.86it/s]
-------------------------------------------
Test of epoch 99 : Recall@20: 0.22966711970088424 Ndcg@20: 0.28407235346796683 Recall@40: 0.31642916993719605 Ndcg@40: 0.30047428117834374
-------------------------------------------
Final test: Recall@20: 0.22966711970088424 Ndcg@20: 0.28407235346796683 Recall@40: 0.31642916993719605 Ndcg@40: 0.30047428117834374

BUG in svd_u,s,svd_v = torch.svd_lowrank(adj, q=svd_q)

While implementing the code, it appeared an bug

torch._C._LinAlgError: cusolver error: CUSOLVER_STATUS_EXECUTION_FAILED, when calling cusolverDnXgeqrf( handle, params, m, n, CUDA_R_32F, reinterpret_cast<void*>(A), lda, CUDA_R_32F, reinterpret_cast<void*>(tau), CUDA_R_32F, reinterpret_cast<void*>(bufferOnDevice), workspaceInBytesOnDevice, reinterpret_cast<void*>(bufferOnHost), workspaceInBytesOnHost, info). This error may appear if the input matrix contains NaN.

But we have no idea to fix it.

About the reproducibility and validation set

Hi. I am a reader who read your paper with great interest. After running your code myself, I have two questions. I would be grateful if you could answer them when you have time.

  1. When I run the command "python main.py --data yelp", the performance is higher than the performance in your paper. I'm wondering why the results are different.
    [Performance table of my experiments]
ย  ย  Recall@20 Recall@40 NDCG@20 NDCG@40
Yelp reported 0.0793 0.1292 0.0668 0.0778
ย  reproduced 0.1001 0.1587 0.0868 0.1080
Gowalla reported 0.1578 0.2245 0.0935 0.1108
ย  reproduced 0.2124 0.2993 0.1236 0.1464
  1. In the paper, the validation set is used 20% of the whole data, but in the code, it is not used. Also, early stopping is not used in the code, so I'm wondering if the reported results in the paper are not using early stopping.

Thank you for your time.
I look forward to hearing back from you.

ๅœจๅฑ€้ƒจๅ›พไพ่ต–ๅ…ณ็ณปๅปบๆจก่ฟ‡็จ‹ไธญๆฏไธ€ๅฑ‚embedding่ฎก็ฎ—็š„้—ฎ้ข˜

ไฝœ่€…ๆ‚จๅฅฝ๏ผๅœจๅ›พๅท็งฏ็š„่ฟ‡็จ‹ไธญ๏ผŒๆ‚จๅœจ่ฎบๆ–‡ไธญ็ป™ๅ‡บ็š„ๅ…ฌๅผๆ˜ฏ๏ผšz(u)i,l = ฯƒ(p(Ai,:)E(v)l-1)๏ผŒe(u)i,l = z(u)i,l + e(u)i,l-1ใ€‚
ไฝ†ๆ˜ฏๆ‚จ็š„ไปฃ็ ๅฎž็Žฐๆ˜ฏ๏ผš

aggregate

self.E_u_list[layer] = self.Z_u_list[layer]
self.E_i_list[layer] = self.Z_i_list[layer]
่ฏท้—ฎ่ฟ™้‡Œๆ˜ฏๅฆๅญ˜ๅœจๅ‡บๅ…ฅๅ‘ข๏ผŸๆ˜ฏๅฆๅบ”่ฏฅๅŠ ไธŠself.E_u_list[layer-1]ๅ‘ข๏ผŸ

The performance in the paper is lower than that the code does.

The performance in the paper is lower than that the code does. For example, on gowalla, the actual running is Recall@20: 0.2103 Ndcg@20: 0.1223 Recall@40: 0.2991 Ndcg@40: 0.1453; but the paper is low (Recall@20: 0.1578 Ndcg@20: 0.0935 Recall@40: 0.2245 Ndcg@40: 0.1108). Is the paper not updated ?

ๅฎž้ชŒ็ป“ๆžœไธ€่‡ดๆ€ง

ๅœจLightGCNๅŽŸๅง‹่ฎบๆ–‡ไธญไนŸๆœ‰ๅ…ณไบŽgowallaๆ•ฐๆฎ้›†็š„ๅœจๅท็งฏๅฑ‚ๆ•ฐไธบ2็š„ๆƒ…ๅ†ตไธ‹็š„recall@20ๅ’Œndcg@20๏ผŒๅœจๅท็งฏๅฑ‚ๆ•ฐไธบ2็š„ๆƒ…ๅ†ตไธ‹๏ผŒไธบไป€ไนˆๅœจไฝ ไปฌ็š„่ฎบๆ–‡ไธญ็š„LightGCNๅฑ•็คบ็š„ๅฎž้ชŒ็ป“ๆžœไธŽLightGCNๅŽŸๅง‹่ฎบๆ–‡ไธญ็š„ๅทฎ่ท้‚ฃไนˆๅคงๅ‘ข๏ผŸ

How to visualize Embedding distributions

Thank you for your wonderful work, I'm a newbie about recommendation, and I was reading your article "LIGHTGCL: SIMPLE YET EFFECTIVE GRAPH CONTRASTIVE LEARNING FOR RECOMMENDATION", and I saw this visualization below. (on top of your existing code in this repository)?
image

ๅ…ณไบŽๅฏนๆฏ”็ฎ—ๆณ•HCCFๅœจไธๅŒๆ•ฐๆฎ้›†ไธŠ็š„ๅ‚ๆ•ฐ่ฎพ็ฝฎ

ๆ‚จๅฅฝ๏ผŒๆˆ‘ๆƒณ่ฏทๆ•™ไธ€ไธ‹ๅฝ“ๅ‰ๅฎž้ชŒไธ‹๏ผŒๆ‚จๅœจ่ฟ่กŒๅฏนๆฏ”็ฎ—ๆณ•HCCFๆ—ถ๏ผŒๅœจๅ„ไธชๆ•ฐๆฎ้›†ไธŠๅˆ†ๅˆซๆ˜ฏๆ€Žไนˆ่ฎพ็ฝฎ็š„ๅ‚ๆ•ฐ็š„ๅ‘ข๏ผŸ๏ผˆๆˆ‘็›ฎๅ‰ๆ˜ฏๅœจGowallaๆ•ฐๆฎ้›†ไธŠ่ฟ่กŒ๏ผŒไฝ†ๆ˜ฏๆ•ˆๆžœไผšๅทฎ็‰นๅˆซๅคš๏ผ‰

neg_score ๅ‡บ็ŽฐInfๅฏผ่‡ดloss nan

ๅœจ่‡ชๅฎšไน‰็š„ๆ•ฐๆฎไธŠๅ‡บ็Žฐneg_score ๅ‡บ็ŽฐInfๅฏผ่‡ดloss nan็š„ๆƒ…ๅ†ต๏ผŒไธป่ฆbugไปฃ็ ๅœจไบŽไธ‹้ข

LightGCL/model.py

Lines 78 to 80 in 5590453

neg_score = torch.log(torch.exp(G_u_norm[uids] @ E_u_norm.T / self.temp).sum(1) + 1e-8).mean()
neg_score += torch.log(torch.exp(G_i_norm[iids] @ E_i_norm.T / self.temp).sum(1) + 1e-8).mean()
pos_score = (torch.clamp((G_u_norm[uids] * E_u_norm[uids]).sum(1) / self.temp,-5.0,5.0)).mean() + (torch.clamp((G_i_norm[iids] * E_i_norm[iids]).sum(1) / self.temp,-5.0,5.0)).mean()

ๆ•ฐๆฎ้›†ๆž„ๅปบ

่ฏท้—ฎๆž„ๅปบๆ•ฐๆฎ้›†็š„ๆ—ถๅ€™๏ผŒuserๆˆ–item็š„ๅฑžๆ€งๅฆ‚ไฝ•ๆž„ๅปบ่ฟ›ๅŽป๏ผŸ่ฐข่ฐข๏ผ

่ฏท้—ฎๅฏไปฅๅˆ†ไบซไธ€ไธ‹ๅŸบ็บฟๆจกๅž‹GCA ็š„ไปฃ็ ๅ’Œๅ‚ๆ•ฐ่ฎพ็ฝฎๅ—

ๅœจๅค็Žฐbaseline็š„ๆ—ถๅ€™๏ผŒGCA็š„่กจ็ŽฐไธŽ่ฎบๆ–‡ไธญ็š„ๆ•ˆๆžœๆœ‰ๅทฎ่ท๏ผŒๅ› ๆญคๆƒณ่ฏท้—ฎไฝœ่€…ๆ˜ฏๅฆๅฏไปฅๅˆ†ไบซไธ€ไธ‹่ฎบๆ–‡ไธญๆ‰€็”จๅˆฐ็š„GCAไปฃ็ 

ๅ…ณไบŽ็Ÿฉ้˜ตnormalize็š„้—ฎ้ข˜

ๆ‚จๅฅฝ๏ผŒๆˆ‘ๅœจๅค็Žฐๆ‚จ็š„ไปฃ็ ็š„่ฟ‡็จ‹ไธญๅ‘็Žฐไบ†ไธ€ไธช็–‘ๆƒ‘๏ผŒๅฐฑๆ˜ฏๆ‚จ็š„ๅŽŸๅง‹้‚ปๆŽฅ็Ÿฉ้˜ตๅ’ŒSVDๅˆ†่งฃ้‡ๆž„็š„็Ÿฉ้˜ต้ƒฝๆฒกๆœ‰่ฟ›่กŒnormalizeๆ“ไฝœ๏ผŒไฝ†ๆ‚จๅœจๅŽŸๆ–‡ไธญๅฏนๅŽŸๅง‹้‚ปๆŽฅ็Ÿฉ้˜ต็š„ๅท็งฏๆ˜ฏๅšไบ†normalize็š„๏ผŒไธบไฝ•ๅœจๅฎž็Žฐ็š„ๆ—ถๅ€™ไธๅŠ normalizeๅ‘ข๏ผŸๆญคๅค–๏ผŒๅฆ‚ๆžœไธๅŠ normalize็›ดๆŽฅ่ฟ›่กŒๅ›พๆถˆๆฏไผ ้€’็š„่ฏๅฏ่ƒฝไผšๅ‡บ็Žฐ้—ฎ้ข˜๏ผŒไธบไฝ•ๆ–‡็ซ ไธญๅฏนSVDๅˆ†่งฃ้‡ๆž„็š„็Ÿฉ้˜ตไธ่ฟ›่กŒnormalizeๅ†่ฟ›่กŒๅ›พๆถˆๆฏไผ ้€’ๅ‘ข๏ผŸ่ฟ˜ๆœ‰ไธ€ไธชๅฐ้—ฎ้ข˜๏ผŒๅฐฑๆ˜ฏไฝฟ็”จSVDๅˆ†่งฃ้‡ๆž„ไน‹ๅŽ็Ÿฉ้˜ตไธญไผšๅ‡บ็Žฐ่ดŸๅ€ผ๏ผŒไฝ†ไปฃ็ ไธญๆฒกๆœ‰ๅฏน่ดŸๅ€ผ่ฟ›่กŒๅค„็†๏ผŒ่ฏท้—ฎ่ดŸๅ€ผไผšๅฏน็ป“ๆžœไบง็”Ÿๅฝฑๅ“ๅ—๏ผŸ

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.