数据来源:论文中用的是Amazon Product Data数据,包含两个文件:reviews_Electronics_5.json, meta_Electronics.json.
文件格式链接中有说明,其中reviews主要是用户买了相关商品产生的上下文信息,包括商品id, 时间,评论等。meta文件是关于商品本身的信息,包括商品id, 名称,类别,买了还买等信息。
1、亚马逊数据格式
亚马逊数据集包含产品评论和产品原始数据,用作基准数据集。 我们对名为Electronics的子集进行实验,其中包含192,403个用户,63,001个商品,801个类别和1,689,188个样本。 此数据集中的用户行为很丰富,每个用户和商品都有超过5条评论。 特征包括goods_id,cate_id,用户评论goods_id_list和cate_id_list。用户的所有行为都是(b1,b2,...,bk,... ,bn),任务是通过利用前k个评论商品来预测第(k + 1)个评论的商品。 训练数据集是用每个用户的k = 1,2,...,n-2生成的。 在测试集中,我们预测最后一个给出第一个n - 1评论商品。
## 2、代码解读
数据格式转换:
1_convert_pd.py文件的作用:json格式转化为pandas的dataframe格式,并保存为pickle二进制文件格式。解释一下为什么要保存pickle文件格式,因为pickle文件是二进制形式,读取速度快。
2_remap_id.py文件的作用:将asin,categories,reviewerID三个字段进行位置编码。位置编码主要通过build_map。
特别解读一下build_map函数的作用,就是将id排序,并转换成对应的位置索引,举个例子[d,a,c,b] → [4,1,3,2]。
meta_df格式
asin categories
d dd
a aa
c cc
b cc
####################
asin_map, asin_key = build_map(meta_df, 'asin')
cate_map, cate_key = build_map(meta_df, 'categories')
####################
meta_df格式
asin categories
4 3
1 1
3 2
2 2
####################
asin_map = [a, b, c, d]
meta_df = meta_df.sort_values('asin')
meta_df = meta_df.reset_index(drop=True) #meta_df的长度也是63001
cate_list = [meta_df['categories'][i] for i in range(len(asin_map))]
cate_list = np.array(cate_list, dtype=np.int32) #cate_list长度 63001,和item_count一样长
cate_list = [3, 1, 2, 2]
build_dataset.py生成训练集和测试集:
根据用户看过的产品数组生成训练集和测试集
根据上述的一条记录可以生成2条正样本和2条负样本的训练集,1条测试集