本次将带来基于GNN的序列推荐论文系列。整个系列主要围绕最近两年来基于图神经网络的序列推荐工作展开。这些工作包括但不限于,AAAI 2019 SR-GNN,IJCAI 2019 GC-SAN,SIGIR 2020 GCE-GNN,AAAI 2020 MA-GNN等。此次先带来第一篇SIGIR 2020 GCE-GNN,全局上下文增强的图神经网络。主要围绕5个方面展开(我称之为5-TION原则),Motiva「tion」,Contribu「tion」,Solu「tion」,Evalua「tion」,Summariza「tion」。
先从整体上梳理下整个方法。
下面围绕着几个方面来介绍,首先看下整个框架结构。
「session-graph」: 有向图。包括了4种边关系,入度边,出度边,同时入度和出度边(两个结点互相指向),自连接边。
如图中左下角的部分,每条序列构造连边的时候,根据相邻物品结点构造转移边以及自连接边。其中,相邻结点的转移边又可以根据两个结点之间的关系区分为,仅入度边,仅出度边,同时入度和出度边(两个结点互相指向)。
「global-graph」: 定义一个 ,实际上就是说同一个序列,任意两个结点想构造连边时,这两个结点之间的单位距离必须小于 。构造得到的图是带权无向图。连边权重使用共现的次数来表示。对每个结点,只保留Top-N权重的边。 和Top-N机制的目的都是为了减小复杂度,如果序列所有结点之间做全连接,那么构造得到的图的边规模会非常庞大。
针对目标序列 中的某个物品结点 ,我们要首先对它进行表征。结点 既出现在由序列 构成的session-graph中,又出现在global-graph中,我们可以从这两个图中分别提取结点 的表征,然后融合起来形成「单个物品」的表征。
提取全局图上的物品表征的主要好处是能够借鉴其它session中「和目标session相关」的有用信息。因此,这里头的关键点是,如何衡量全局图上的信息是否和「目标session序列 相关」,是否对「目标结点 的表征」有作用。
信息传播:为了实现这一点,作者提出了一种session-aware的注意力机制,计算global-graph上和 相邻的结点 的贡献值
其中, 是目标序列的表征,是目标序列中所有结点的mean pooling结果,即 。 是结点 的表征; 是结点 和 在global graph上的连边权重。这个公式的好处是把目标序列S,邻居结点 以及目标结点 和 的亲和度 都考虑进去了,求出来的注意力值能够衡量global-graph上的邻居结点 和目标session序列是否相关,对目标结点的表征是否有用。softmax在 的所有邻居结点上求一个概率分布。这个注意力机制是此部分的主要亮点,intuition很符合我们的认知。剩余的步骤就是常规的加权邻域汇聚结点并叠加多层来提取global-graph上多阶的结点关系。
是从邻域结点传播到目标结点的信息。
信息汇聚:和自身的信息融合起来。拼接在一起过一个非线性变换。
上述步骤可以抽象成一个agg函数,叠加多层网络提取多阶关系,递推式:。
session-level的物品表征就是从session-graph中和目标结点 相邻的邻域结点 中提出信息。这里头的主要亮点就是注意力机制的设计。在计算序列中结点之间的attention值时,attention的设计考虑了结点之间的4种连边类型(即:出度,入度,自连接,双向),即:edge-type specific attention机制。这个是和基于SR-GNN的工作的差异点之一。SR-GNN基于「出度和入度邻接矩阵」来算每个结点的贡献度,而不是根据attention机制。
是序列中的两个结点 和 连边类型, 是该连边类型特定的参数向量。根据该注意力值加权汇聚邻域结点。由于有自连接边,所以加权汇聚的过程中实际上相当于同时做了信息传播和信息汇聚。
作者在session-graph上只提取了一阶的结点关系,即:上述步骤只进行1次。
最终,每个结点的表征是global-level的表征和session-level的表征sum pooling的结果,即图中加号的部分。具体而言,作者对global-level的表征加了一层dropout来防止过拟合。即:
得到了序列中每个结点的表征后,需要对序列中的每个结点表征进行汇聚,从而形成序列表征。主要包括几个关键点:
结点的位置信息很重要,即位置ID的嵌入。故:首先在序列结点 的表征 中融入了位置信息。位置编码包括顺序编码和逆序编码,二者存在差异的原因主要在于,不同序列的长度是不一样的。因此肯定会设置一个最大编码长度参数,大于这个最大编码长度的就是取默认编码值。此时,顺序编码会导致部分长序列末尾的位置编码都是默认值,逆序编码会导致部分长序列头部的位置编码都是默认的。作者特意强调了逆序编码更有用。符合认知。
就是位置的嵌入, 是最大编码长度。
然后对序列中的结点表征作mean pooling得到「session information」,可以认为是这个session序列浓缩后的信息。
这个session information作为序列attention的trigger去和序列中的每个结点做soft attention,得到表示「每个结点对序列表征的贡献度值」。作者称这种注意力机制为position-aware attention( 中融入了位置信息)。这个和SR-GNN的工作是比较大的差异点,SR-GNN中用的last item作为trigger去做attention。
根据该值加权每个结点的表征,最终得到「序列」的表征。
最后的预测层很简单,预测下一次交互,多分类问题。序列表征和物品初始表征做点击,再softmax,得到该物品是下一次交互的概率值。
最后训练的时候用交叉熵损失。上述公式也可以写成矩阵形式就是序列表征向量 和物品的初始嵌入矩阵 做点击,得到在所有物品上的概率分布。
这篇文章总体上还是有值得借鉴的地方。比如从所有的session序列中构造全局图,这样能够通过借助其它session的信息来辅助目标session的表征。为了能够从全局图中提取相关的信息,作者提出了session-aware注意力机制来自适应地选择相关的全局信息。另一方面,针对由目标session序列构造而来的局部图,文章的核心贡献包括序列中结点之间edge type specific的注意力机制来进行邻域信息汇聚;为了得到整个session序列的表征,需要计算每个结点对序列表征的贡献度,大部分工作会用最后一个item去和每个结点做attention,而这篇文章,作者用整个序列浓缩后的信息去和每个结点做attention,且该attention机制是position-aware的。这些亮点都能作为独立的组件去改进原来的基于GNN的序列推荐方法,都值得在实践中去尝试。
Paper:Wang Z, Wei W, Cong G, et al. Global Context Enhanced Graph Neural Networks for Session-based Recommendation[C]//Proceedings of the 43rd International ACM SIGIR Conference on Research and Development in Information Retrieval. 2020: 169-178.
Code: https://github.com/johnny12150/GCE-GNN
由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:
(1)点击页面最上方"AINLP",进入公众号主页。
(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。
感谢支持,比心。
推荐阅读
征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)
完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)
模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法
文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化
斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。
阅读至此了,分享、点赞、在看三选一吧🙏