Calendar Graph Neural Networks for Modeling Time Structures in Spatiotemporal User Behaviors学习笔记
论文简介
Daheng Wang老师发表在KDD 2020上的一篇论文,主要通过用户的时空行为数据,对时间进行分级别建模,同时融合时空相关性来学习用户表示 ,能够更好的服务于下游任务。
论文源码:https://github.com/dmsquare/CalendarGNN
论文背景
学习用户的表示,现有的学习方法主要将用户的行为日志表示为一系列项,并找到相应的顺序模式,但是这可能会缺少空间信息,但是这些空间信息对用户建模是非常有用的。
目前方法的一些缺点:
在目前基于GNN的方法中,缺少的重要模式类型是不同时间级别的周期性,级别周期性类似于小时级别、周级别和每一天级别这种时间信息。例如,对于一个用户看新闻这件事,有的人喜欢在工作日的早晨看,有的人喜欢在睡觉前的深夜看。所以为了发现这些模式,除了简单的顺序排序之外,还需要处理具体的时间信息。因此,时间级别(或者说日历的层次结构)必须纳入用户嵌入学习的过程中,所以作者提出了一种名为CalendarGNN的框架。
作者包含周期性的日历结构图如下:
论文主要是分成了两大块
第一:从作者构建的三方网络(session、item、location)来融合时间和空间信息
第二:对时间考虑了不同的级别
问题定义
问题定义1:用户的时空行为日志
对于每一个用户而言,他的时空行为日志可以用(session,位置)的元组来进行表示,这个元组应该是代表用户在什么时候做了进行了什么会话,每一个会话又可以使用(item,时间)元组来进行表示,这个元组应该代表用户在这个session中的什么时间干了什么事。
问题定义2:用户时空行为数据图
这个就是刚才提到的三方网络,他可以当做用户时空数据的形式化描述,来捕获行为日志中复杂的时空模式。
这个网络由session、item和位置三个不同的属性进行表示 ,其中session和位置,session和item之间有连边。
首先说一下session和item之间的连边,这个边代表用户在这个session中做了什么事,session与几个item有连边就代表在这个session中做了几件事,对于一个session而言,它与item之间的连边是有时间关系在里面的,并且对
而言,
,
代表用户u总共有多少个session,
代表用户在第i个session做了几件事,也就是用户在第i个session中对应几个item。
然后是session和location之间的连边,这个表示用户在什么位置开始了一个会话。
问题描述
对于给定的用户行为数据图,作者想要学习用户的表示,其中用户的表示需要满足以下两个要求:
1、学习到的用户表示必须能够捕获时间模式和空间模式,以及不同级别的时间周期性
2、学习到的用户表示要尽可能的和用户标签相类似,即下游任务要做的好。
论文框架
作者的用户框架图如下所示,看起来是比较复杂的,但是把它分段来看其实就是长得比较吓人,思想还是挺容易懂的。
先从模型的左上角开始,即通过输入数据如何得到item和session的表示。
首先是学习每个item的表示,这里以一个新闻稿为例。新闻稿的特征可以被描述为:
1、标识,例如这篇文章的ID
2、主题,例如这篇文章的类型
3、内容,例如文章标题
对于前两个可以看成分类任务,作者这里使用了MLP来得到每一类的表示,对于向第三个这种带有序列信息的内容,作者使用了双向LSTM来产生结点的隐层表示,最后将这三者拼起来。
对于每个位置的表示,作者将一个位置按照国家/省/市+经纬度的方式来进行表示,比如US/California/Oakland,-122.1359,37.7591,对于前半部分这种不同级别的区域,作者使用三个不用的MLP来进行编码,而对于经纬度,作者是直接对其进行了归一化。对item、location的表示如下所示
学习到item和location表示后,根据大的论文框架向后走,可以发现session的表示是由item表示和输入数据来得到的,主要方法为:首先获取与这个session相连的item,对这些item的表示按时间排序然后送入GRU单元中来进行学习,就得到每个session的表示,,其中
是一个聚合函数,这里作者用到的是GRU。
学习得到session、item、location表示后,就将session的表示一部分传递给时间聚合层,用于生成各种周期性的时间模式;一部分传递给空间聚合层,用于生成空间模式。
对于时间聚合层,他的输入就是一个会话的表示,整体思路为:
1、将一系列连续的session映射到离散的时间单元中,
2、将相同时间单位中的session聚合到相应的时间单位嵌入,这里的时间单位应该是小时、周、日这种
3、将时间单元嵌入到时间模式的嵌入中
对于第1步,涉及到会话的时间,因为一个会话会对应多个item,这里选择最靠前的时间作为这个session的时间,原文的描述如下
将会话节点映射到指定的时间单位后,CalendarGNN应用同一时间单位的时间聚合函数将会话节点嵌入聚合到各种时间单位的嵌入
然后,将这些在三个维度中的时间单位嵌入进一步汇总为各个时间模式的嵌入
式2-7中的函数都使用的是GRU单元 ,这样给定一个时间,就能够计算出这个时间对一个的嵌入。
接下来要考虑对session会话对空间聚合层的作用。
与时间聚合层相比,空间聚合层简单许多,首先将session嵌入和位置嵌入拼起来。这里因为session和位置之间具有时间属性(三方网络图中的),所以也能用GRU单元进行聚合
然后再将各种位置单元嵌入聚合到空间模式的嵌入向量中。
最后,将不同时间级别的表示和位置表示拼到一起直接作为用户的表示。
对于损失函数,分类任务使用的是类似于softmax函数,,对于回归任务,使用的是均方误差作为损失函数
对于CalendarGNN,虽然考虑了不同时间级别的周期性,但是他仍然有一些缺点,
1、不同的时间/空间单位嵌入对其用户的重要性级别不同,这种重要性CalendarGNN并没有体现
2、时间、空间之间应该有比较丰富的交互作用,两者不应该独立。
因此作者在他的基础上加入了注意力系数 ,称为 CalendarGNN-Attn。
对于空间嵌入和时间嵌入(以小时级别的时间为例)
,
首先生成一个位置查询和时间查询?(这一块没有看懂为啥要这么做)
首先使用位置表示生成空间对小时级别这个时间的注意力系数,函数f作为一个打分函数
,根据注意力系数和时间模式的嵌入来生成空间对时间的注意力
同理,也能够根据时间对空间的注意力
然后将空间对时间的注意力以及时间对空间的注意力拼接起来表示时空之间的相关性,然后考虑周级别和日级别的时间信息,把他们拼起来得到用户的表示
,此时用户的表示对不同级别的时间有了相应的注意力系数,并且时间和空间也不是独立存在的。
实验部分
数据集:从两个网站中进行收集并进行整合,得到了两个数据集,详细结果如下:
这里进行的预测任务主要分为了三个,分别为
1、预测用户性别,分类任务,共分为了两类
2、预测用户收入,用户收入分成了0-9共10类,数字越大表示用户收入越多,0表示未知,也是分类任务。
3、预测用户年龄,回归任务
然后是在两个数据集上的实验结果
对于两个分类任务,作者进行了可视化结果,表明作者的方法能够很好的对用户进行了分类
总结
1、从用户的行为日志构建了会话——item——位置的三方网络图
2、论文考虑了不同的时间维度对用户的重要性
3、时间维度和空间维度不应该分开,两者应该是相辅相成的
公众号:梦工厂故事馆,希望有想法的同学多交流~