Open remember00000 opened 10 months ago
您好,请问您运行时的脚本命令是?
python evaluate.py -m SASRec -d Games -p pretrained_models/SASRec-Games.pth
我直接 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
的脚本得到的结果是什么样子的呢?
感谢回复,我去掉-p随机结果也是这样,我的预训练模型文件是从您那边上传的google drive下载的; 但我使用-p时命令行有显示02 Nov 08:09 INFO Loading from pretrained_models/SASRec-Games.pth
要不对一下模型文件是否一致?在 Linux 服务器上测 md5:
md5sum SASRec-Games.pth
985efba355d24cc169cb07e2d1fa2ef5 SASRec-Games.pth
在 macOS 上刚刚又下载了一份,测 md5:
md5 SASRec-Games.pth
MD5 (SASRec-Games.pth) = 985efba355d24cc169cb07e2d1fa2ef5
’985efba355d24cc169cb07e2d1fa2ef5 pretrained_models/SASRec-Games.pth‘ 是的,是一致的,另外我的games数据集是从amazon2018上这两个位置下载的
感谢您的回复,很疑惑问题出在哪里
您的 Games.random
是重新生成的吗?还是直接用项目自带的?
以及您的 PyTorch 和 RecBole 库的版本是?
使用重新生成和自带的都是近似随机的效果,所以请问您源文件这里是不是一致; 另外我重新clone文件之后,不进行games处理操作会得到: ValueError: File dataset/Games/Games.train.inter not exist 所以怀疑是源文件是否一致; torch 1.13.0 recbole 1.2.0
我一方面建议把 recbole 降级到 1.1.1 试一下,因为我自己也还没测过 1.2.0 版本。
另一方面因为不清楚您数据处理的细节,建议直接解压 llmrank/dataset/Games/Games.inter.zip
来获得 Games.train.inter
文件。
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文件的不同左边是我的,右边是您的:
请问源文件是对应的上面截图的两个吗? 另外就是我在运行 ’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') https://github.com/RUCAIBox/LLMRank/blob/fc3c5cdd97521406cf36d124635857f4d247a4fa/llmrank/data_process_amazon.py#L230 这里会报错所以删掉了这一行。
是的,因为您的 test 文件对 item 的编码,和 Games.random
中对 item 的编码是不一致的,所以确实就相当于随机。
这一行应该不太能删,会导致训练数据少一个 interaction,不过影响的不是这个结果。本 issue 讨论的问题还是因为 Games.test.inter
和 Games.random
编码不一致的问题
但是我使用 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)])
因为预训练模型的编码和您的 test.inter 是不一致的,肯定结果也是随机的
使用自己训练的模型得到:('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实现或者哪里进行修改吗
客气!很高兴看到能成功复现
这个确实比较棘手,我可能会建议把评分打印出来手动计算。因为 AUC 一般是 CTR 任务用的比较多,更偏向分类任务,在 RecBole 的组织中和 Ranking model 的指标计算不太适配。
看到RecBole中有直接提供的auc指标,那个可以用吗
在 RecBole 中 AUC 和 Ranking model 的指标计算不太适配,可能没办法直接用
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数据集中进行的,请问是什么原因?