[IJCAI 2022]Next Point-of-Interest Recommendation with Inferring Multi-step Future Preferences

介绍

文章做的问题是next point-of-interst(POI)。以前的工作只考虑以前和当前的信息,这篇会考虑未来的信息(预测打算去干嘛、喜好等)。

问题定义

用户\(U = \{u_1, u_2, \dots, u_{|U|}\}\),位置\(L=\{l_1, l_2, \dots, l_{|L|}\}\),位置的类别\(C=\{c_1, c_2, \dots, c_{|C|}\}\),时间戳\(T=\{t_1, t_2, \dots, t_24, t_{w_0}, t_{w_1}\}\),下标表示1到24小时和工作日/休息日标记。

拼在一起\(r=(u, l, c, g, t)\)表示u在t时去了c类型地理编码(经纬度)为g的l,再把这个人的轨迹做整合\(S^u=\{S^u_1, S^u_2, \dots, S^u_n\}\),最新的\(S^u_n=\{r_1, r_2, \dots, r_k\}\)被认为是当前行为\(S^u_{cur}\),剩下的为以前行为\(S^u_{past}\)

研究的问题是,提供了\(S^u_{past}\)\(S^u_{cur}\)后,推断出他未来\(t_{k+1},\dots, t_T\)的多步,并给出\(t_{k+1}\)的一组推荐。

模型

img

模型名为Context-aware Future Preference inference Recommender(CFPRec)

Past Preference Encoder

过去的任意一个r都可以拼出一个特征:

\[e_{r_i}=u \oplus l \oplus c \oplus t,\ e_{r_i} \in \mathbb{R}^{5D} \]

里面\(t \in \mathbb{R}^{2D}\)同时包含事件编码和工作日/休息日编码\(t = t_k \oplus t_{w_0}/t_{w_1}\)

得到的\(E_{S^u_i}\)扔进transformer里:

\[H_{S^u_i} = [h_1, h_2, \dots, h_{|S^u_i|}] = TransLayer(E_{S^u_i})\\ TransLayer(Q,K,V,\Delta^{dist}) = (F(\frac{QK^T+\Delta^{dist}}{\sqrt{5D}}))V \]

\(E_{S^u_i}\)会乘三个不同的\(W\in \mathbb{R}^{5D \times 5D}\)得到\(Q,K,V\)。里面的\(F(\cdot)\)是softmax,\(\Delta^{dist} \in \mathbb{R}^{|S^u_i|\times |S^u_i|}\)表示空间关系矩阵,\(\Delta^{dist}_{i,j} = (1+dist(l_i, l_j))^{-1}\)

补充说明一点,transformer里要除以\(\sqrt{d}\)的主要目的是控制内积别变太大,而至于为什么是\(\sqrt{d}\),要是假设Q和K中的元素均值为0,方差为1的话,那么它们的内积结果均值还会是0,方差为\(d\),所以除以一个\(\sqrt{d}\)来让方差变回1。参考资料

后面接的是一个多预测辅助任务:

首先随机mask掉\(S^u_i\)里的20%的r,把里面的数据随机掉:

\(r(u,l,c,g,t) \to r_m =(u, l_m, c_m, g_m, t_m)\)

然后做下面的预测:

  • 位置\(\hat{l} = F(h_m, W_l)\)
  • 位置类型\(\hat{c} = F(h_mW_c)\)
  • 时间\(\hat{t} = F(h_mW_t)\)

这部分的loss:

\[L^{aux} = -\sum_{k \in N_m} \log(\hat{l}_k) + \log(\hat{c}_k) + \log(\hat{t}_k) \]

Current Preference Encoder

先过Embedding再过LSTM,也就是把历史记录给整合了:

\[h_{t_i} = LSTM(e_{r_i}, h_{t_{i-1}}),\ i \in \{1, 2, \dots, k\} \]

最后得到:

\[H_{S^u_n}=[h_{t_1}, h_{t_2}, \dots, h_{t_k}] \]

这样一整组的隐藏层特征。

Future Preference Extractor

Intra-sequence Attention Aggregation

过去的信息已经被编码为了:\(H_{S^u_i}=[h_1, h_2, \dots, h_{|S^u_i|}]\)

接下来只要用attention做聚合就可以预测未来的特征了:

\[{s^t_i}^f= \sum^{|S^u_i|}_{i=1} \alpha_ih_i,\ t_f \in \{t_{k+1}, t_{k+1}, \dots, t_T\}\\ \alpha_i = \frac{\exp(t^T_fh_i)}{\sum^{|S^u_i|}_{i’=1}\exp(t^T_fh_{i’})} \]

其中\(t_f\)是未来时间的embedding。也就是将历史信息对比未来某个时间做attention,然后聚合出预测结果。

这里感觉有个bug,就是时间信息应该遵循越早的信息越无用的情况。这里单纯用attention来做有欠优化的嫌疑。

Inter-sequence Attention Aggregation

上一个是根据未来时间来做attention,来预测未来某个时间时,某用户的行为。这边这个是在有了多组(n-1)上面那个预测的轨迹后,再和用户自己做attention来整合这些结果:

\[{h_t}_f = \sum^{n-1}_{i=1} \beta_i {s^t_i}^f,\ t_f \in \{t_{k+1}, t_{k+2}, \dots, t_T\}\\ \beta_i = \frac{\exp(u^T{s^t_i}^f)}{\sum^{n-1}_{i’-1}exp(u^T{s^t_{i’}}^f)} \]

里面的u就是动态用户embedding。最后就能得到多步的未来预测:

\[H_f = [h_{t_{k+1}}, h_{t_{k+2}}, \dots, h_{t_{T}}] \]

训练

现在已经得到了\(H_{S^u_n, f}=[H_{S^u_n}, H_f]\),再对这个结果做attention整合:

\[h^u = \sum^T_{i=1} \omega_i h_{t_i},\ h_{t_i} \in H_{S^u_n, f}\\ \omega_i = \frac{\exp(u^Th_{t_i})}{\sum^T_{i’=1}\exp(u^Th_{t_i’})} \]

然后就可以进行预测:\(\hat{y} = F(h^uW_0)\)

损失函数:\(L^{poi}=-\sum \log(\hat{y}_i),\ L= L^{poi}+\eta L^{aux}\)

算法整体伪代码:

img

实验

数据集

img

实验结果

其中使用到的指标:

  • HitRate@K(HR@K):前k个结果中命中的概率(真实标签的比率)
  • NDCG@K:判断推荐的顺序和真实顺序的差距

img

img

原文地址:http://www.cnblogs.com/yujianke100/p/16870700.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性