首页 > 其他分享 >[IJCAI 2022]Next Point-of-Interest Recommendation with Inferring Multi-step Future Preferences

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

时间:2022-11-08 18:26:24浏览次数:65  
标签:dots Multi dist exp Point sum attention 2022 hat

[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

标签:dots,Multi,dist,exp,Point,sum,attention,2022,hat
From: https://www.cnblogs.com/yujianke100/p/16870700.html

相关文章

  • 20220927 19. 开机流程、模块管理与 Loader
    19.1Linux的开机流程分析19.1.1开机流程一览系统开机的经过可以汇整成下面的流程的:载入BIOS的硬件信息与进行自我测试,并依据设置取得第一个可开机的设备;读取......
  • 20220926 18. 认识与分析登录文件
    18.1什么是登录文件登录文件可以记录系统在什么时间、哪个主机、哪个服务、出现了什么讯息等信息,这些信息也包括使用者识别数据、系统故障排除须知等信息。如果你能够......
  • 20220923 17. 认识系统服务 (daemons)
    17.1什么是daemon与服务(service)常驻在记体体中的程序,且可以提供一些系统或网络功能,那就是服务系统为了某些功能必须要提供一些服务(不论是系统本身还是网络方面),这个......
  • 20220927 21. 软件安装:源代码与 Tarball
    20.1开放源码的软件安装与升级简介21.1.1什么是开放源码、编译器与可可执行文件开放源码:就是程序码,写给人类看的程序语言,但机器并不认识,所以无法执行;编译器:将程序......
  • 20220927 20. 基础系统设置与备份策略
    20.1系统基本设置20.1.1网络设置(手动设置与DHCP自动取得)相关指令ifconfignmclihostnamectl详细内容略20.1.2日期与时间设置timedatectl:时区的显示与......
  • 20221107 24. Linux 核心编译与管理
    24.1编译前的任务:认识核心与取得核心源代码“核心(kernel)”是整个操作系统的最底层,他负责了整个硬件的驱动,以及提供各种系统所需的核心功能,包括防火墙机制、是否支持LVM......
  • 20221107 23. X Window 设置介绍
    在Linux上头的图形接口我们称之为XWindowSystem,简称为X或X11啰!为何称之为系统呢?这是因为X窗口系统又分为Xserver与Xclient,既然是Server/Client(主从架......
  • 20220802 鸟哥 Linux 私房菜【归档】
    参考资料鸟哥Linux私房菜-基础学习篇(第四版)鳥哥私房菜-基礎學習篇目錄-forCentOS7环境信息CentOS7.x书中使用版本:7.1练习使用版本:7.9目录00.计算......
  • 20220804 02. 主机规划与磁盘分区
    2.1Linux与硬件的搭配虽然个人计算机各元件的主要接口是大同小异的,包括前面第零章计算机概论讲到的种种接口等,但是由于新的技术来得太快,Linux核心针对新硬件所纳入的驱......
  • 20220803 01. Linux是什么与如何学习
    1.1Linux是什么Linux就是一组软件1.1.1Linux是什么?操作系统/应用程序?Linux就是一套操作系统Linux就是核心与系统调用接口那两层早期的Linux是针对386来开发的Tor......