RUCAIBox / RecBole

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

[Question] 更新0.2.0版本后GRU4Rec模型在ml-1m数据集上效果好很多 #768

Closed xiaohanhan1019 closed 3 years ago

xiaohanhan1019 commented 3 years ago

换了0.2.0版本后,GRU4Rec模型在ml-1m数据集上效果好了很多,原本验证集Recall@20的结果大概在0.37左右,更新后Recall@20可以达到0.40。试了一下SASRec和其他的数据集,有类似的问题,实验结果比原来有提升。怀疑是数据集处理的问题?

配置文件 model: 'GRU4Rec' dataset: 'ml-1m' USER_ID_FIELD: 'user_id' ITEM_ID_FIELD: 'item_id' TIME_FIELD: 'timestamp' MAX_ITEM_LIST_LENGTH: 50 min_user_inter_num: 5 min_item_inter_num: 5 load_col: { inter: ['user_id', 'item_id', 'timestamp'] } eval_setting: 'TO_LS,full' group_by_user: True leave_one_num: 2 loss_type: 'CE'

gpu_id: 2 use_gpu: True train_batch_size: 512 training_neg_sample_num: 0 epochs: 50 learning_rate: 1e-3

embedding_size: 100 hidden_size: 100 n_layers: 1 dropout_prob: 0.3

metrics: ['Recall', 'MRR', 'NDCG'] topk: [5, 10, 20] valid_metric: 'Recall@20' eval_batch_size: 512

实验环境

xiaohanhan1019 commented 3 years ago

大概排查了一下,好像是对序列按时间戳排序的时候和之前的实现方式不太一样?

xiaohanhan1019 commented 3 years ago

0.2.0 排序结果 e3555b4e2bedfde179ed6f227a4cb2f 0.1.1 排序结果 0c814b8b6bfd9a7f64c0d94a10706ca 自己处理的排序结果

d4d9b8cbd88d24b494e2c49ecde90b7

时间戳相同的物品,排序结果不一致,比如图中的物品(23,28,38)

hyp1231 commented 3 years ago

您好!抱歉现在才回复。

我们对此问题进行了详细的评测,得到的结论和您一致。结果不同来自于两个版本的排序方式是不同的。0.1.2 版本是使用 pandas 排序,而 0.2.0 版本是使用 PyTorch 排序,因此相同时间戳的交互记录会有不同的排序结果,导致评测/训练时历史商品与目标商品在版本之间不一致。

我们评测时认真对比了两个版本的训练框架代码,以及 GRU4Rec 的模型代码,均无影响结果的改动。此外对于改动较多的 Evaluator,我们加载了相同的模型和相同的 test_data 进行测试,可以在各个指标上得到一致的结果。因此可以判断此问题与 trainer、model 和 evaluator 无关。

很抱歉对您造成了困扰,我们建议您在进行实验时保持 RecBole 的版本不变。

xiaohanhan1019 commented 3 years ago

好的,感谢!