RUCAIBox / RecBole

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

能否提供序列推荐不进行数据增强的方法或者数据集 #1809

Open zyx1017 opened 1 year ago

Sherry-XLL commented 1 year ago

您好,如果您想不对序列数据进行增广,可以提供您自己的数据集,详情可以参考如下的数据:

# session-based recommendation benchmarks
diginetica-session: https://recbole.s3-accelerate.amazonaws.com/ProcessedDatasets/DIGINETICA/session/diginetica_session.zip
tmall-session: https://recbole.s3-accelerate.amazonaws.com/ProcessedDatasets/Tmall/session/tmall_session.zip
nowplaying-session: https://recbole.s3-accelerate.amazonaws.com/ProcessedDatasets/Nowplaying/session/nowplaying_session.zip

并根据 session_based_rec_example.py 进行推荐。

感谢您对 RecBole 的关注!

Sherry-XLL commented 1 year ago

您好 @zyx1017,如果您想不进行数据增强,可以在序列推荐时提供自己预先处理好的数据集。以经典的序列推荐模型 BERT4Rec 为例,我们可以预先创建划分好的训练、验证和测试集:

session_id:token    item_id_list:token_seq  item_id:token
2   2 3 4 5 6 7 8 9 10 1 11 1 12 13 14  15
3   16 17 18 19 20 21 22 23 24
4   25 26 27 28 29 30   31
5   32 33 31 31 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
6   55 56 57 58 59 60   61
7   61 62 61    59
8   63 64 65 66 67  68
9   63 64 65 66 67 68 68    69
10  63 64 65 66 67 68 68 69 70
11  63 64 65 66 67 68 68 69 70  71
session_id:token    item_id_list:token_seq  item_id:token
1   2 3 4 5 6 7 8 9 10 1 11 1 12 13 14 15   5915
2   16 17 18 19 20 21 22 23 24  50022
3   45 46 47 48 49 50 51 52 53 50023 50024 50025 50026 50027 50028 50029 50030 50031 50032 50033 50034 54 54 50035 50036    50037
4   61 62 61 59 60
5   63 64 65 66 67 68 68 69 70 71   50038
6   72 78 74 75 76 77 78 72 73
7   80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 50039
8   106 107 108 109 111 111 110
9   358 113 113 112
10  50040 50041 50042 50043 50044 50045 50046 114 50047 50048 50049 50050 50051 50052 50053 50054 114   18226

然后,我们需要设置参数 benchmark_filename,在 RecBole 文件夹下创建一个 yaml 文件 test_bert4rec.yaml 如下:

# dataset config
field_separator: "\t"
seq_separator: " "
USER_ID_FIELD: session_id
ITEM_ID_FIELD: item_id
RATING_FIELD: rating
TIME_FIELD: timestamp
NEG_PREFIX: neg_
ITEM_LIST_LENGTH_FIELD: item_length
LIST_SUFFIX: _list
MAX_ITEM_LIST_LENGTH: 50
POSITION_FIELD: position_id
load_col:
    inter: [session_id, item_id_list, item_id]

benchmark_filename: [train, valid, test]
alias_of_item_id: [item_id_list]

# training and evaluation
epochs: 500
train_batch_size: 4096
eval_batch_size: 40960000
valid_metric: NDCG@10
eval_args:
    split: {'LS': 'valid_and_test'}
    mode: full
    order: TO

# disable negative sampling
train_neg_sample_args: ~

然后,在命令行通过 python run_recbole.py --model=BERT4Rec --dataset=test_bert4rec --config_files=test-yaml/seq/test_bert4rec.yaml 运行模型即可。

image

通过定义自己的数据集,我们可以不进行数据增强来运行序列推荐模型。

感谢您对 RecBole 的关注!若有后续问题欢迎继续评论。

zyx1017 commented 1 year ago

@Sherry-XLL 你好!感谢你的回答!请问能否提供上述划分训练、验证和测试集的代码呢

Sherry-XLL commented 1 year ago

您好 @zyx1017,这个需要根据您的数据集情况而定,就是基础的 python 操作,整理成所需的格式即可,我们这里没有专门的代码。