【论文笔记】GRU4Rec基于session的推荐系统

GRU4Rec

  • 论文: session-based recommendations with recurrent neural networks
  • 真实世界推荐系统通常面临的数据是 短的 基于session的数据, 而不是很长的用户历史记录

2.1 相关工作

这篇论文是针对一种特定情况的推荐系统,关于用户的信息比较少,或者没有

  • 通常会推荐相似的素材。
  • 或者在同一个session当中共现的最多的物品,类似于apriori算法,但是这个方法会丢失用户以前的点击信息,但是非常高效
  • 另一种方法是马尔科夫决策过程(MDPs),问题是当你试图去包含所有的用户可选择的情况时,状态空间将会变得非常巨大,难以管理

提出了一个ranking loss function用来训练

3.1.1 session-parallel mini-batches

由于跟NLP有些区别所以

  1. session的长度非常的不同,有的只包含两个,有的可能有上百个
  2. 我们的目标是捕获一个session的变化,所以把一个session拆开就变得没有什么意义了,所以使用基于session的batch,换一个新的session的时候会把隐藏层的状态重置

3.1.2 sampling on the output

因为是一个分类问题,样本太多需要负采样,这里的负采样实现的过程比较有意思
当前训练样本的负采样样本,来自于另外一个训练样本!!
直观上理解:因为已经出现在训练样本当中了,说明这个负样本出现的概率本身就比较大!!这是一种比较流行的实现方案。
可以跟Word2vec对比,使用的是一个巨大的分布表去做的,有负样本的生成概率

3.1.3 Ranking loss

使用了两种损失函数,但是本质上没有太大的区别
L s = − 1 N s ∑ j = 1 N s l o g ( σ ( r ^ s , i − r ^ s , j ) ) L_s = - \frac{1}{N_s} \sum_{j=1}^{N_s} log(\sigma(\hat r_{s,i} - \hat r_{s,j})) Ls=Ns1j=1Nslog(σ(r^s,ir^s,j))

L s = − 1 N s ∑ j = 1 N s I { r ^ s , i > r ^ s , j } , 改 进 为 L s = − 1 N s ∑ j = 1 N s σ ( r ^ s , i − r ^ s , j ) + σ ( r ^ s , j 2 ) L_s = - \frac{1}{N_s} \sum_{j=1}^{N_s} I\{\hat r_{s,i} > \hat r_{s,j}\} , 改进为 L_s = - \frac{1}{N_s} \sum_{j=1}^{N_s} \sigma(\hat r_{s,i} - \hat r_{s,j}) + \sigma(\hat r^2_{s,j}) Ls=Ns1j=1NsI{r^s,i>r^s,j},Ls=Ns1j=1Nsσ(r^s,ir^s,j)+σ(r^s,j2)

其中 N s N_s Ns是样本大小, r ^ s , i \hat r_{s,i} r^s,i 正样本 i i i 的得分, r ^ s , j \hat r_{s,j} r^s,j 负样本的得分

4 实验

两个实验指标recall@20MRR@20
部分实验结论(所有实验结论参看论文):

  • 单层的GRU效果好,增加层反而不好,可能是因为session比较短的原因
  • 使用embeding效果更差,one hot输入效果更好
  • tanh激活函数效果更好
  • 传统RNN,LSTM效果都不如GRU

问题

  • 如何实现负采样
  • 负采样nce函数如何去理解?

demo

你可能感兴趣的:(算法与数据结构)