RecBole
RecBole copied to clipboard
'SequentialDataset' 类中存在属性 'item_id_list_field'未被赋值就进行调用
描述这个 bug 我用自己的数据生成了Context类模型所需的.inter(包含item_id, user_id, rating字段) .user(包含user_id, feature_1, feature_2... 字段) .item(包含item_id, feature_1, feature_2... 字段)文件,使用DIN模型,产生如下bug AttributeError: 'SequentialDataset' object has no attribute 'item_id_list_field' 本人自行阅读代码之后发现SequentialDataset类确实未对item_id_list_field属性进行赋值(包括继承父类也不存在该字段),该错误字段存在于 https://github.com/RUCAIBox/RecBole/blob/master/recbole/data/dataset/sequential_dataset.py#L144 错误报告的截图如下,请问我是在哪里出了问题?应如何修正?
屏幕截图
实验环境(请补全下列信息):
- 操作系统: = ubuntu18
- RecBole 版本 [未安装,直接github上下载最新版源码使用]
- Python 版本 [3.6.0]
- PyTorch 版本 [1.7.0]
- cudatoolkit 版本 [11.0]
@MrBlankness 您好,非常感谢您的关注!
在使用序列数据集的benchmark_file功能时,你需要显式地在数据集文件中提供序列数据的字段,即数据文件中必须含有item_id_list
。你可以参考#issue1069了解更多处理细节。
@chenyuwuxin 感谢您上次的回复,但是我仍然有一些疑惑,希望您能为解答。 我需要为我自己定义的数据集进行train valid test的划分,所以在上次的错误中使用了benchmark_file来划分数据集。但是根据您上次给我的回复我需要在inter文件中加入item_id_list信息。 关于这一点,我详细参考了https://github.com/RUCAIBox/RecBole/issues/1303在该issue中的内容,但是依然存在一些不解。
我与该issue的提问者的不同点在于(1)我可能不存在过去的访问列表,因为我个人的数据交互十分稀疏,可能某1个用户也就与1个物品存在交互信息,所以无法对item_id_list进行有效赋值。(2)在所引用的issue的提问者的内容中,我了解到他的目的是根据用户以往的交互行为,为其推荐下一个物品,我的研究并不是如此,我想做的是给一个新用户推荐物品。
我现在的数据格式为 inter包括user_id, item_id, rating, timestamp user包括user_id, user_features item包括item_id, item_features
请问我应该生成何种格式的数据可以自己划分数据集,又如何更改代码来满足我的需求? 期望并感谢您的回复!
@MrBlankness 您好,如果您的研究并不是“根据用户以往的交互行为,为其推荐下一个物品”,建议使用General类型的模型(例如LightGCN,SGL等)。在此类模型的配置下,您不需要再指定item_id_list,继续按benchmark_file来划分数据集即可。