Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[🐛BUG] MHCN在Douban数据集上并没有复现出原论文的效果 #61

Open
LDY911 opened this issue Mar 15, 2023 · 8 comments
Open
Assignees
Labels
bug Something isn't working

Comments

@LDY911
Copy link

LDY911 commented Mar 15, 2023

您好,我使用MHCN在Douban数据集上并没有跑出原论文的效果,原论文对Douban数据集的预处理是删除掉评分小于4的item,原论文的结果是:recall@10:0.06556、ndcg@10:0.20694、precision@10:0.18283
但是我跑的结果是recall@10:0.0485、ndcg@10:0.1397、precision@10:0.1247
跑不过lightGCN,recall@10:0.0654、ndcg@10:0.1968、precision@10:0.171
想请教一下原因是什么,感谢指导

@LDY911 LDY911 added the bug Something isn't working label Mar 15, 2023
@LDY911
Copy link
Author

LDY911 commented Mar 15, 2023

想请教一下如何实现原论文中的结果,参数配置是怎么样的,我使用的就是默认的参数配置,好像除了LastFM,在其他数据集上,MHCN和SEPT都跑不过LightGCN,不过LightGCN的结果与原论文给出的大致相似,差别不大,但是MHCN和SEPT的结果相差较大,感谢指导

@LDY911
Copy link
Author

LDY911 commented Mar 15, 2023

我划分数据集是训练集:测试集=8:2,没有设置验证集,epoch=120,而且我发现RecBole的默认设置与原论文不太一样,比如embedding_size、ssl_reg等

@Sherry-XLL Sherry-XLL self-assigned this Mar 15, 2023
@Sherry-XLL
Copy link
Member

@LDY911 您好,要实现原论文中的结果需要和原论文设置保持基本一致才可以,比如 embedding_size 需要和原论文保持一致,直接使用默认的参数配置往往不能得到较好的结果。对于 MHCN 和 SEPT 等通过自监督学习的方式提升结果的模型,自监督学习的超参数 ssl_reg 对论文结果的影响较大,也需要经过较为精细的调参。

关于论文的配置可以参考原作者提供的代码:QRec。由于原文是基于 tensorflow 实现的 MHCN 模型,所以使用基于 PyTorch 的 RecBole-GNN 时需要对涉及到的超参数进行细致的搜索,才能基本复现原文的结果。

@LDY911
Copy link
Author

LDY911 commented Mar 15, 2023

好的,感谢您的回复,我去调整一下参数试试,谢谢指导

@Coder-Yu
Copy link

@LDY911 您好,要实现原论文中的结果需要和原论文设置保持基本一致才可以,比如 embedding_size 需要和原论文保持一致,直接使用默认的参数配置往往不能得到较好的结果。对于 MHCN 和 SEPT 等通过自监督学习的方式提升结果的模型,自监督学习的超参数 ssl_reg 对论文结果的影响较大,也需要经过较为精细的调参。

关于论文的配置可以参考原作者提供的代码:QRec。由于原文是基于 tensorflow 实现的 MHCN 模型,所以使用基于 PyTorch 的 RecBole-GNN 时需要对涉及到的超参数进行细致的搜索,才能基本复现原文的结果。

谢谢澜玲的回复。这位同学你可以贴一下你的参数吗?跑不过LightGCN是不可能的。

@LDY911
Copy link
Author

LDY911 commented Mar 16, 2023

@LDY911 您好,要实现原论文中的结果需要和原论文设置保持基本一致才可以,比如 embedding_size 需要和原论文保持一致,直接使用默认的参数配置往往不能得到较好的结果。对于 MHCN 和 SEPT 等通过自监督学习的方式提升结果的模型,自监督学习的超参数 ssl_reg 对论文结果的影响较大,也需要经过较为精细的调参。
关于论文的配置可以参考原作者提供的代码:QRec。由于原文是基于 tensorflow 实现的 MHCN 模型,所以使用基于 PyTorch 的 RecBole-GNN 时需要对涉及到的超参数进行细致的搜索,才能基本复现原文的结果。

谢谢澜玲的回复。这位同学你可以贴一下你的参数吗?跑不过LightGCN是不可能的。

