RUCAIBox / RecBole

A unified, comprehensive and efficient recommendation library
https://recbole.io/
MIT License
3.27k stars 590 forks source link

[🐛BUG] LightGCN在ml-100k数据集上性能不佳 #2031

Open zzzZHANGYIXUAN opened 3 months ago

zzzZHANGYIXUAN commented 3 months ago

我使用如下的yaml文件:

tmodel settings

embedding_size: 64 # (int) The embedding size of users and items. n_layers: 2 # (int) The number of layers in LightGCN. reg_weight: 1e-05 # (float) The L2 regularization weight.

training settings

stopping_step: 10 #控制训练收敛的步骤数,在该步骤数内若选取的评测标准没有什么变化,就可以提前停止了

evalution settings

split_ratio: [0.8,0.1,0.1] #切分比例 metrics: ["Recall", "MRR","NDCG","Hit","Precision","MAP", "GAUC","ItemCoverage","AveragePopularity","GiniIndex","ShannonEntropy","TailPercentage"] #评测标准 topk: [10] #评测标准使用topk,设置成10评测标准就是["Recall@10", "MRR@10", "NDCG@10", "Hit@10", "Precision@10"] valid_metric: Precision@10 #选取哪个评测标准作为作为提前停止训练的标准 eval_batch_size: 4096 #评测的batch_size

运行得出的结果 Precision@10:0.1716

这项指标远低于预期 请问是我参数文件使用错误?还是伯乐使用的数据集或者指标公式不同?

NEUYuYang commented 2 months ago

请你的lightgcn训练样本数和验证样本数正常吗,我跑lightgcn的时候,训练集的数量远小于验证机和测试集的数量

zzzZHANGYIXUAN commented 2 months ago

请你的lightgcn训练样本数和验证样本数正常吗,我跑lightgcn的时候,训练集的数量远小于验证机和测试集的数量

你是否设置了相关参数来划分训练集、验证集和测试集? ’

NEUYuYang commented 2 months ago

model config

embedding_size: 32

dataset config

field_separator: "\t" #指定数据集field的分隔符 seq_separator: " " #指定数据集中token_seq或者float_seq域里的分隔符 USER_ID_FIELD: user_id #指定用户id域 ITEM_ID_FIELD: item_id #指定物品id域 RATING_FIELD: rating #指定打分rating域 TIME_FIELD: timestamp #指定时间域 NEGPREFIX: neg #指定负采样前缀

指定从什么文件里读什么列,这里就是从ml-1m.inter里面读取user_id, item_id, rating, timestamp这四列

load_col: inter: [user_id, item_id, rating, timestamp]

training settings

epochs: 500 #训练的最大轮数 train_batch_size: 4096 #训练的batch_size learner: adam #使用的pytorch内置优化器 learning_rate: 0.001 #学习率 training_neg_sample_num: 1 #负采样数目 eval_step: 1 #每次训练后做evalaution的次数 stopping_step: 10 #控制训练收敛的步骤数,在该步骤数内若选取的评测标准没有什么变化,就可以提前停止了 eval_args: split: {'RS':[0.8, 0.1, 0.1]} #对数据随机重排,设置按比例划分数据集 group_by: ~ #是否将一个user的记录划到一个组里 mode: full order: RO metrics: ["Recall","NDCG"] #评测标准 topk: [10] #评测标准使用topk,设置成10评测标准就是["Recall@10", "MRR@10", "NDCG@10", "Hit@10", "Precision@10"] valid_metric: Recall@10 #选取哪个评测标准作为作为提前停止训练的标准 eval_batch_size: 4096 #评测的batch_size

val_interval: rating: "[3,inf)"
unused_col: inter: [rating] user_inter_num_interval: "[10,inf)" item_inter_num_interval: "[10,inf)"

这是我的参数,请大佬指教一下

NEUYuYang commented 2 months ago

1712577188634 这是我的图片,训练集只有201,验证集有6033

NEUYuYang commented 2 months ago

您是这样的吗

LouHerGetUp commented 1 month ago

可以把 stopping_step 增大,或者关掉试试