Skip to content

sasrec games复现结果不一致 #8

Open

Description

@remember00000

test result: OrderedDict([('recall@1', 0.04), ('recall@5', 0.235), ('recall@10', 0.46), ('recall@20', 1.0), ('recall@50', 1.0), ('ndcg@1', 0.04), ('ndcg@5', 0.1323), ('ndcg@10', 0.2035), ('ndcg@20', 0.3383), ('ndcg@50', 0.3383)])
您好,以上是我按照给出的sasrec预训练模型和代码中的数据得到的结果,远低于论文结果,请问是怎么回事,是yaml文件中某个地方的设置问题吗,现在是在random数据集中进行的,请问是什么原因?
image

Activity

  1. hyp1231 commented on Nov 2, 2023

    @hyp1231
    Member

    您好,请问您运行时的脚本命令是?

  2. remember00000 commented on Nov 2, 2023

    @remember00000
    Author

    python evaluate.py -m SASRec -d Games -p pretrained_models/SASRec-Games.pth

  3. hyp1231 commented on Nov 2, 2023

    @hyp1231
    Member

    我直接 clone 项目重装环境后,按照下述脚本

    python evaluate.py -m SASRec -d Games -p pretrained_models/SASRec-Games.pth

    得到结果为

    02 Nov 00:55    INFO  test result: OrderedDict([('recall@1', 0.525), ('recall@5', 0.865), ('recall@10', 0.94), ('recall@20', 1.0), ('recall@50', 1.0), ('ndcg@1', 0.525), ('ndcg@5', 0.7071), ('ndcg@10', 0.7325), ('ndcg@20', 0.7474), ('ndcg@50', 0.7474)])
    02 Nov 00:55    INFO  0.525	0.865	0.94	1.0	1.0	0.525	0.7071	0.7325	0.7474	0.7474
    

    如果运行

    python evaluate.py -m SASRec -d Games

    即不加载预训练模型,几乎等于随机,则

    02 Nov 00:56    INFO  test result: OrderedDict([('recall@1', 0.045), ('recall@5', 0.255), ('recall@10', 0.505), ('recall@20', 1.0), ('recall@50', 1.0), ('ndcg@1', 0.045), ('ndcg@5', 0.1476), ('ndcg@10', 0.2265), ('ndcg@20', 0.3493), ('ndcg@50', 0.3493)])
    02 Nov 00:56    INFO  0.045	0.255	0.505	1.0	1.0	0.045	0.1476	0.2265	0.3493	0.3493

    所以可以看到您得到的结果和不加载模型的结果接近,推测似乎可能是加载模型部分可能代码框架出了什么问题?您如果运行去掉 -p pretrained_models/SASRec-Games.pth 的脚本得到的结果是什么样子的呢?

  4. remember00000 commented on Nov 2, 2023

    @remember00000
    Author

    感谢回复,我去掉-p随机结果也是这样,我的预训练模型文件是从您那边上传的google drive下载的;
    但我使用-p时命令行有显示02 Nov 08:09 INFO Loading from pretrained_models/SASRec-Games.pth

  5. hyp1231 commented on Nov 2, 2023

    @hyp1231
    Member

    要不对一下模型文件是否一致?在 Linux 服务器上测 md5:

    md5sum SASRec-Games.pth
    985efba355d24cc169cb07e2d1fa2ef5  SASRec-Games.pth

    在 macOS 上刚刚又下载了一份,测 md5:

    md5 SASRec-Games.pth
    MD5 (SASRec-Games.pth) = 985efba355d24cc169cb07e2d1fa2ef5
  6. remember00000 commented on Nov 2, 2023

    @remember00000
    Author

    ’985efba355d24cc169cb07e2d1fa2ef5 pretrained_models/SASRec-Games.pth‘
    是的,是一致的,另外我的games数据集是从amazon2018上这两个位置下载的
    image
    image

  7. remember00000 commented on Nov 2, 2023

    @remember00000
    Author

    感谢您的回复,很疑惑问题出在哪里

  8. hyp1231 commented on Nov 2, 2023

    @hyp1231
    Member

    您的 Games.random 是重新生成的吗?还是直接用项目自带的?

    以及您的 PyTorch 和 RecBole 库的版本是?

  9. remember00000 commented on Nov 2, 2023

    @remember00000
    Author

    使用重新生成和自带的都是近似随机的效果,所以请问您源文件这里是不是一致;
    另外我重新clone文件之后,不进行games处理操作会得到:
    ValueError: File dataset/Games/Games.train.inter not exist 所以怀疑是源文件是否一致;
    torch 1.13.0
    recbole 1.2.0

  10. hyp1231 commented on Nov 2, 2023

    @hyp1231
    Member

    我一方面建议把 recbole 降级到 1.1.1 试一下,因为我自己也还没测过 1.2.0 版本。

    另一方面因为不清楚您数据处理的细节,建议直接解压 llmrank/dataset/Games/Games.inter.zip 来获得 Games.train.inter 文件。

  11. remember00000 commented on Nov 2, 2023

    @remember00000
    Author

    OrderedDict([('recall@1', 0.525), ('recall@5', 0.865), ('recall@10', 0.94), ('recall@20', 1.0), ('recall@50', 1.0), ('ndcg@1', 0.525), ('ndcg@5', 0.7071), ('ndcg@10', 0.7325), ('ndcg@20', 0.7474), ('ndcg@50', 0.7474)
    直接解压确实获得这里,我对比了test文件的不同左边是我的,右边是您的:
    image

    请问源文件是对应的上面截图的两个吗?
    另外就是我在运行 ’python data_process_amazon.py --dataset Games‘时
    f1.write(str(user)+'\t'+' '.join([str(item) for item in train_list])+'\t'+str(train_target_item)+'\n')

    f1.write(str(user)+'\t'+' '.join([str(item) for item in train_list])+'\t'+str(train_target_item)+'\n')

    这里会报错所以删掉了这一行。

  12. hyp1231 commented on Nov 2, 2023

    @hyp1231
    Member

    是的,因为您的 test 文件对 item 的编码,和 Games.random 中对 item 的编码是不一致的,所以确实就相当于随机。

    这一行应该不太能删,会导致训练数据少一个 interaction,不过影响的不是这个结果。本 issue 讨论的问题还是因为 Games.test.inter 和 Games.random 编码不一致的问题

  13. remember00000 commented on Nov 2, 2023

    @remember00000
    Author

    但是我使用 python sample_candidates.py -s random -d Games重新生成 random文件后,得到的结果仍然是: OrderedDict([('recall@1', 0.04), ('recall@5', 0.235), ('recall@10', 0.46), ('recall@20', 1.0), ('recall@50', 1.0), ('ndcg@1', 0.04), ('ndcg@5', 0.1323), ('ndcg@10', 0.2035), ('ndcg@20', 0.3383), ('ndcg@50', 0.3383)])

  14. hyp1231 commented on Nov 2, 2023

    @hyp1231
    Member

    因为预训练模型的编码和您的 test.inter 是不一致的,肯定结果也是随机的

  15. remember00000 commented on Nov 2, 2023

    @remember00000
    Author

    使用自己训练的模型得到:('ndcg@1', 0.515), ('ndcg@5', 0.6933), ('ndcg@10', 0.7224), ('ndcg@20', 0.7383), ('ndcg@50', 0.7383)]);感谢您的回复!因为对于这个模型不熟悉产生的错误:( 另外想咨询您,如果想使用auc 的value一类的评价指标,对应的yaml文件应该是怎么样的呢,我想用这类指标来测试表现,但对于recbole我看了文档较长时间但不确定具体实现,想问您有这个对应的yaml实现或者哪里进行修改吗

  16. hyp1231 commented on Nov 2, 2023

    @hyp1231
    Member

    客气!很高兴看到能成功复现

    这个确实比较棘手,我可能会建议把评分打印出来手动计算。因为 AUC 一般是 CTR 任务用的比较多,更偏向分类任务,在
    RecBole 的组织中和 Ranking model 的指标计算不太适配。

  17. remember00000 commented on Nov 2, 2023

    @remember00000
    Author

    看到RecBole中有直接提供的auc指标,那个可以用吗

  18. hyp1231 commented on Nov 2, 2023

    @hyp1231
    Member

    在 RecBole 中 AUC 和 Ranking model 的指标计算不太适配,可能没办法直接用

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions