自经典的GAT之后,各种花式图注意力网络层出不穷. 例如, 动态图注意力网络,异质图注意力网络, 知识图注意力网络. 本文介绍了用于推荐的知识图注意力网络KGAT,发表在KDD2019.
作者: 黄海兵
编辑: Houye
img
虽然这些模型都能取得不错的效果,但是这些模型有个缺点:将训练数据里(用户交互数据)的特征进行独立建模,没有考虑到交互数据之间的关系。这使得这些模型不足以从用户的行为中提取出基于属性的协同信息。
比如下图2中,用户u1看了电影 i1,这个电影是e1导演的,传统的CF方法会着重去找那些也看了电影i1的用户,比如u4跟u5。而监督学习方法会重点关注那些有相同属性e1的电影,比如i2。很显然这两类信息都可以作为推荐信息的补充,但是现有的模型不能做到上面两者信息的融合,而且这里的高阶关系也可以作为推荐信息的补充的。比如图中黄色框图里的用户看了同样由e1导演的电影i2, 还有灰色框图里电影同样也有e1的参与。
为了解决上面提到的问题,本文提出 collaborative knowledge graph (CKG)方法,将图谱关系信息及用户user点击商品item的交互图融合到一个图空间里。这样就可以融合CF信息及KG信息,同时也可以通过CKG发现高阶的关系信息。
图2:协同知识图的示例
本文的贡献:
模型介绍
模型输入:用户u、实体i,CKG G
模型输出:输出用户u喜欢实体i的概率值.
下图3是KGAT模型的框图,模型有三部分组成:CKG Embedding Layer、Attentive Embedding Propagation Layers、Prediction Layer。
图3:KGAT模型框图 CKG Embedding Layer:
需要首先将user 与 item交互图及图谱KG id化。
main.py:交替训练CF及KG的loss
img
KGAT.py: KGAT模型构建,对应main.py里两部分训练:model是训练CF的图结构,model1是训练KG的图结构。
img
loader_kgat.py: CF及KG数据加载
img
这里重点讲一下:get_lational_adj_list函数跟_get_relational_lap_list函数:
get_lational_adj_list:用稀疏矩阵变量adj_*mat_*list存储CF与KG的连通信息。
img
_get_relational_lap_list:主要是上一步得到的稀疏CF及KG连通矩阵进行归一化操作。
img
这里重点说一下为啥需要归一化:原始的连通矩阵是没有归一化的,如果没有归一化的连通矩阵与特征矩阵相乘会改变特征的原本分布,产生一些不可预测的问题,所以需要对连通矩阵进行标准化处理。
至此,美味的大餐就要结束了,希望大家用餐愉快,也欢迎各路大神一起交流厨艺。参考文献:
https://arxiv.org/pdf/1803.03467.pdf 2.https://arxiv.org/pdf/1905.07854.pdf
3.https://arxiv.org/pdf/1803.05170.pdf
4.https://arxiv.org/pdf/1708.05123.pdf
5.https://arxiv.org/abs/1606.07792
6.https://arxiv.org/pdf/1708.05027&ie=utf-8&sc_us=6917339300733978278.pdf
7.https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf