【论文阅读】Geography-Aware Sequential Location Recommendation
【论文阅读】Geography-Aware Sequential Location Recommendation
前言
顺序位置推荐在许多应用中发挥着重要作用,如移动性预测、路线规划和基于位置的广告。它不但可以提高用户体验,增加用户粘性,还能为商家带来潜在的商业利益,已成为推荐系统中最重要的研究方向之一。
一篇 2020 年 KDD 的论文:Geography-Aware Sequential Location Recommendation
问题描述
(next POI recommendation)给定大小为MMM的用户集合U={u1,u2,⋯,uM}U=\{u_1, u_2, \cdots,u_M\}U={u1,u2,⋯,uM}和大小为NNN的 POI 集合V={v1,v2,⋯,vN}V=\{v_1, v_2, \cdots, v_N \}V={v1,v2,⋯,vN}。
对于当前用户uuu,他的行动轨迹为Su=r1u→r2u→⋯→rnuS^u = r_1^u \rightarrow r_2^u \rightarrow \cdots \rightarrow r_n^uSu=r1u→r2u→⋯→rnu,其中riu=(u,ti,vi,pi)r_i^u = (u,t_i,v_i,p_i)riu=(u,ti,vi,pi),表示用户uuu在tit_iti时刻到达位置为pip_ipi的地点viv_ivi,其中pi=(latitude=αi,longitude=βi)p_i = (\text{latitude}=\alpha_i,\text{longitude}=\beta_i)pi=(latitude=αi,longitude=βi)
一般的,我们的任务是预测用户的下一个访问地点,即next POI(Point-of-Interest) recommendation。
OverView
现有问题
- 地理位置信息没有得到充分利用。POI 的位置信息对于描述 POI 之间的物理距离很重要,并且用户的移动历史通常表现出空间聚集现象。因此需要对位置的精确 GPS 位置进行编码;
- 稀疏性问题。用户通常很少访问不同的地点,负面偏好的位置会与潜在的正面位置混合在一起;通常使用BPR 损失或二值交叉熵损失进行优化。但样本之间的信息量是不同的,因此在这些损失函数中平等对待它们不是最佳的方法。
这篇论文提出了一种基于自注意力网络的地理感知顺序推荐算法(GeoSAN),针对上面提到的两个问题,一方面,使用一个基于自注意力的地理位置编码器来编码 GPS;另一方面,提出了基于重要性抽样的加权二元交叉熵损失函数,使信息负样本具有更大的权重。
Geography-aware Self-Attention Network
模型总体架构如下图所示:
Embedding
首先是一些数据处理的东西。将输入序列转化为长度为mmm的定长序列,如果长度超过mmm,就将其切分为多个子序列;否则使用 0 进行 padding 填充。输入序列包括user,hour of week,POI 和 location。
另外一方面,由于总体的结构类似 Transformer,不像 RNN 那样那能读取位置信息,因此额外加入了位置编码信息:
E=E+PE=E+PE=E+P
Self-Attention Encoder
self-Attention 的部分其实与 Transformer 是一致的,Attention 部分也没有加入一些额外的信息,这里就简单罗列一下。如果你不熟悉 Transformer,也可以看我的另一篇文章:【论文阅读】Attention Is All You Need
堆叠多个 Self-Attention 模块,每个模块由 Self-Attention 和 FFN 组成,并且使用残差和 layernorm 连接。
Self-Attention 部分:
S=SA(E)=Attention(EWQ,EWK,EWV)\mathbf{S} = SA(\mathbf{E}) = \text{Attention}(\mathbf{EW}_Q, \mathbf{EW}_K, \mathbf{EW}_V)S=SA(E)=Attention(EWQ,EWK,EWV)
Attention(Q,K,V)=softmax(QKTd)V\text{Attention}(\mathbf{Q,K,V}) = \text{softmax}(\frac{\mathbf{QK}^T}{\sqrt{d}})\mathbf{V}Attention(Q,K,V)=softmax(d
Feed-forward Network(FFN)部分:
F=FFN(S)=max(0,SW1+b1)W2+b2\mathbf{F} = FFN(\mathbf{S}) = \max(0, \mathbf{SW}_1 + \mathbf{b}_1)\mathbf{W}_2 + \mathbf{b}_2F=FFN(S)=max(0,SW1+b1)W2+b2
Target-aware Attention Decoder
许多现有的基于 self-attention 的方法都直接将经过 Self-Attention Encoder 的输出进行匹配,进而得到最终的结果。然而一些研究表明这可能并不合适,因此又加上了一个解码器,仍然是基于 self-attention 的处理。总而言之理解成 Transformer 就行了。
A=decoder(F(l)∣T)=Attention(T,F(l)W,F(l))\mathbf{A} = \text{decoder}(\mathbf{F^{(l)} \vert \mathbf{T}}) = \text{Attention}(\mathbf{T}, \mathbf{F}^{(l)}\mathbf{W}, \mathbf{F}^{(l)})A=decoder(F(l)∣T)=Attention(T,F(l)W,F(l))
简单理解起来,T,F(l)W,F(l)\mathbf{T}, \mathbf{F}^{(l)}\mathbf{W}, \mathbf{F}^{(l)}T,F(l)W,F(l)对应的就是公式里的Q,K,VQ,K,VQ,K,V,其中T\mathbf{T}T为候选 POI 以及其地理位置信息拼接得到。
Matching
在经过了解码器之后,计算每个候选位置的得分,计算内积:
yi,j=f(Ai,Tj)y_{i,j} = f(\mathbf{A}_i, \mathbf{T}_j)yi,j=f(Ai,Tj)
Geography Encoder
上面的模型内容基本上都是按照 Transformer 的形式,总体而言变化不大。接下来就是这篇文章主要提出的 Geography Encoder,即对 GPS 信息进行编码。
之所以不将经纬度信息直接作为输入,主要考虑到下面两个问题:
- 经纬度表示的范围很大,但人们的活动空间往往只是很小一部分;
- 经纬度之间的强交互作用难以学习。
这篇论文的方法是将经纬度映射到网格中,利用网格的唯一 ID(quadkey)进行位置嵌入。
Map Gridding and GPS Mapping
瓷砖地图(Tile Map System),你可能没有听过这个概念,但你一定在地图上经常看见这些方块,它也广泛应用于 Google 地图和 Bing 地图:
具体来说,首先将经纬度坐标转化为笛卡尔坐标:
x=β+180360×256×2ly=(12−14πlog1+sin(α×π/180)1−sin(α×π/180)×256×2l)\begin{aligned}x &= \frac{\beta+180}{360} \times 256 \times 2^l \\ y &= \left(\frac{1}{2} - \frac{1}{4\pi}\log \frac{1 + \sin(\alpha \times \pi / 180)}{1 - \sin(\alpha \times \pi / 180)} \times 256 \times 2^l \right)\end{aligned}xy=360β+180×256×2l=(21−4π1log1−sin(α×π/180)1+sin(α×π/180)×256×2l)
之后,再将笛卡尔坐标映射到栅格。
现在,我们成功地将经纬度映射到网格中,那么如何对网格进行编码呢?论文中使用了四叉键(quadtree key,quadkey),可以简单理解为四叉树的概念。
{% note info no-icon %}
直接看论文中的这幅图可能有点困难,举个例子:
图中红色点是一个 POI,为了标识该点,应用四叉树,在 level 1 中,可以将其标识为3
;在 level 2 中,可以将其标识为32
,后续继续细分同理。
{% endnote %}
通过这样的方式,解决了经纬度强关联的问题。另外一方面,网格中不同位置的 POI 可能共享相同的 quadkey,而没有 POI 的网格在嵌入时直接忽略,因此在一定程度上解决了稀疏性问题。
Encoding Quadkeys
论文中使用了 n-gram 算法对 quadkey 进行编码。举个例子,12022001
通过 n-gram 算法编码为120→202→022→220→200→001120\rightarrow202\rightarrow022\rightarrow220\rightarrow200\rightarrow001120→202→022→220→200→001。通过这样的方式使词汇量扩大了 n 倍,也可以更好地表征相似度。之后再将经过 n-gram 处理的序列进行 embedding,就得到了最终的地理位置表示。
N-Gram 是一种基于统计语言模型的算法。它的基本思想是将文本里面的内容按照字节进行大小为 N 的滑动窗口操作,形成了长度是 N 的字节片段序列。
如果不进行 n-gram,而直接将 quadkey 进行 embedding 会出现两个问题:
- 地图划分较细的时候,容易出现稀疏性;
- 无法表征相邻网格之间的相似性。
Loss Function with Importance Sampling
现有的许多方法使用的是二值交叉熵损失函数:
Loss=−∑SU∈S∑i=1n(logσ(yi,oi)+∑k∉Lulog(1−σ(yi,k)))Loss = - \sum_{S^U\in S}\sum_{i=1}^n \left( \log\sigma(y_{i,o_i}) + \sum_{k\notin L^u}\log(1-\sigma(y_{i,k})) \right)Loss=−SU∈S∑i=1∑n⎝⎛logσ(yi,oi)+k∈/Lu∑log(1−σ(yi,k))⎠⎞
其中SSS是移动轨迹的训练集,oio_ioi表示第iii步的目标 POI,LuL^uLu表示用户uuu访问的 POI 集合。但是二值交叉熵损失函数不能完全有效利用大量未访问的位置,负样本信息的缺失。
论文由此提出了通过负概率的形式对负样本进行加权:
Loss=−∑SU∈S∑i=1n(logσ(yi,oi)+∑k∉LuP(k∣i)log(1−σ(yi,k)))Loss = - \sum_{S^U\in S}\sum_{i=1}^n \left( \log\sigma(y_{i,o_i}) + \sum_{k\notin L^u}P(k\vert i)\log(1-\sigma(y_{i,k})) \right)Loss=−SU∈S∑i=1∑n⎝⎛logσ(yi,oi)+k∈/Lu∑P(k∣i)log(1−σ(yi,k))⎠⎞
其中P(k∣i)P(k\vert i)P(k∣i)表示在给定用户轨迹时,POI kkk为负样本的概率:
P(k∣i)=exp(ri,k/T)∑k′∉Luexp(ri,k′/T)P(k\vert i) = \frac{\exp(r_{i,k}/T)}{\sum_{k'\notin L^u}\exp(r_{i,k'}/T)}P(k∣i)=∑k′∈/Luexp(ri,k′/T)exp(ri,k/T)
其中TTT为超参数,控制概率分布与均匀分布的散度。
然而论文提出,该损失函数在概率上计算归一化的效率仍然较低。因此考虑使用 Importance Sampling 的方法近似计算期望:
Loss=−∑SU∈S∑i=1n(logσ(yi,oi)+∑k=1Kwklog(1−σ(yi,k)))Loss = - \sum_{S^U\in S}\sum_{i=1}^n \left( \log\sigma(y_{i,o_i}) + \sum_{k=1}^Kw_k\log(1-\sigma(y_{i,k})) \right)Loss=−SU∈S∑i=1∑n(logσ(yi,oi)+k=1∑Kwklog(1−σ(yi,k)))
其中
wk=exp(ri,k/T−lnQ~(k∣i))∑k′∉Luexp(ri,k′/T−lnQ~(k′∣i))w_k = \frac{\exp(r_{i,k}/T - \ln \widetilde{Q}(k\vert i))}{\sum_{k'\notin L^u}\exp(r_{i,k'}/T - \ln \widetilde{Q}(k'\vert i))}wk=∑k′∈/Luexp(ri,k′/T−lnQ
Geography-aware Negative Sampler
根据地理位置,基于 K 近邻方法,先召回位置最近的 K 个样本,从最近的这些样本中选择负样本。
实验
数据集
- Gowalla
- Brightkite
- Foursquare
Comparison with baseline
Ablation Study
论文中进行了多项消融实验:
- US(Uniform Sampler)
- BCE (Binary Cross-Entropy) Loss
- Remove GE (Geography Encoder)
- Remove PE (Positional Embedding)
- Add UE (User Embedding)
- Add TE (Time Embedding)
- Add TAAD (Target-Aware Attention Decoder)
通过上面消融实验,论文发现:
- 使用 KNN 的负采样显著提高了性能;
- 新的损失函数的有效性;
- 地理位置信息编码的有效性;
- 添加 user embedding 和 time embedding 并不会提高性能;
- 使用 target-aware attention decoder 在某些情况下是有帮助的。
敏感性分析
对不同损失函数的研究
针对损失函数,论文又进行排列组合,研究不同情况下的性能表现:
对 N-gram 的研究
总结
总体而言,感觉这篇论文主体的模型框架还是 Transformer,最大的创新主要在于地理位置信息编码,将 GPS 信息转化为网格,再对 quadkey 进行编码,个人感觉还是有点东西的。然后另外一块的话就是损失函数,虽然论文给出了为什么加上负样本概率的原因,但我其实没有非常理解,可能以后需要多看看损失函数这块的东西。
参考资料
- [1] Geography-Aware Sequential Location Recommendation
【论文阅读】Geography-Aware Sequential Location Recommendation相关推荐
- 论文阅读笔记:Geography-Aware Sequential Location Recommendation
论文阅读笔记:Geography-Aware Sequential Location Recommendation 文章目录 论文阅读笔记:Geography-Aware Sequential Loc ...
- 论文-Geography-Aware Sequential Location Recommendation
题目 <Geography-Aware Sequential Location Recommendation> 简介 这是一篇KDD2020的序列推荐的论文<Geography-Aw ...
- KDD2020的一篇序列推荐的论文《Geography-Aware Sequential Location Recommendation》
今天看了KDD2020的一篇序列推荐的论文<Geography-Aware Sequential Location Recommendation>,跟自己的研究不像,其他的论文还没发布,先 ...
- 【推荐算法论文阅读】BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Trans
一.背景 之前基于RNN的推荐模型都是按照从左到右单向建模的,单向结构限制了用户行为序列中隐藏表示的能力--它们通常假定一个严格有序的序列,而这并不总是实用的. 本文提出了 bert4rec,应用de ...
- 论文《Cross-Session Aware Temporal Convolututional Network for Session-based Recommendation》阅读
论文<Cross-Session Aware Temporal Convolututional Network for Session-based Recommendation>阅读 论文 ...
- Self-Attentive Sequential Recommendation论文阅读笔记
SASRec论文阅读笔记 论文标题:Self-Attentive Sequential Recommendation 发表于:2018 ICDM 作者:Wang-Cheng Kang, Julian ...
- 推荐系统论文阅读——Factorizing Personalized Markov Chains for Next-Basket Recommendation
转自博客:https://blog.csdn.net/stalbo/article/details/78555477 论文题目:Factorizing Personalized Markov Chai ...
- 论文阅读:LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation
论文阅读:LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation paper:https:// ...
- 【论文阅读】GETNext: Trajectory Flow Map Enhanced Transformer for Next POI Recommendation
[论文阅读]GETNext: Trajectory Flow Map Enhanced Transformer for Next POI Recommendation 前言 Next POI 推荐是根 ...
最新文章
- swaggerui api.docs
- 一口气拿了9家公司的offer,年薪50W
- Lintcode--4(1)--A+B
- mysql性能仪表盘_mysql-笔记-性能
- 高晓松卸任北京阿里巴巴音乐科技有限公司董事长
- python tk text 自动换行_Python tkinter之Text
- 【免费毕设】ASP.NET报名管理信息系统(源代码+lunwen)
- 基于Java实现udp编程
- WDM驱动安装和卸载
- [1034]安装Xposed框架+JustTrustMe
- Java进阶架构实战——Redis在京东到家的订单中的使用
- 百度地图点击城市的出现下钻
- 程序员常用的代码编辑器
- 《形式感+——网页视觉设计创意拓展与快速表现》
- 钉钉考勤接口调用与OA系统数据对接(多线程版)
- 实验题目:约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,m为任意一个正整数。从第一个人开始顺时针方向自1起顺序报数,报到m时停止并且报m的人出列,再从他的下一个人
- uniapp简单封装的激励广告和插屏广告
- Spring boot 事物管理
- 【巨人的肩膀上制造世界】——1——Unity3D实用插件之地形插件Gaia,高质高效搭建你的地形,全中文教程!
- Mathematics for Computer Science 2