RUCAIBox / RecBole

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

我想知道如何使用评分预测类指标 #892

Closed scaactk closed 3 years ago

scaactk commented 3 years ago

我在尝试运行CDAE等方法时,因为看见底层代码实际是包含预测评分的部分的,所以尝试将指标改成RMSE之类的方法后,报错,NotImplementedError: full sort can't use IndividualEvaluator,然后将排序改为RO_RS之后仍然报错。 我想知道,如何查看这些方法在评分预测目标下的运行结果

linzihan-backforward commented 3 years ago

Hi @scaactk 您好,在RecBole中RMSE类评分预测指标需要数据集中包含label列,且配置文件中应指定LABEL参数,您可以检查使用的数据集是否存在此项,如依旧报错,可以在此提供您的yaml配置文件,方便我们定位问题,谢谢。

scaactk commented 3 years ago

谢谢你的解答,我还是没太懂,以movielens数据集为例,.inter包含uid,iid,rtings, time(时间戳暂时没有使用),这里需要指定的label该是什么呢,是不是其他的方法进行评分预测也是一致的呢? 我又进行了很多尝试,但是仍然有问题,下面是我的yaml配置

# model config
loss_type: BCE
hid_activation: relu
out_activation: sigmoid
corruption_ratio: 0.5
embedding_size: 64
reg_weight_1: 0.
reg_weight_2: 0.01

# dataset config
field_sparator: "\t"
seq_separator: " "
USER_ID_FIELD: user_id
ITEM_ID_FIELD: item_id
RATING_FIELD: rating
# LABEL_FIELD: rating
# TIME_FIELD: timestamp
# NEG_PREFIX: neg_ # 负采样前缀

# 指定从什么文件里读什么列
load_col:
  inter: [user_id, item_id, rating]

# training settings
epochs: 500
train_batch_size: 512
learner: adam
learning_rate: 0.001
training_neg_sample_num: 0
#training_neg_sample_distribution: uniform

eval_step: 1  # 每次训练后评估的次数
stopping_step: 10 # 控制收敛步数,这个数字内没什么变化,就结束

# evaluation setting
eval_setting: RO_RS # 对数据随机重排, 设置按比例划分数据集,且使用全排序
group_by_user: True  # 是否将一个用户的记录划分到一个组里,使用RO_RS的时候,必须是True
split_ratio: [0.8, 0.1, 0.1]
#metrics: ["Recall", "MRR", "NDCG", "Hit", "Precision"]
metrics: ["RMSE", "MAE"]
#topk: [10] # 评测标准使用topk,设置成10评测标准就是["Recall@10", "MRR@10", "NDCG@10", "Hit@10", "Precision@10"]
#valid_metric: MRR@10 # 选取哪个评测标准作为作为提前停止训练的标准
eval_batch_size: 32 # 评测的batch_size

valid_metric: "RMSE, MAE" # 是不是验证集的指标只能指定一个?
2017pxy commented 3 years ago

@scaactk 你好,伯乐支持两种label设置方式,一种是数据本身自带label,这种需要你标明提供数据文件中label所在列,从LABEL_FIELD设置;另一种是通过设置threshold,基于某一列的值来自动进行label标注;movielen数据集是不带label的,但你可以通过第二种方法,对rating列进行threshold设置来划分标签。

一个示例写法如下:

threshold:
    rating: 4

如果想了解更多,可以阅读我们的context-aware模型使用的博客文档.

guijiql commented 3 years ago

@scaactk 除了设置threshold以外,目前全排序的情况下暂时无法计算RMSE,MAE,LogLoss等指标,如果想在负采样情况下计算这些指标,请在配置文件中增加: eval_setting: RO_RS, uni100 另外,valid_metric参数用来筛选 训练过程中在验证集的该指标上表现最好的一组模型参数来进行测试,因此只能设置一个。