RUCAIBox / RecBole-GNN

Efficient and extensible GNNs enhanced recommender library based on RecBole.
MIT License
167 stars 37 forks source link

[🐛BUG] DiffNet可否支持读取user和item的review embdding #54

Closed KingGugu closed 1 year ago

KingGugu commented 1 year ago

描述这个 bug 如题,原始代码中可以读取作者预训练的user_vector.npy和item_vector.npy,但在RecBole中,我似乎无法读取这两个文件,我尝试将参数中的pretrained_review改为true,但会报这个错: Traceback (most recent call last): File "run_recbole_gnn.py", line 15, in run_recbole_gnn(model=args.model, dataset=args.dataset, config_file_list=config_file_list) File "C:\Users\Administrator\Desktop\传输\social\RecBole-GNN-main\recbole_gnn\quick_start.py", line 37, in run_recbole_gnn model = get_model(config['model'])(config, train_data.dataset).to(config['device']) File "C:\Users\Administrator\Desktop\传输\social\RecBole-GNN-main\recbole_gnn\model\social_recommender\diffnet.py", line 68, in init self.user_reviewembedding.weight.data.copy(self.convertDistribution(dataset.user_feat['user_review_emb'])) TypeError: 'NoneType' object is not subscriptable

代码中没有读取npy文件的部分。我尝试在RecBole的代码里直接修改,但会提示维度不匹配。原始的: num_users = 17237 num_items = 38342 social dataset中提供的inter文件: num_users = 17236 num_items = 37379 请问是否可以帮助解决这个问题,非常感谢!

hyp1231 commented 1 year ago

您好!抱歉回复晚了,我依次回复一下上述问题。

Q1: RecBole-GNN 中的 DiffNet 是否支持加载 review embedding?应该如何设置? A1: 支持的。首先需要将 pretrained_review 设置为 True。接下来,假设您的数据集叫 data1,还需要进一步添加两个输入文件,用户侧特征 data1.user 和商品侧特征 data1.item。文件的格式如下(以 data1.user 为例):

user_id:token   user_review_emb:float_seq
xxx 1.00 2.00 3.00

因此如果您有 .npy 文件的话,可能还需要您手动转换一下。但通过这种形式,这些预训练特征会自动链接、对齐在交互数据上。

Q2: 为什么用户/商品数量不匹配? A2: 一方面是因为用户和商品都会默认有一个 padding 位,另一方面可能由于配置文件中设置了数据筛选,交互数量不足的商品可能被删掉了。但是如果您通过 .user 和 .item 的形式加载预训练特征,则无需考虑数量是否匹配的问题,RecBole 库会自动处理。

KingGugu commented 1 year ago

好的,感谢回复,没有其它问题了。