【说在前面】本人博客新手一枚,象牙塔的老白,职业场的小白。以下内容仅为个人见解,欢迎批评指正,不喜勿喷![握手][握手]
【再啰嗦一下】如果你对智能推荐感兴趣,欢迎先浏览我的另一篇随笔:智能推荐算法演变及学习笔记
【最后再说一下】本文只对智能推荐算法中的基于图模型的智能推荐进行具体介绍!
一、基于知识图谱的智能推荐
以知识图谱作为边信息生成推荐的价值在于:一方面可以提供更准确的推荐;另一方面可以对推荐结果进行解释。
知识图谱由实体和关系组成(以电影推荐为例):实体(用户、电影、演员、导演和类型);关系(交互、归属、表演、导演和友谊)。
1. 基于embedding的方法
基本思想:将知识图谱中的节点和边在低维向量空间中得到嵌入表示(Knowledge Graph Embedding,KGE),利用知识图谱丰富item/user的表示。
1.1 KGE算法分类
- 基于翻译距离的模型(例如TransE、TransH、TransR、TransD等):追求h + r = t
- 基于语义匹配的模型(例如RESCAL、DistMult、HolE、SME、NTN、MLP、NAM等):将h/r/t输入到网络中进行训练学习
1.2 基于embedding的方法分类(根据知识图谱中是否包含user)
- 使用item graph(即知识图谱仅由item和相关feature构成):代表方法有CKE、DKN、KSR等
- 首先利用KGE算法生成item embedding;
- 然后结合item的文本/视觉特征、user-item交互矩阵等信息构成完整的item表示;
- 最后再单独计算user表示和得分函数。
- 使用user-item graph(即知识图谱由user、item和相关feature构成):代表方法有CFKG、SHINE、DKFM等
- 先用KGE算法将user和item嵌入到同一向量空间;
- 再通过计算user和item的距离直接得到得分函数的值。
- 将KGE算法与GAN、贝叶斯框架结合:代表方法有KTGAN、BEM等
- 使用多任务学习策略联合训练推荐模块与其他任务:代表方法有KTUP、MKR、RCF等
基于embedding的方法忽略了图中的信息连通模式,通常无法为推荐结果提供解释。
2. 基于path的方法
基本思想:将知识图谱视为一个异构信息网络(user-item),考虑到user、item的连通相似性(语义相似性/结构对等性),进而提升推荐效果。其中,连通相似性的定义依赖meta-path结构(meta-path是连接两个实体的一条特定的路径)。
2.1 基于path的方法分类(根据对path的不同利用方式)
- 基于path计算连通相似度,并作为正则项优化user、item的表示。
- path可以预先指定(代表方法有Hete-MF、Hete-CF、HeteRec、HeteRec-p、FMG、SemRec等)
- path可以借助外部知识库学习得到(代表方法有RuleRec等)
- 将所有/部分可能的path嵌入到低维空间,与user、item的表示共同训练,并发现对推荐影响最显著的path(连接模式)。
- 代表性方法有MCRec、RKGE、KPRN、PGPR等
用户Alice与部分物品在知识图谱的关联图示
KPRN模型图示
基于path的方法有天生的可解释性,但早期的方法没有结合embedding的思想,对user/item的表示较为简单,准确性仍有提升空间。
3. 联合方法
基本思想:利用嵌入传播(常使用GNN)完善user、item在知识图谱中有多跳邻居的表示。其中,传播过程可以看作是在知识图谱中发现user的偏好模式,类似于在基于path的方法中发现连接模式。
3.1 联合方法分类(根据知识图谱中是否包含user)
- 使用item graph
- 基于user波纹集传播user偏好,模拟用户兴趣在知识图谱上的传播过程,提升user表示能力(代表方法有RippleNet、AKUPM等)
- 基于K阶邻居(实体波纹集)传播item属性,丰富item表示(代表方法有KGCN等)
- 使用user-item graph
- 考虑user和item的高阶交互,同时增强user和item的表示(代表方法有KGAT、KNI、IntentGC等)
联合方法结合了基于embedding和基于path的方法,兼具准确性和可解释性,逐渐成为知识图谱推荐算法的主流方法。
*在表格中,Emb代表基于嵌入的方法,Uni代表统一方法,Att’代表注意力机制,‘RL’代表强化学习,‘AE’代表自动编码器,‘MF’代表矩阵分解。
4. 结合知识图谱特征学习的推荐系统分类
前面三节是以核心技术的角度来分类,本节以训练学习的角度来分类。(分类角度不同而已,助于理解)
4.1 依次训练学习(例如DKN等)
4.2 联合训练学习(例如CKE、Ripple Network等)
4.3 交替训练学习(例如MKR等)
二、基于图网络的智能推荐(写完发现等于介绍了一遍图网络!)
1. 知识图谱表示学习KGE与图网络表示学习的异同点
2. 图网络表示学习(network representation/embedding)
- 基于矩阵分解的模型,比如SVD分解等
- 基于随机游走的模型,比如DeepWalk、Node2vec等
DeepWalk的主要思想是在由物品组成的图结构上进行随机游走,产生大量物品序列,然后将这些物品序列作为训练样本输入word2vec进行训练,得到物品的embedding。
在DeepWalk的基础上,通过调整随机游走权重的方法,使embedding的结果在网络的同质性和结构性中进行权衡。
其中,网络的“同质性”指的是距离相近节点的embedding应该尽量近似,“结构性”指的是结构上相似的节点的embedding应该尽量接近。
- 基于深度学习的模型(与下文的图神经网络呼应):CNN、RNN、AE、GNN、GCN、结合注意力、结合强化学习、结合GAN等。
3. 图神经网络
3.1 图神经网络GNN
GNN的核心观点:
- 通过节点信息(部分节点是有标签)的迭代传播使整张图达到收敛
- 在网络收敛的基础上再进行预测/分类
GNN的局限性:
- 一是没有区分不同边的功能
- 二是节点之间的状态存在较多的信息共享,导致节点的状态太过平滑,并且属于节点自身的特征信息匮乏
GNN的训练学习思路:
- 有监督:根据节点的标签信息计算损失即可
- 无监督:使用”相邻节点的编码相似“进行训练
3.2 门控图神经网络GGNN
与GNN核心的不同在于不再以不动点理论为基础。
3.3 图卷积神经网络GCN
思考如何解决图中邻居结点数量不固定的问题:
- 一是提出一种方式把非欧空间转换成欧式空间
- 二是找到一种可以处理变长邻居节点的卷积核在图上抽取信息
3.4 GraphSage
解决GCN需要存放整张图信息的问题,利用采样部分节点的方式进行学习。
3.5 图注意力网络Graph Attention Network
3.6 异质图神经网络:(与前面基于知识图谱的推荐方法呼应,细品)
3.7 后续还有图神经网络结合聚类、自编码、注意力、强化学习、GAN等
3.8 图神经网络的应用
在nlp、计算机视觉、推荐系统、强化学习、恶意检测、专业领域等都有很大的应用前景。
3.9 四大图神经网络框架
- deep graph library (DGL):支持pytorch、tensorflow
- pytorch geometric (PyG):基于pytorch
- ant graph machine learning system:蚂蚁金服团队推出的大规模图机器学习系统
- tf_geometric:借鉴pytorch geometric,创建了tensorflow版本
三、知识图谱与图神经网络的相关问题探究
1. 图神经网络是如何处理类似知识图谱的有向异构图的?
- GCN是谱域的GNN:基于谱图理论,无法天然的处理有向图。
- GAT是空域的GNN:可以天然的处理有向图,通常定义入度的节点进行聚合。
- 知识图谱和异质图都有专门设计的GNN:
- 知识图谱上的GNN关注于了对于不同关系含义的区别。
- 异质图上的GNN关注于多种不同关系的融合来更好的描述节点。
2. 知识图谱与异质信息网络的区别?
- 一般来说,知识图谱比异质信息网络包含更多的点和边类型。但并不绝对,这两个定义并没有明确的界限,很多时候都是互为替代的。
- 前文提到,知识图谱强调节点之间的关系表示,图网络强调节点的结构表示。但其实知识图谱中基于path的方法和图网络中基于随机游走采路径的方法基本没有区别。
【更新】介绍比较新的一些深度学习推荐模型改进方向:
- 引入用户行为序列建模(例如TDM/TransRec等)
- 将用户历史行为看做一个无序集合,对所有embedding取sum、max和各种attention等
- 将用户历史行为看做一个时间序列,采用RNN/LSTN/GRU等建模
- 抽取/聚类出用户的多峰兴趣,方法有Capsule等(阿里MIND提出)
- 根据业务场景的特殊需求,采用其他方法
- 引入NLP领域知识建模(例如Transformer/BERT等)
- 多目标优化/多任务学习(例如阿里ESMM/Google MMoE等)
- 多模态信息融合
- 长期/短期兴趣分离(例如SDM等)
- 结合深度强化学习(例如YouTube推荐/今日头条广告推荐DEAR等)
- 图神经网络的预训练(即引入迁移学习的思路)
- ......
本文参考了大佬的知乎专栏:https://zhuanlan.zhihu.com/p/112530121
如果你对智能推荐感兴趣,欢迎先浏览我的另一篇随笔:智能推荐算法演变及学习笔记
如果您对数据挖掘感兴趣,欢迎浏览我的另一篇博客:数据挖掘比赛/项目全流程介绍
如果您对人工智能算法感兴趣,欢迎浏览我的另一篇博客:人工智能新手入门学习路线和学习资源合集(含AI综述/python/机器学习/深度学习/tensorflow)
如果你是计算机专业的应届毕业生,欢迎浏览我的另外一篇博客:如果你是一个计算机领域的应届生,你如何准备求职面试?
如果你是计算机专业的本科生,欢迎浏览我的另外一篇博客:如果你是一个计算机领域的本科生,你可以选择学习什么?
如果你是计算机专业的研究生,欢迎浏览我的另外一篇博客:如果你是一个计算机领域的研究生,你可以选择学习什么?
如果你对金融科技感兴趣,欢迎浏览我的另一篇博客:如果你想了解金融科技,不妨先了解金融科技有哪些可能?
之后博主将持续分享各大算法的学习思路和学习笔记:hello world: 我的博客写作思路