RippleNet: Propagating User Preferences on the Knowledge Graph for Recommender Systems
Hongwei Wang, Fuzheng Zhang, Jialin Wang, Miao Zhao, Wenjie Li, Xing Xie, Minyi Guo
The 27th ACM International Conference on Information and Knowledge Management (CIKM 2018)
原文(arXiv): https://arxiv.org/pdf/1803.03467v4.pdf
源码: https://github.com/hwwang55/RippleNet (tensorflow 版本 / official) ** https://github.com/qibinc/RippleNet-PyTorch (pytorch 版本)
1 background
传统基于协同过滤 (CF) 的推荐系统算法普遍存在 数据稀疏 (用户 - 物品矩阵) 和 冷启动 两个问题,且往往难以充分利用所提供的数据,如用户社交数据(social networkds),用户 / 物品特征(user / item attributes),文本信息(context)。
为解决协同过滤带来的问题并将更多的信息(side information)引入推荐系统,利用知识图谱(KG)往往是一个能够较好地综合各类信息的选择。此时将各类实体(entity)标识为点,将实体之间的关系(relationship)标识为边(有向边,比如用户 A 关注 B 需要用有向的关系进行表示),同时考虑到存在多种不同类别的实体(可以是用户可以是物品可以是某一个tag)和不同类别的关系(用户与商品的交互,用户之间的关注关系等),构造异构信息网络,即能够较好地将不同的信息综合进入整体的信息网络。则此时一条信息可以表示为一个三元组:(头节点H,关系R,尾节点T)
利用知识图谱的推荐系统按实现思路在此分为两类:
- 基于 embedding 的方法:也就是利用知识图谱嵌入的方法(KGE)先学习到各个实体 / 关系的嵌入 = 用一定维度的向量来表示各个结点和边,再利用向量表示来进行推荐任务(比如计算某一个物品和用户以前好评的物品的相似度 // 对于两个向量这是很好处理的 // 以决定是否需要将这个物品向用户进行推荐 etc)
- embedding 的方法分为 Trans 系的方法或基于异构信息网络的方法等,(具体的建议关键字 KGE / 扫盲参考),后续推荐系统的任务基于 CF 等均可。
- embedding 的方法分为 Trans 系的方法或基于异构信息网络的方法等,(具体的建议关键字 KGE / 扫盲参考),后续推荐系统的任务基于 CF 等均可。
- 基于路径 path 的方法: 也就是将物品与用户构建为一个巨大的异构图,利用路径进行推荐(比如 meta-path / meta-graph 的方法,构建结束后再利用矩阵分解 + 分解因子机等方法进行推荐任务,参考)但是注意此时的缺点在于要人工设计 meta-graph / meta-path,繁琐是一方面,有效性或全面性本身有待商榷。
在如上讨论的基础上,本文提出了新的基于知识图谱与用户偏好传播的推荐系统:RippleNet,几个优点如下:
- 结合知识图谱表示,能够较好地综合辅助信息(side information)
- 本身是端到端(end-to-end)的模型,也就是说采用的是联合训练的思路,此时embedding的部分和下游推荐系统的部分是统一用最后的损失函数训练的,换言之可以解决(明明最后的下游问题是推荐系统,但是 embedding 部分训练实际上只是一个对尾节点的预测)所带来的不匹配的问题(这也正是依次训练的缺点,参考)
- 采用了偏好传播的思路,能够更好地挖掘用户的潜在兴趣(而不单纯只是讨论用户发生了行为的那些物品,具体通过多跳的方式实现)
- 本身针对点击预测问题,也就是给定用户和物品,预测用户是否会对物品感兴趣(本身是一个二分类问题,最后输出层应该是 softmax = 对点击概率的预测)
2 RippleNet
2.1 整体框架
注意这里还是分为 embedding 和 推荐任务 两个部分,首先给定一个物品(item)和一个用户(user),物品经过 embedding 后的向量不断地和 KG 中该用户周围 h 跳的物品的 embedding 进行交互运算(注意这里的 H = 也就是具体用到几跳的信息本质上是一个超参数,取值后面会讨论),最后组成该用户的embedding(图中灰色的 user embedding),再和前面的 item embedding 一起计算点击概率
2.2 RippleSet
定义用户 u 的第 k 跳对应相关的实体集合(直观理解就是从用户出发,向外至少需要经过 k 步所有可以达到的实体的集合),表示为: E u k = { t ∣ ( h , r , t ) ∈ G a n d h ∈ E u k − 1 } \mathcal{E}_u^k= \lbrace t | (h,r,t) \in \mathcal{G} \text{ }and\text{ }h \in \mathcal{E_u^{k-1} } \rbrace Euk={ t∣(h,r,t)∈G and h∈Euk−1}
同理定义用户 u 的第 k 跳对应的 ripple set: S u k = { ( h , r , t ) ∣ ( h , r , t ) ∈ G a n d h ∈ E u k − 1 } k = 1 , 2 , . . . , H \mathcal{S}_u^k = \lbrace (h,r,t)|(h,r,t) \in \mathcal{G} \text{ } and \text{ } h\in \mathcal{E}_u^{k-1} \rbrace \qquad k = 1,2,...,H Suk={ (h,r,t)∣(h,r,t)∈G and h∈Eu