A Dynamic Recurrent Model for Next Basket Recommendation
概
利用 RNN 进行 Next-Basket 推荐. 方法简单, 对我这种不懂序列推荐的人来说读起来很友好, very nice.
符号说明
- \(B_{t_i}^u\), 用户 \(u\) 在时刻 \(t_i\) 的购物篮;
Markov chain model 的缺点
以往的方法常常用马尔可夫模型预测 next-basket:
\[p(i \in B_{t_i}^u|B_{t_{i-1}}^u) = \frac{1}{|B_{t_{i-1}}^u|} \sum_{j \in B_{t_{i-1}}^u} p(i \in B_{t_i}^u| j \in B_{t_{i-1}}^u),
\]
即我们预测 \(t_i\) 时刻的购物篮中应该有的商品当且仅当和上一个时刻的购物篮有关. 这显然是一个过于的假设了, 因为完全有可能此刻购物篮中的东西和上上个购物篮中的东西有关, 或者完全无关 (对于那些不活跃的用户来说). 所以, 一个合理的序列推荐模型应该是能够抓住主要历史信息的, 而非仅仅前一个.
Dynamic REcurrent bAsket Model (DREAM)
作者的提出的模型的思想很简单:
-
首先每个 item \(i\) 有一个特征表示 \(\bm{n}_i\), 共同构成了一个大的特征表示矩阵 \(\bm{N}\);
-
为了获得 User 关于当前 basket 的兴趣表征 \(\bm{h}\):
- 将 basket 中的 items 的特征表示进行池化操作:\[\bm{b}_{t_i}^u := \text{Pooling}(\{\bm{n}_1, \bm{n}_2, \cdots, \bm{n}_{|B_{t_i}^u|}\}); \]
- 由此得到了历史中各 basket 的特征表示 \(\bm{b}_{t_i}^u, i = 1,2,\cdots\);
- 利用 RNN 将历史的信息聚合起来得到用户的表征 \(\bm{h}_{t_i}^u\);
- 将 basket 中的 items 的特征表示进行池化操作:
-
通过
\[\bm{o}_{u, t_i} = \bm{N}^T \bm{h}_{t_i}^u \]来获得 \(t_i\) 时刻用户 \(u\) 对于各 items 的一个打分结果.
-
通过 BPR loss 进行训练.