感谢您的回复,以下是我在RecBole使用SEPT在Douban-book上的参数设置,麻烦您帮我看一下哪里设置不合理
learner = adam
learning_rate = 0.001
train_neg_sample_args = {'distribution': 'uniform', 'sample_num': 1, 'alpha': 1.0, 'dynamic': False, 'candidate_num': 0}
eval_step = 1
stopping_step = 10
clip_grad_norm = None
weight_decay = 0.0
loss_decimal_place = 4

Evaluation Hyper Parameters:
eval_args = {'split': {'RS': [0.8, 0, 0.2]}, 'group_by': 'user', 'order': 'RO', 'mode': 'full'}
repeatable = False
metrics = ['Recall', 'NDCG', 'Precision']
topk = [10]
valid_metric = mrr@10
valid_metric_bigger = True
eval_batch_size = 4096
metric_decimal_place = 4

Dataset Hyper Parameters:
field_separator =
seq_separator =
USER_ID_FIELD = user_id
ITEM_ID_FIELD = item_id
RATING_FIELD = rating
TIME_FIELD = timestamp
seq_len = None
LABEL_FIELD = label
threshold = None
NEG_PREFIX = neg_
load_col = {'inter': ['user_id', 'item_id'], 'net': ['source_id', 'target_id']}
unload_col = None
unused_col = None
additional_feat_suffix = None
rm_dup_inter = None
val_interval = None
filter_inter_by_user_or_item = True
user_inter_num_interval = [0,inf)
item_inter_num_interval = [0,inf)
alias_of_user_id = None
alias_of_item_id = None
alias_of_entity_id = None
alias_of_relation_id = None
preload_weight = None
normalize_field = None
normalize_all = None
ITEM_LIST_LENGTH_FIELD = item_length
LIST_SUFFIX = _list
MAX_ITEM_LIST_LENGTH = 50
POSITION_FIELD = position_id
HEAD_ENTITY_ID_FIELD = head_id
TAIL_ENTITY_ID_FIELD = tail_id
RELATION_ID_FIELD = relation_id
ENTITY_ID_FIELD = entity_id
benchmark_filename = None

Other Hyper Parameters:
worker = 0
wandb_project = recbole
shuffle = True
require_pow = False
enable_amp = False
enable_scaler = False
transform = None
numerical_features = []
discretization = None
kg_reverse_r = False
entity_kg_num_interval = [0,inf)
relation_kg_num_interval = [0,inf)
MODEL_TYPE = ModelType.SOCIAL
warm_up_epochs = 5
embedding_size = 50
n_layers = 2
drop_ratio = 0.3
instance_cnt = 10
reg_weight = 1e-05
ssl_weight = 0.01
ssl_tau = 0.1
NET_SOURCE_ID_FIELD = source_id
NET_TARGET_ID_FIELD = target_id
filter_net_by_inter = True
undirected_net = False
neg_sampling = {'uniform': 50}
MODEL_INPUT_TYPE = InputType.PAIRWISE
eval_type = EvaluatorType.RANKING
single_spec = True
local_rank = 0
device = cuda
eval_neg_sample_args = {'distribution': 'uniform', 'sample_num': 'none'}

数据集划分是RecBole自动划分的,按照训练集测试集8:2划分的,麻烦您了,谢谢指导

@Coder-Yu
Copy link

Coder-Yu commented Mar 16, 2023

我的论文实验部分4.1以及4.5都告诉了最佳参数,你这个设置里面有一些是不一致的比如ssl_weight是0.02而不是0.01。另外建议你用QRec跑,RecBole的实现可能会有一些细微差别。你可以看下这个issue关于douban-book数据集的问题Coder-Yu/QRec#242

@LDY911
Copy link
Author

LDY911 commented Mar 16, 2023

我的论文实验部分4.1以及4.5都告诉了最佳参数,你这个设置里面有一些是不一致的比如ssl_weight是0.02而不是0.01。另外建议你用QRec跑,RecBole的实现可能会有一些细微差别。你可以看下这个issue关于douban-book数据集的问题Coder-Yu/QRec#242
我通过调参基本复现了结果,感谢您的指导

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants