【推荐系统】RippleNet——基于知识图谱偏好传播的推荐系统

论文名称:《RippleNet: Propagating User Preferences on the Knowledge Graph for Recommender Systems
PDF:https://arxiv.org/pdf/1803.03467
源码地址:https://github.com/hwwang55/RippleNet.


一、前言

  推荐系统(Recommender System, RS)作为最经典最重要的人工智能应用,已经在诸多行业中落地应用,例如国内外电商网站(淘宝、拼多多等)上的商品推荐、视频提供方(抖音、小红书、YouTube)的视频推荐等。在推荐系统任务中,有两个主题,分别是用户(User)和物品(Item),推荐系统的目标则是在给定一个用户的条件下,从海量的候选物品中寻找前K个推荐该用户,因此推荐也是对用户个性化的过程。

二、推荐系统

  现如今传统的推荐系统有协同过滤(CF)矩阵分解(MF)因子分解机(FM),深度学习中则将推荐演化为点击率预测(CTR)+重排序(Re-ranking)的过程。但这些传统的推荐系统方法普遍存在数据稀疏和冷启动两个问题,使得推荐效果并不如意。

数据稀疏(Data Sparsity):例如在电商环境下,有许多商品(item)是奢侈品,或刚刚上架的新品,使得其很少有人取购买;或者对于一大部分的用户并不经常浏览商品或购买商品,使得大多数的用户或商品记录是稀疏的。在协同过滤任务中,通过构建user-item表可知,大多数的元素均为0.
冷启动(Cold Start):如果基于物品的推荐(itemRS),通常是根据用户的行为历史记录来进行分析和推荐,但对于一些刚刚注册的新用户,其从未在该平台留下过任何行为记录,则无法根据传统的用户相似度等方法直接进行推荐,此时则称为冷启动。

  现如今有诸多方法以解决稀疏性和冷启动为动机,例如引入物品描述信息、用户的信息、用户在其他平台的行为记录等作为辅助信息(Side Information)。随着知识图谱的发展,将知识图谱作为辅助信息来解决上述两个问题的方法成为推荐系统的一种思路。我们归纳为两类:

  • 基于embedding的方法:通常将知识图谱使用表示学习方法进行嵌入,即将知识图谱中的实体和边用低维度的连续向量表示,然后基于这些向量进行推荐。一般思路是用知识图谱来表示物品或用户。
  • 基于路径的方法:这一类通常是将用户与物品构建成一个较大的异构图,然后通过对用户到指定物品之间的路径表示进行预测。

  我们知道,协同过滤的做法是通过一个用户-物品共现矩阵的行或列向量来表示用户或物品,并使用简单的相似度度量来返回TopK个结果;本文主要希望利用知识图谱来对用户历史行为记录以及潜在的偏好进行表示,因此将推荐视为两个过程,分别是点击率预测以及排序

   点击率预测(CTR) 是指给定一个用户和一个物品,通过特征工程或深度学习表征方法分别对用户和物品进行向量化,然后使用相似度方法预测点击率,通常为0-1之间的数。另外也可以认为是一个二分类问题,例如0表示负反馈,1表示正反馈。
   召回+排序:通常在推荐系统中,物品的个数是成千上万的,因此不可能将每一个物品分别与当前用户进行点击率预测,因此需要先在海量的数据中进行召回,即粗略筛选形成候选项后,再一一计算点击率。最后根据数值进行排序,返回TopK个结果。

三、RippleNet

  为了同时结合两者的优势,RippleNet模型被提出,其基本思想是:
  (1)像真实世界里水滴滴落水面一样,向外侧以波纹形式传播。如果每一个用户的历史点击记录就像水滴一样,则其潜在的兴趣将会向外传播,这也称作偏好传播(User Preferences propagation);
  (2)如图所示,如果一个用户看过(或给与正反馈)包括“Back to the Future”、“Cast Away”和“The Green Mile”三个电影,而“Back to the Future”是由Robert导演,“Cast Away”和“The Green Mile”由Tom主演,则根据构建的知识图谱可知,Robert还导演了“Forrest Gump”,Tom也在该影片主演,所以可以推测该用户可能喜欢“Forrest Gump”电影。

图1 基于知识图谱的电影推荐案例

  在具体了解RippleNet之前,需要先了解如何构建物品知识图谱。如下图所示,是一个电影知识图谱的样例。其中节点表示物品(Item),其可能是电影,也可能是时间,也可能是导演等。边则表示两个实体之间的语义关系,例如Forrest Gump表示电影,U.S表示国籍,两者之间的关系则是拍摄地(film.country)。因此可以使用开放领域的FreeBase,也可以根据实际使用的数据集自行构建。

图2 知识图谱

  因此读者可能要问,如何利用知识图谱来进行推荐? 我们给出形式化的描述:

  共现矩阵。 给定一个用户集合 U={u1,u2,...}\mathcal{U}=\{u_1,u_2,...\}U={u1,u2,...},和物品集合 V={v1,v2,...}\mathcal{V}=\{v_1,v_2,...\}V={v1,v2,...} ,因此给定一个矩阵 Y={yuv∣u∈U,v∈V}\mathbf{Y}=\{y_{uv}|u\in\mathcal{U},v\in\mathcal{V}\}Y={yuvuU,vV} ,其中当用户 uuu 与物品 vvv 之间存在交互信息时,yuv=1y_{uv}=1yuv=1 ,否则为 yuv=0y_{uv}=0yuv=0 。换句话说,该矩阵为采用协同过滤方法时所构建的用户-物品共现矩阵。经验来讲,该矩阵 Y\mathbf{Y}Y 是稀疏矩阵,因此推荐系统的目标则是预测那些用户与物品没有交互的部分。

  Ripple集合。如何通过知识图谱来表示用户潜在的偏好?我们首先定义Ripple集合。假设给定一个共现矩阵 Y\mathbf{Y}Y,和一个用户 uuu, 则该用户对应于共现矩阵中所有yuv=1y_{uv}=1yuv=1的物品即为历史行为记录(正反馈的物品)。我们记做 Eu0=Vu={v∣yuv=1}\mathcal{E}^{0}_{u}=\mathcal{V}_u=\{v|y_{uv}=1\}Eu0=Vu={vyuv=1} 。因此该集合 Eu0\mathcal{E}^{0}_{u}Eu0 内所有的实体对应于知识图谱中记为一个种子(Seed),每个种子可作为起点并向邻近的其他实体进行传播,每次传播记为1跳,则第k跳对应的实体集合表示为

Euk={t∣(h,r,t)∈G,h∈Euk−1}\mathcal{E}^{k}_{u} = \{t|(h,r,t)\in\mathcal{G},h\in\mathcal{E}^{k-1}_{u}\}Euk={t(h,r,t)G,hEuk1}

其中 G\mathcal{G}G 表示一个知识图谱,(h,r,t)(h,r,t)(h,r,t) 则为一个三元组,其中 hhhttt 为头实体和尾实体,rrr 表示二者之间的有向关系。根据这个集合,我们可以定义Ripple集合:

Suk={(h,r,t)∣(h,r,t)∈G,h∈Euk−1}\mathcal{S}^{k}_{u} = \{(h,r,t)|(h,r,t)\in\mathcal{G},h\in\mathcal{E}^{k-1}_{u}\}Suk={(h,r,t)(h,r,t)G,hEuk1}

简单的来说,Euk\mathcal{E}^{k}_{u}Euk 表示该用户 uuu 所有历史记录对应的实体所有第k跳对应的实体的集合,而 Suk\mathcal{S}^{k}_{u}Suk 则表示所有第k-1跳与第k跳对应的三元组。因此前面所谓的“偏好传播”则是通过集合 Suk\mathcal{S}^{k}_{u}Suk 体现,随着k的增大而向外传播,就像水面上的波纹一样。

特殊说明的是,当 k=0k=0k=0 时,对应的实体 Euk\mathcal{E}^{k}_{u}Euk 则表示用户的历史行为数据(显式正反馈的物品),而当 k>0k>0k>0 时,则是潜在的偏好。

  实体表示。知识图谱的表示我们可以使用基于Trans系列的方法(例如TransE、TransH等),也可以使用语义匹配(Semantic Matching)方法,例如ComplEx、DisMult等。为了能够充分反映每一个实体在图中的语义关系,我们使用基于张量分解的方法。

  模型架构。RippleNet的整体架构如下图所示:

图3 模型架构图
  1. 首先给定一个用户 uuu,一个物品 vvv 的表示 v\mathbf{v}v, 历史记录(Seed) Su0\mathcal{S}^{0}_{u}Su0以及构建好的知识库 G\mathcal{G}G。首先进行第一次传播
    (h,r)→t(h,r)\rightarrow t(h,r)t ,即 k:=1k:=1k:=1 (“ := ” 表示赋值);
  2. 获得第 k=1k=1k=1 跳的的潜在偏好 Su1\mathcal{S}^{1}_{u}Su1, 将所有对应的尾实体 ttt 与当前的物品 vvv 进行相似度计算后加权求和,公式为:
    ou1=∑(hi,ri,ti)∈Su1piti\mathbf{o}_u^1 = \sum_{(h_i,r_i,t_i)\in\mathcal{S}_u^1}p_i\mathbf{t}_iou1=(hi,ri,ti)Su1piti
    其中 h,t\mathbf{h,t}h,t 表示头尾实体的向量表示,权重 pi=softmax(vTRihi)p_i = softmax(\mathbf{v^{T}R}_i\mathbf{h}_i)pi=softmax(vTRihi) 表示 Su1\mathcal{S}^1_{u}Su1
    中每一个潜在的偏好物品与当前物品的相似度权重,R\mathbf{R}R 为关系矩阵。直观的理解即为如果当前跳内的物品与目标物品 vvv
    越相似,则分配权重越大,如果恰巧 vvv 就在Su1\mathcal{S}^1_{u}Su1 中,则说明其越有可能被推荐。
  3. vTRihi\mathbf{v^{T}R}_i\mathbf{h}_ivTRihi 替换为 ou1\mathbf{o}_u^1ou1,执行与1,2相同的步骤,此时 k:=k+1k:=k+1k:=k+1

  如图3所示,经过一共 HHH 次传播,则可以形成 HHH 个向量 o\mathbf{o}o, 每一次传播形成的这个向量可以代表当前偏好传播所挖掘的潜在物品,但由于每一次的输入向量都是上一次的输出,则可知随着传播跳数的增加,其与目标物品的相关性也会逐渐减弱。

  最后我们将这 HHH 个向量求和形成用户向量,即

u=ou1+ou2+...+ouH\mathbf{u} = \mathbf{o}_u^1 + \mathbf{o}_u^2 + ... + \mathbf{o}_u^Hu=ou1+ou2+...+ouH

点击率预测则为 y^uv=σ(uTv)\hat{y}_{uv} = \sigma (\mathbf{u^Tv})y^uv=σ(uTv)

  训练策略。下面给出整个算法的流程(梯度更新)。

  由于模型的输出为回归值,则使用二元伯努利分布作为损失,其次模型中可微调知识图谱表示,则额外加入张量分解损失,最后加入正则化防止过拟合。损失函数定义为:

四、讨论

  在实际的实验中,我们需要注意几点:
(1)如何构建这样的知识图谱?
  我们挑选了三个公开数据集 MovieLens-1M、Book-Crossing和Bing-News,其统计信息如下:


  为了构建知识图谱,根据三个数据集,分别构建了其出现的所有物品及相关属性,使用实体链接工具,以及Microsoft Satori工具。

(2)如何选择 HHH 值(最大跳数)?

  事实上,如果跳数太大,则可能有的用户的历史记录较多,其包含的实体数量过于庞大,不利于模型的运算,同时跳数过大,诸多实体可能会重叠,同时也可能引入大量的噪声;如果跳数过小,则有可能挖掘的候选物品很少,使得推荐的效果很低。因此我们给出四种策略:

  • 大量的实体往往只有入边而没有出边;
  • 在具体的推荐场景中,可以限定关系的类型。例如电影推荐,只保留与电影有关的类型的边,从而减少三元组数量;
  • HHH 的选取(跳数)不宜太大;
  • HHH 每一跳时,可以采用固定数量的采样,而不是全部选择向量的三元组。

我们可以通过实验来选择合适的 HHH, 如图所示:


  图(a)、(b)和(c)分别表示三个数据集,对应任意两个物品作为种子时,其对应跳数内实体重叠的比率。我们选择比率刚好突增时对应的跳数。三个数据集上分别选择2,3,3。

  更详细的实验请阅读原文:https://arxiv.org/pdf/1803.03467


  博客记录着学习的脚步,分享着最新的技术,非常感谢您的阅读,本博客将不断进行更新,希望能够给您在技术上带来帮助。

【推荐系统】RippleNet——基于知识图谱偏好传播的推荐系统相关推荐

  1. 【推荐系统】基于知识图谱的推荐系统总结

    | 作者:阳光明媚 | 单位:华东师范大学 | 研究方向:推荐系统.强化学习 摘要 推荐系统的基本任务是联系用户和物品,解决信息过载的问题,帮助用户找到其感兴趣的内容.个性化的推荐系统更是可以为用户推 ...

  2. 深度融合 | 当推荐系统遇见知识图谱(三)

    NewBeeNLP原创出品 公众号专栏作者@上杉翔二 悠闲会 · 信息检索 本篇文章继续整理『推荐系统+知识图谱』这个lineup的后续,主要是2020年SIGIR,CIKM,RecSys的相关文章. ...

  3. 文献学习(part11)--基于知识图谱的推荐系统研究综述

    学习笔记,仅供参考,有错必纠 文章目录 基于知识图谱的推荐系统研究综述 摘要 引言 研究背景 推荐系统 基于内容的推荐算法 基于协同过滤的推荐算法 混合推荐算法 知识图谱 为什么应用知识图谱在推荐系统 ...

  4. 基于知识图谱的学术资源推荐系统设计与实现

    着大数据时代到来,人们逐渐从信息缺乏的时代走向了信息过载的时代.如今,学术资源每年以亿数量级增长,这给用户(科研人员)的学术研究提供了宝贵的资源财富.但与此同时,大量的资源也使得如何使用户获取自己感兴 ...

  5. 基于知识图谱的推荐系统总结

    猜你喜欢 0.2021年10月热门报告盘点:<2021年轻人性生活报告>稳居榜首! 1.如何搭建一套个性化推荐系统? 2.内容推荐策略产品经理的方法与实践 3.京东推荐算法精排技术实践 4 ...

  6. 基于知识图谱的推荐系统综述

    基于知识图谱的推荐系统综述 作者信息 Elesdspline 目前从事NLP与知识图谱相关工作. 导语 本文是2020年针对知识图谱作为辅助信息用于推荐系统的一篇综述.知识图谱对于推荐系统不仅能够进行 ...

  7. 基于知识图谱的推荐系统(KGRS)综述

    导语 本文是2020年针对知识图谱作为辅助信息用于推荐系统的一篇综述.知识图谱对于推荐系统不仅能够进行更精确的个性化推荐,而且对推荐也是具有可解释性的,有迹可循. 本文汇总了近些年来知识图谱辅助推荐系 ...

  8. 基于知识图谱的推荐系统(一):综述

    一.背景介绍 推荐系统的基本任务是联系用户和物品,解决信息过载的问题,帮助用户找到其感兴趣的内容.个性化的推荐系统更是可以为用户推荐专属的物品目录,尽可能满足用户的个性化需求.但是推荐系统也面临一些挑 ...

  9. TKDE 2020 | 综述:基于知识图谱的推荐系统

    TKDE 2020 综述:基于知识图谱的推荐系统 A Survey on Knowledge Graph-Based Recommender Systems 中科院计算所.百度.港科大.中科大.微软 ...

最新文章

  1. linux 指定库名 登录mysql_linux下对应mysql数据库的常用操作
  2. 质量追溯和防窜货管理解决分析
  3. OpenCV视频加速Video acceleration的实例(附完整代码)
  4. C++ STL : 模拟实现STL中的vector类
  5. 仓库移动_移动式仓库、检修作业平台、储油柜胶囊破裂检测装置……这场科技秀超燃!...
  6. 基站位置查询系统_木牛导航网络基站服务免费了!——更便捷、更高效、更省心!...
  7. Js获取当前页面URL各种参数
  8. Magicodes.IE 2.3重磅发布——.NET Core开源导入导出库
  9. 动态给实例添加属性和方法
  10. 红包指定分配金额php,php仿微信红包分配算法的实现方法_PHP
  11. Android学习笔记之ListView与Item的焦点冲突处理
  12. Windows下Mysql定时备份的实现
  13. 青云QingCloud打造云端ICT服务 实现战略全面升级
  14. oracle11g 卸载步骤
  15. UBUNTU配置samba
  16. C++输出全排列递归算法详细解释
  17. 【集合论】容斥原理 ( 包含排斥原理 | 示例 )
  18. 计算机网络—IP地址及其表示方法
  19. 服装行业ERP系统有哪些基本功能?
  20. Unity 之 ShaderGraph Input节点解析汇总

热门文章

  1. Obsidian安卓端app教程
  2. 最接近win7的Linux系统,Windows7Vs.Linux——操作系统大PK
  3. 暗黑2魔电西格玛攻略_魔电西格玛,暗黑2最佳继承者-1949游戏测评
  4. Web大学生网页作业成品——仿腾讯游戏官网网站设计与实现(HTML+CSS+JavaScript)
  5. 4G基带模块使用总结
  6. word流程图怎么使箭头对齐_工作流程图的方框怎样平均纵横对齐:又怎样 让箭头对齐到流程图方框线中间,请教了。...
  7. 系分 - 操作系统 - 嵌入式
  8. Longhorn Reloaded M1
  9. 线性代数---魏福义版 第一章习题答案
  10. c语言中对用户乱输入信息处理,C语言程序设计教程 第06章.ppt