RUCAIBox / RecBole

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

如何在训练是给模型输入一些自定义的其他变量 #1727

Closed JaamieZheng closed 1 year ago

JaamieZheng commented 1 year ago

你好,最近在使用贵课题组的CORE为baseline跑一些改进的思路,CORE是基于recbole的,然后我看recbole对于序列推荐的输入只能是session_id、item_id、item_list和timestamp这几种,那我想加一些自定义的其他输入的话(比如类似于TISASRec中的时间差变量)应该如何加呢,我尝试更改了yaml文件里的输入column,但是好像没反应,后面在dataset引用我的自定义变量会报错。

但是我直接作为timestamp输入确实能够在模型的forward见到,但是好像经过预处理后变得不太对头(我应该获得一个[batchsize,ListNum]的二维列表,但他就分出来一个batch长度的一维列表),可能是它的处理方式只针对于时间戳?

所以想问一下recbole有相关支持输入自定义变量的功能或用法嘛?

zhengbw0324 commented 1 year ago

@FollowingWind117 您好! 如果您自定义的变量是类似时间戳的非序列类型变量,可以直接通过配置文件中的load_col实现。如果您的需求是将自定义的变量类似item_id一样根据时间顺序组织成一个list,则需要修改datasets源码或提前预处理数据并以token_seqfloat_seq类型读入。

JaamieZheng commented 1 year ago

@FollowingWind117 您好! 如果您自定义的变量是类似时间戳的非序列类型变量,可以直接通过配置文件中的load_col实现。如果您的需求是将自定义的变量类似item_id一样根据时间顺序组织成一个list,则需要修改datasets源码或提前预处理数据并以token_seqfloat_seq类型读入。

感谢您的回复!对于您提到的后者方案“以token_seq类型读入”有没有什么可参考的代码写法吗,我已经通过预处理处理好了一个time_interval(时间差),类似于TiSASRec,一个seq中每个item对应一个时间差,然后一条数据就会有一个时间差的列表。

zhengbw0324 commented 1 year ago

@zhengbw0324 您可以参考我们的文档

JaamieZheng commented 1 year ago

@zhengbw0324 您可以参考我们的文档

非常感谢,尝试了相关操作,确实成功了

JaamieZheng commented 1 year ago

@zhengbw0324 您可以参考我们的文档

顺带一提,如果推断不错您应该是某软比我高一届的学长吧,再次感谢bw学长(手动狗头)

zyx1017 commented 1 year ago

@FollowingWind117 你好,我目前遇到一样的问题。能问一下你是怎么解决的吗

JaamieZheng commented 1 year ago

@FollowingWind117 你好,我目前遇到一样的问题。能问一下你是怎么解决的吗 你好,我是在预处理的时候把需要的自定义变量提前处理出来,然后存到对应的inter文件里(另存一列),然后配置文件里面定义要读的数据(包括之前的自定义变量),把它读进去,虽然跑成功了,但后面感觉不是很方便,还是避开recbole自己复现了