authors:: Defu Lian, Yongji Wu, Yong Ge, Xing Xie, Enhong Chen
container:: Proceedings of the 26th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining
year:: 2020
DOI:: 10.1145/3394486.3403252
rating:: ⭐⭐⭐
share:: true
comment:: 创新主要在于地理位置信息编码,将 GPS 信息转化为网格,再对 quadkey 进行编码,损失函数部分加上负样本概率对负样本进行加强。
顺序位置推荐在许多应用中发挥着重要作用,如移动性预测、路线规划和基于位置的广告。它不但可以提高用户体验,增加用户粘性,还能为商家带来潜在的商业利益,已成为推荐系统中最重要的研究方向之一。
一篇 2020 年 KDD 的论文:Geography-Aware Sequential Location Recommendation
(next POI recommendation)给定大小为M的用户集合
和大小为N的 POI 集合
。
对于当前用户uuu,他的行动轨迹为
,其中
,表示用户uuu在tit_iti时刻到达位置为pip_ipi的地点viv_ivi,其中
一般的,我们的任务是预测用户的下一个访问地点,即next POI(Point-of-Interest) recommendation。
现有问题
这篇论文提出了一种基于自注意力网络的地理感知顺序推荐算法(GeoSAN),针对上面提到的两个问题,一方面,使用一个基于自注意力的地理位置编码器来编码 GPS;另一方面,提出了基于重要性抽样的加权二元交叉熵损失函数,使信息负样本具有更大的权重。
模型总体架构如下图所示:
首先是一些数据处理的东西。将输入序列转化为长度为mmm的定长序列,如果长度超过mmm,就将其切分为多个子序列;否则使用 0 进行 padding 填充。输入序列包括user,hour of week,POI 和 location。
另外一方面,由于总体的结构类似 Transformer,不像 RNN 那样那能读取位置信息,因此额外加入了位置编码信息:
self-Attention 的部分其实与 Transformer 是一致的,Attention 部分也没有加入一些额外的信息,这里就简单罗列一下。如果你不熟悉 Transformer,也可以看我的另一篇文章:【论文阅读】Attention Is All You Need
堆叠多个 Self-Attention 模块,每个模块由 Self-Attention 和 FFN 组成,并且使用残差和 layernorm 连接。
Self-Attention 部分:
Feed-forward Network(FFN)部分:
许多现有的基于 self-attention 的方法都直接将经过 Self-Attention Encoder 的输出进行匹配,进而得到最终的结果。然而一些研究表明这可能并不合适,因此又加上了一个解码器,仍然是基于 self-attention 的处理。总而言之理解成 Transformer 就行了。
简单理解起来,
对应的就是公式里的
,其中
为候选 POI 以及其地理位置信息拼接得到。
在经过了解码器之后,计算每个候选位置的得分,计算内积:
上面的模型内容基本上都是按照 Transformer 的形式,总体而言变化不大。接下来就是这篇文章主要提出的 Geography Encoder,即对 GPS 信息进行编码。
之所以不将经纬度信息直接作为输入,主要考虑到下面两个问题:
这篇论文的方法是将经纬度映射到网格中,利用网格的唯一 ID(quadkey)进行位置嵌入。
瓷砖地图(Tile Map System),你可能没有听过这个概念,但你一定在地图上经常看见这些方块,它也广泛应用于 Google 地图和 Bing 地图:
具体来说,首先将经纬度坐标转化为笛卡尔坐标:
之后,再将笛卡尔坐标映射到栅格。
将经纬度映射到网格中,那么如何对网格进行编码呢?
现在,我们成功地将经纬度映射到网格中,那么如何对网格进行编码呢?论文中使用了四叉键(quadtree key,quadkey),可以简单理解为四叉树的概念。
直接看论文中的这幅图可能有点困难,举个例子:
图中红色点是一个 POI,为了标识该点,应用四叉树,在 level 1 中,可以将其标识为3
;在 level 2 中,可以将其标识为32
,后续继续细分同理。
通过这样的方式,解决了经纬度强关联的问题。另外一方面,网格中不同位置的 POI 可能共享相同的 quadkey,而没有 POI 的网格在嵌入时直接忽略,因此在一定程度上解决了稀疏性问题。
论文中使用了 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 会出现两个问题:
现有的许多方法使用的是二值交叉熵损失函数:
其中SSS是移动轨迹的训练集,oio_ioi表示第iii步的目标 POI,LuL^uLu表示用户uuu访问的 POI 集合。但是二值交叉熵损失函数不能完全有效利用大量未访问的位置,负样本信息的缺失。
论文由此提出了通过负概率的形式对负样本进行加权:
其中
表示在给定用户轨迹时,
为负样本的概率:
其中TTT为超参数,控制概率分布与均匀分布的散度。
然而论文提出,该损失函数在概率上计算归一化的效率仍然较低。因此考虑使用 Importance Sampling 的方法近似计算期望:
其中
根据地理位置,基于 K 近邻方法,先召回位置最近的 K 个样本,从最近的这些样本中选择负样本。
论文中进行了多项消融实验:
通过上面消融实验,论文发现:
针对损失函数,论文又进行排列组合,研究不同情况下的性能表现:
总体而言,感觉这篇论文主体的模型框架还是 Transformer,最大的创新主要在于地理位置信息编码,将 GPS 信息转化为网格,再对 quadkey 进行编码,个人感觉还是有点东西的。然后另外一块的话就是损失函数,虽然论文给出了为什么加上负样本概率的原因,但我其实没有非常理解,可能以后需要多看看损失函数这块的东西。