1: BPR推荐______ ‘ndcg@10’: 0.0095, ‘hit@10’: 0.0753
3: GRU4RecF推荐. _ndcg@10 : 0.0417 hit@10 : 0.087
4:LightGCN推荐 ____ndcg@10 : 0.1337 hit@10 : 0.5652
5: BERT4Rec推荐 ___ndcg@10 : 0.0161 hit@10 : 0.0392
6:KGAT推荐 ________ndcg@10 : 0.0398 hit@10 : 0.2439
7:RippleNet推荐 _____ndcg@10 : 0.1109 hit@10 : 0.4867
2: XDeepFM推荐. _ ‘auc’: 0.5953, ‘logloss’: 0.6748
1: BPR推荐
在评价模块输入用户ID为用户推荐出来合适的商品
def full_sort_predict(self, interaction):
user = interaction[self.USER_ID] #[1, 2]
user_e = self.get_user_embedding(user)
all_item_e = self.item_embedding.weight #[1683, 64]
score = torch.matmul(user_e, all_item_e.transpose(0, 1)) #[2, 1683]
return score.view(-1)
求出来两个用户对分别对1683个商品的评分。
之后获取用户评分最高的的top10商品。top10的商品为推荐系统为用户推荐的商品,之后我们根据用户id获取evl数据中用户所对应的商品。我们根据这两者商品进行下面推荐指标的计算。
{‘recall@10’: 0.0083, ‘mrr@10’: 0.0214, ‘ndcg@10’: 0.0095, ‘hit@10’: 0.0753, ‘precision@10’: 0.0083}
2: XDeepFM推荐
对于评价模块输入是每个[batch_size, num_field, embed_dim]。因为采用的是0-1lable方式,我们对于每一条记录我们都可以将其传入特征提取模块,计算出来评分,然后根据每一条评分和lable的值,计算auc,以及logloss。
def forward(self, interaction):
# Get the output of CIN.
xdeepfm_input = self.concat_embed_input_fields(interaction) # [batch_size, num_field, embed_dim]
cin_output = self.compressed_interaction_network(xdeepfm_input)
cin_output = self.cin_linear(cin_output)
# Get the output of MLP layer.
batch_size = xdeepfm_input.shape[0]
dnn_output = self.mlp_layers(xdeepfm_input.view(batch_size, -1))
# Get predicted score.
y_p = self.first_order_linear(interaction) + cin_output + dnn_output
y = self.sigmoid(y_p)
return y.squeeze(1