qinjr/UBR4CTR

模型参数咨询

Closed this issue · 8 comments

尊敬的作者您好:
请问train.py文件中淘宝数据集FEAT_SIZE_TAOBAO = 5062314, dataset_size = 1962046这两个参数为何分别设置为这两个值呢?git中给出的数据集长度是5000,dataset_size不应该是5000么?
preprocess_taobao.py文件中ORI_FEAT_SIZE = 5062312 时间戳为何是5062312?
START_TIME = 1511539200,为何设定为 2017-11-25 00:00:00,我看淘宝数据集中最开始的时间为1511544070.
isweekday函数为何设定date是在[0,1,8]三个值呢?
b_num是表示提取的用户特征个数?
期待您的答复.

qinjr commented

1)设置的是原始数据集的参数,dataset size是指数据量
2)ORI_FEAT_SIZE是指unique feature的数量,不是时间戳
3)数据集描述里写的是11-25开始的,所以就取了0点作为起点时间
4)0,1,8是数据集的第几天,因为现实中这几天就是weekend,因为数据集里面本身没有context feature,所以使用时间来生成一些context feature,比如这条记录是不是发生在周末
5)b_num means behavior number,指的是使用的用户行为个数
谢谢

问题1、1) dataset size指原始数据集数据量,是用户每个行为为一条记录的原始数据集对应的总条数么?
问题2、2) 淘宝数据集的特征个数是4个,userid itemid cateid ts,只用这一份数据集的话是不是只要ORI_FEAT_SIZE的值设定大于4就可以了?
问题3、4) 代码中START_TIME为2017-11-25 00:00:00,该天为周六,ts与START_TIME的差为0 1 7 8的时候均表示周末,所以在定义的时候应该变更为date in [0,1,7,8]吧? 确定为周末,返回的是ORI_FEAT_SIZE的值作为context feature.
date = (int(ts) - START_TIME) // SECONDS_PER_DAY
if date < 0:
continue
date = isweekday(date)
其中
def isweekday(date):
if date in [0, 1, 8]:
return str(ORI_FEAT_SIZE)
else:
return str(ORI_FEAT_SIZE + 1)

谢谢.

qinjr commented
  1. 是的
  2. feature size指的不是特征域的数量,而是指unique特征值的数量,每个特征对应一个embedding,这个数字用来确定embedding matrix的size
  3. 这个可能是我疏忽了当时,谢谢提醒
  1. 整体分成两部分,特征选择模块和用户行为提取模块,其中,特征选择模型是rec.py文件中对应的recSum,对应训练部分是train_rec_model; 用户行为文件是ubr.py,对应训练部分是train_ubr_model么?
  2. train.py文件中train_rec_model函数下有一句: index_batch = ubr_model.get_index(sess, target_batch) 请问get_index函数主要是做什么?
qinjr commented

1.是recAtt
2.选取的feature的index,即选第几个feature

2中,我设置batch_size为10时, target_batch:
[[40, 430, '3850', 5062312], [40, 651, '3714', 5062312], [4, 688, '3925', 5062313],
[4, 782, '4152', 5062313], [25, 176, '3928', 5062312], [25, 3178, '3621', 5062312],
[18, 697, '3976', 5062312], [18, 1852, '3875', 5062312], [35, 1483, '3793', 5062312],
[35, 510, '4176', 5062312]],
经过index_batch = ubr_model.get_index(sess, target_batch) 语句后,index_batch变为[[0. 0. 1.]
[1. 0. 1.]
[1. 1. 0.]
[1. 1. 1.]
[0. 0. 1.]
[1. 1. 0.]
[1. 1. 1.]
[0. 0. 1.]
[0. 0. 0.]
[1. 0. 1.]],对于batch_size中第一行,[40, 430, '3850', 5062312]是选择的5062312这个特征,是这样理解么?

qinjr commented

index是指这三个feature每个是否要选
[40, 430, 3850, 5062312]是一个sample的feature,最后一个时间戳没有用到,前面的三个特征的feature id分别为40, 430, 3850,[1,0,1]是指第一和第三个特征被选择,第二个没有被选择

论文中提到:We split the datasets using the time step. The training dataset contains the 1st to (T − 2)th user behaviors, in which the 1st to (T − 3)th behaviors are used to predict the behavior at (T − 2)th step. Similarly, the validation set uses 1st to (T − 2)th behaviors to predict (T − 1)th behavior and the test set uses 1st to (T − 1)th behaviors to predict T th behavior.,我有一个问题是:在代码train.py中有一句:pred, label, loss = rec_model.eval(sess, [seq_batch, seq_len_batch, target_batch, label_batch], reg_lambda),请问
1、pred表示的用户可能点击t时刻对应品的概率么?还是说是t-1时刻的品被点击的概率呢?

2、如果我有一份新的数据集,想要根据1~t的点击品,来预测t+1时刻可能会点击的品,且我没有每个用户在未来t+1时的商品id,这个应该怎么理解呢?