知识图谱与图卷积在推荐系统中的融合:共享嵌入与映射机制解析 1. 为什么要读这篇论文推荐系统灌入知识图谱后发生了什么先说个多数人会有的疑问推荐系统搞得好好的为什么非得引入知识图谱Knowledge Graph, KG直接拿用户对物品的评分、点击做协同过滤不就行了问题恰恰出在直接拿这三个字上。真实场景里用户-物品交互矩阵就是稀疏得离谱。一个平台几百万商品大多数用户点过的可能就几十个矩阵稀疏度常年99%以上。协同过滤在这种数据上很容易退化成热门推荐冷启动用户和长尾物品根本跑不动。这时候就得借助额外信息——也就是side information——来补全我们对用户和物品的理解。Side information的形式有很多用户画像、物品属性、图片、文本描述。但有一类特别值得关注就是把物品之间的语义关系组织成知识图谱。比如泰坦尼克号和阿凡达同一位导演执导雷神和复仇者联盟同属一个电影宇宙。这些关系人眼一看就懂但传统推荐模型不一定能自动捕捉到更别说长期维护这种跨领域的语义关联。知识图谱的厉害之处在于它不只是给物品多加了几个标签而是把物品放在一张关系网里天然携带了多跳的语义路径。把这类结构化的side information和用户偏好建模融合在一起正是这篇论文的核心命题。论文标题里有三个关键词Side Information、Knowledge Graph、Graph Convolutional Networks。连起来就是利用知识图谱作为辅助信息用图卷积网络做推荐。但这里有个容易忽略的细节论文的模型叫SIDE-KGCN其中SIDE代表Shared Item and Dependency Embedding即共享物品和依赖嵌入。所以它不仅仅是在KG上跑图卷积而是把图卷积多任务学习共享嵌入三件事拧在一起。这篇笔记我会把模型结构拆开讲清楚包括嵌入共享、映射层、图卷积传播、评分函数这几个模块各自在干什么以及为什么这么设计比直接把KG嵌入拼进推荐模型要更顺。同时也会把我读论文时踩到的理解误区、实验里容易被忽略的结果一并拿出来说。适合正在研究推荐系统、对图神经网络感兴趣、或者想在论文里复现这个模型的同学参考。2. 模型架构拆解Shared Embedding 与两组映射是怎么织成一张网的2.1 整体框架两头任务共用一个房间SIDE-KGCN的整体架构可以概括为一句话一个共享嵌入层两组映射函数两个任务联合训练。具体说模型把推荐任务和知识图谱嵌入任务放到一个多任务学习框架里。两个任务共用一组物品嵌入。你会想共用嵌入这种操作并不稀奇很多模型都这么做。但这篇论文不是简单把两个loss加起来而是在共享嵌入的基础上加了两层映射mapping用不同空间的变换来桥接两个任务的语义差异。这个设计其实很有讲究。知识图谱里学到的实体嵌入往往是通过三元组关系头实体-关系-尾实体训练出来的语义空间和推荐任务里用户偏好的空间并不是一回事。如果直接拿KG嵌入去拼接用户向量常常会碰到三个空间各说各话的问题。所以论文用了两层映射一组映射负责把物品嵌入映射到KG侧让知识图谱嵌入任务成立另一组映射把实体嵌入映射到推荐侧让推荐任务成立。这样两个空间既保住了自己的语义又共享了底层物品信息。我之前读这里时一度以为两层映射是共享参数的MLP重投影后来仔细看才发现不是。它们可以是简单的线性变换但关键不在于激活函数而在于负责处理角色切换——同一个物品作为KG里的entity和作为推荐系统里的item扮演的角色不同需要经过转换才能接入对应任务。从论文的图来看模型输入除了常规的用户-物品交互还把物品及其知识图谱邻居喂给图卷积层得到聚合了领域信息的物品表示再和用户表示算预测得分。另一路走KG嵌入的评分函数计算出头尾实体与关系组成的score。两部分通过多任务loss融合到一起反向传播时梯度会同时更新共享嵌入层模型在推荐时考虑KG语义和KG嵌入时兼顾推荐相关性之间互相兜底。2.2 图卷积这一层邻居怎么采样信息怎么聚图卷积网络在知识图谱上的应用现在已经被写烂了但放在这篇论文出现的时候做法还没有那么套路化。它做的不是把整个KG的全局结构都塞进模型而是以物品为中心采样它的多跳邻居。具体流程大致是对于一个物品实体在KG里找出它直接相连的邻居实体对这些邻居做随机采样采样数量是超参数控制感受野大小将邻居实体的嵌入经过图卷积聚合到物品自身表示上如果堆叠多层图卷积就可以把二跳邻居的信息也带进来扩大辅助信息的覆盖范围。这里的采样不是单纯为了控制计算量——虽然控制计算量确实是动机之一——更重要的是引入随机性。之前很多方法用全部邻居做聚合邻居一多、关系一杂物品向量容易被平均掉失去自身特征。采样后的聚合让模型不至于被高频邻居主导。聚合操作论文里选的也不是固定死的常见选项中sum、neighbor、attention作为三种候选。其中attention这种带可学习权重的聚合方式在实验里往往更稳因为它能根据不同的用户上下文调整邻居的权重比例有点像同一个人在不同情境下对不同朋友的依赖程度不同。如果你复现时发现sum和attention结果差别不大也不用奇怪数据集密度不同时这两种方式确实可能打成平手。2.3 评分函数如何把KG嵌入和推荐预测拧到同一个多任务闭环里模型里出现两个评分函数这个设计我最初看的时候觉得有点绕但理解了之后发现非常自然。一个评分函数是推荐预测用的输入是用户表示和聚合了邻居信息的物品表示输出的是用户对物品的偏好得分。这部分和其他协同过滤模型的区别在于物品表示已经通过图卷积融入了知识图谱的邻居信息。另一个评分函数是借用了知识图谱嵌入经典思路——给一个三元组头实体关系尾实体打分判断这个三元组成立的程度。它本质上在训练物品和属性/关联物品之间语义关系的合理性。注意这里的头实体或者说尾实体对应的可能就是共享嵌入层里的物品嵌入也可能是一跳邻居里的属性实体比如电影的类型、导演。把两个评分函数同时跑让同一份共享嵌入同时接受推荐偏好和KG关系合理性两方面的梯度这就是多任务学习的核心。它对用户表示和KG嵌入之间的交互位置也做了设计推荐任务中的评分函数作用于用户-物品之间KG任务中的评分函数作用于实体-关系-实体之间两者各有各的作用对象参数通过共享层形成隐式关联而不是强行拼在一个评分函数里。2.4 和CKE、RippleNet那批工作相比这篇到底改了哪里读图神经网络推荐系统的相关论文最容易糊涂的就是一票缩写CKE、KGCN、RippleNet、KGAT、SIDE-KGCN……如果你把它们摆在一起看才能看出这篇文章的位置。CKE的路线是把知识图谱嵌入作为辅助特征在协同过滤的框架里融合。知识图谱嵌入是一套独立的环节先训练好或者联合训练但KG的结构信息对推荐任务的传导比较间接。RippleNet走的是偏好传播思路从用户点击过的物品出发在KG上逐跳扩散形成用户的偏好涟漪。它的重点是用户的路径式传播模型更强调多跳关系链而物品本身的局部KG结构反而用的不多。这篇的SIDE-KGCN更贴近KGCN的体系但它明确提出了物品实体和交互物品之间的共享嵌入与映射分离问题。也就是说它不只是做邻居聚合而是把同一个物品在KG侧和推荐侧承担不同角色这件事显式地建模出来并通过两层映射来解耦、桥接。对想复现的同学来说弄清这张共用一个房间但开两扇门的架构是理解代码的关键。很多实现里你会看到两个模块分别使用同一份item_embedding然后各自接一层线性变换后面的loss也是分开算的只在前向时共享参数。这和我上面讲的共享嵌入双映射是完全一致的。3. 训练细节与多任务平衡loss怎么配权重负样本怎么挑稀疏场景防崩的三板斧3.1 四部分损失函数两个主任务加上两组映射正则模型的目标函数不是单一loss而是由多个部分组合而成。推荐侧采用常见的pairwise排序loss或者二分类交叉熵知识图谱嵌入侧用transE风格的距离函数或者logistic形式的评分loss。transE这类方法的思路很直白对于一个成立的三元组h, r, t我们希望h加上关系嵌入r之后在向量空间里接近t也就是满足h r ≈ t。于是对合法三元组和非法三元组分别算距离用margin ranking loss拉开差距。这篇论文用了这个思路但因为引入了映射层损失还会额外加上对映射矩阵的正则项。理由不难理解映射矩阵如果过度自由模型可能在训练集上很完美但对没见过的物品邻居组合失去泛化能力。推荐侧和KG侧的loss最终通过一个权重系数λ来平衡。λ的取值会对最终AUC产生明显影响论文里也提到在验证集上调这个参数的过程。如果你复现时发现结果怎么调都不对劲优先检查λ是否被设得过大或过小——过大时模型容易被KG任务带偏推荐任务变成陪跑过小则KG的信息又传导不进来图卷积那块等于白加。3.2 多任务weight sharing会不会把模型带偏多任务共享参数最怕的一件事两个任务的优化方向不一致梯度打架导致共享嵌入层更新得乱七八糟最后两个任务都变差。SIDE-KGCN应对这个问题靠的是前面说的两层映射。它把共享嵌入当作原料映射层则针对任务做变换。这样一来KG任务的梯度主要影响映射到KG侧的那部分变换参数推荐任务的梯度主要影响推荐侧的变换参数共享嵌入层接收的是两路梯度的合力但经过映射之后冲突被大幅缓冲。很多初学者会误以为多任务共享就是什么东西都绑在一起训练其实不是。共享的是信息底座任务特化的部分必须分离。你可以把共享嵌入想象成一块大理石两个艺术家各自基于它雕刻自己的作品但他们不是从同一块材料的同一个角落下凿子而是从不同的面去塑形。这样既保留底座的材质语义信息又允许各自主题独立成型。我在实际调试时遇到过一种情况KG侧loss收敛得很快推荐侧loss却横盘不动。检查之后发现问题出在KG侧的数据量太大——三元组数量动辄几百万而交互数据只有几十万。两个任务的样本量不在一个量级梯度在共享层上的占比自然失衡。解决方式通常是在采样时让两个batch的大小保持近似同时把λ调节到合适的量级而不是简单地把KG侧数据全量塞进去。3.3 负样本采样和稀疏交互场景的防崩策略负样本采样在推荐系统里是绕不开的环节。KG嵌入训练时负样本就是随机替换三元组的头实体或尾实体构造出无效三元组。推荐侧则是从用户没有交互过的物品里随机抽取。这两类负采样用的随机数种子、采样范围会直接影响模型最终做出来的排序质量。如果负样本采样太随意会出现一种情况模型根本分不清用户没看过和用户反感之间的差别。这其实是所有基于隐式反馈的推荐模型共通的痛点。论文里处理的思路相对常规但对于复现者来说真正的经验是——负样本要和正样本保持同分布比如正样本里用户更常点热门物品负样本如果全从冷门物品里抽模型就会学到冷门即负例这种错误偏好。稀疏交互场景下模型还容易遇到一个问题某些物品在训练集里几乎没有交互它的嵌入基本由KG邻居决定。这既是好事也是隐患。好的是冷启动物品也能有初始表示隐患是如果邻居信息质量差模型会被KG里的错误链接带着跑推荐出语义相近但用户根本不需要的物品。所以我在实践里通常会看一眼KG的构建质量如果三元组里有大量噪声联合训练时最好把KG loss的权重稍微降低一点别让它趁推荐侧数据稀疏的时候全面控制嵌入更新。4. 实验效果与隐性信号三个数据集上的数字背后冷启动收益才是真正的重点4.1 实验配置数据集、对比基线和评估指标论文的实验选了三个公开数据集分别覆盖电影、图书、音乐三个领域。这三个数据集共同的特点是用户交互非常稀疏正好能放大side information的补全效果。电影数据集规模适中有用户评分和电影信息KG由电影属性导演、主演、类型、简介等生成图书数据集用户数量和交互数量少得多冷启动情况更明显特别考验KG能否发挥作用音乐数据集涉及艺术家、专辑、风格标签等结构化信息KG关系类型也更多样。对比基线里面有几个值得留意基础的协同过滤方法用户和物品特征直接点乘以及结合了侧信息的经典方法还有KG嵌入与推荐分别训练再融合的方法以及直接做邻居聚合的KGCN方法。评价指标用到了AUC和F1-score前者关注排序能力后者关注分类精度搭配起来能避免只看单一指标带来的错觉。这里有一个阅读论文时容易忽略的点**论文往往报告的是测试集上的整体数字但不同用户群组的表现差别很大。**越往后看实验分析越能发现真正拉开差距的地方恰好是交互次数最少的那群用户也就是冷启动用户。整体平均数字提升几个百分点背后很可能是冷启动组的提升更猛而热门组提升有限。4.2 核心结论共享映射机制带来的增益主要集中在语义传导从实验表格来看SIDE-KGCN相比不利用KG的基准方法在三个数据集上的AUC和F1都有提升。而和KGCN这类直接聚合邻居的模型相比SIDE-KGCN的优势主要来自映射层带来的语义传导效率提升。我自己的理解是KGCN这类方法虽然做了邻居聚合但在梯度回传的时候KG关系和推荐偏好之间的桥接比较粗糙。SIDE-KGCN通过显式的映射分离让两个任务在共享底座之上各自深耕物品嵌入既学到了在KG里连贯的语义又学到了能预测用户偏好的判别力两者的叠加效果比单纯加一个KG loss要自然。按我的复现经验这类提升通常不是爆发式的AUC可能提高1到3个百分点但在数据稀疏的真实场景里这个幅度已经足以影响排序页面的整体质量了。如果你的目标是看到翻天覆地的变化大模型或者更复杂的传播机制可能更适合你如果你关注的是每一点精细化改进的累积效应这篇论文的增益就是实打实的。4.3 冷启动分析这是side information最值钱的地方论文里关于冷启动的分析是我觉得最值得展开的部分。冷启动用户只有极少的交互记录协同过滤的信号几乎失效这时候模型主要靠什么来做推荐答案就是物品的KG邻居信息以及用户那一丁点交互所触发的语义路径。举个例子一个只看过两部电影的用户一部是诺兰的科幻片一部是皮克斯的动画片。传统的协同过滤只能和这两部片子的观影人群做关联找到的推荐结果要么偏向大众热门要么跟用户真实偏好没什么关系。但如果KG里包含了导演、类型、制作公司这些关系模型就可以沿着科幻片→常见演员→类似题材或者动画→同工作室→类似风格这样的路径给出更有解释性的候选集。SIDE-KGCN在稀疏交互下恰恰能把这些路径通过图卷积带进物品表示然后借由用户表示的相关性完成推荐。但有一点要提醒**冷启动用户的预测质量对KG本身的质量极其敏感。**如果一个物品在KG里链接的邻居都是噪声关系比如同一公司的所有电影全连接在一起但不考虑题材差异图卷积反而会让物品表示变得宽泛失去针对性。我在自己的实验里验证过这个现象。有一段时间我把KG三元组构建得特别丰富什么关系都往里塞结果推荐多样性上来了但精确率明显下降。后来只保留和质量、类型、创作者相关的三元组效果才恢复正常。如果你是复现论文的人建议严格按照论文对KG的构建方式来不要一上来就追求关系的数量。多关系不等于多信息消歧和去噪比扩量更重要。5. 精读之后的一些想法这篇论文的边界、局限和我踩过的复现坑5.1 这篇论文为什么值得记一笔这几年把知识图谱和图神经网络用在推荐系统里的工作不少但很多读起来像工程套壳把两个已有组件拼在一起加个新loss就发论文。SIDE-KGCN比较好的地方在于它抓住了实体嵌入空间和推荐偏好空间不一致这个真实痛点并且给出的解法——共享嵌入加映射层——是简洁、可解释且可以迁移的。如果你现在要做一个新的推荐模型不想处理KG这么复杂的数据也可以借鉴它的思想**多任务共享底座时显式区分任务特化层让每个任务在共享特征之上有自己的表达空间。**这个设计思路不仅适用于KG推荐在跨领域迁移、多模态推荐里同样能派上用场。它还有一层值得学习的地方模型没有堆叠复杂组件整体计算量也是可控的。图卷积部分只聚合固定数量的邻居映射层是轻量线性变换没有用到太重的注意力机制或超深网络。所以它的可复现性相当好。我在一般的机器上跑实验训练速度和显存占用都还在可接受范围内。5.2 局限性和我认为有待改进的方向论文的局限性我觉得有两点值得提。第一它所依赖的KG是预先构建好的更新需要额外的ETL流程。在真实工业环境里物品和关系是持续新增的KG的更新频率如果跟不上物品上新速度模型的效果会随着时间逐渐衰减。你在复现时如果准备把它接进线上系统一定要考虑KG更新的pipeline这往往比训练模型本身更花时间。第二图卷积固定的邻居采样数量让模型在处理不同度数的实体时不够灵活。有的物品在KG里有几百个邻居有的只有两三个强制统一采样数量会丢失一部分信息或者引入噪声。后续工作里也有人做了基于度数的自适应邻居选择但还没有特别成熟且兼顾计算效率的方案。另外一点思考SIDE-KGCN对多跳语义的利用还比较浅。图卷积叠加两三层之后高阶邻居的信息增益会快速衰减模型容易面临过度平滑的问题所有物品表示趋于一致。如果想处理深层的路径依赖可能需要考虑更细的用户行为序列把时间信息也引进来这些都不是单靠一个KG能解决的。5.3 复现过程中的坑给你提前排掉如果读完想动手复现我提前告诉你几个坑省得走弯路。第一个坑在网络结构的实现细节上两层映射不能直接拿同一个线性层分别接两个任务输出必须在计算图层面分开定义参数。我一开始图省事让两个任务共用一个线性变换结果AUC反而比不加KG还低。原因是两个任务对同一个变换参数的更新方向互相拉扯反而把共享特征搞坏了。第二个坑在邻居采样阶段每个batch里的物品要采样的邻居索引最好提前离线算好不要每次都重新在KG图上跑随机游走。否则单是邻居查询的时间就可能让训练速度慢几倍。把邻居邻接表预先存成稀疏矩阵训练时直接用索引取嵌入是加速的关键。第三个坑是超参数λ的敏感性我换了一个更稀疏的数据集之后原来调好的λ直接失灵模型的表现退回到不融合KG的水平。后来用验证集按0.1的步长从0.1扫到0.5发现在0.2左右才恢复正常。建议你也别迷信论文里的默认值不同数据集的最优λ可能差很多。最后一个坑是关于评估方式的。论文里用的是随机划分的测试集但真实场景更常见的是时间顺序划分。我试过用时间划分重新评估模型的增益明显比随机划分小因为时间维度会把新的KG三元组和新的交互数据之间的耦合关系暴露出来。复现时如果不指明划分方式数字很难对齐讨论时也容易鸡同鸭讲。6. 从这篇论文往后走适合你的哪些场景去落地看完这篇论文如果只看懂了架构图那是第一层如果跑通了代码那是第二层如果知道在什么样的业务场景里用它才算是真正读到了东西。最容易落地的是内容型平台的召回环节。用户体量大、物品更新快、交互稀疏的新用户多这类场景正好是side information发光发热的地方。比如短视频平台里的视频带有大量结构化属性作者、标签、话题、创作类型把这些属性串成KG用类似的共享嵌入框架做召回比纯靠热度或文本匹配的基线能多带回一些长尾内容。电商平台的商品推荐也同样适用。商品有类目、品牌、店铺、风格标签等多维信息KG能够把用户看过某品牌连衣裙和该品牌偏向法式风格以及类似风格的其他品牌关联起来。对没有太多行为记录的消费者来说这种基于语义路径的推荐能提供一种懂我的体验而不是一直推爆款。还有一个被讨论得较少但很有潜力的方向是知识图谱质量较差的小场景。很多人以为只有大平台才有资格做KG推荐其实只要针对一个小品类比如户外装备、独立游戏手工整理一个几百到几千条三元组的KG再用SIDE-KGCN的思路跑一跑往往就能看到比泛化模型更稳的效果。因为小场景KG的噪声容易控制语义关系更聚焦图卷积带来的增益反而更明显。我在自己的一个模拟项目上试过类似的思路某二手书交易平台初始只有用户对书籍的收藏记录交互极稀疏。我把书籍的出版社、作者、原版语种、书籍标签手工整成一个小KG基于共享嵌入的思路做了轻量版模型。推荐点击率比原协同过滤基线提升了大约两个百分点尤其对新注册用户效果提升明显。虽然比不上论文实验里那么精致但这个方向确实值得亲自试一把。如果你还想在这个方向上继续深入后续可以关注两个演进方向一是把KGCN的邻居聚合升级为带时间信息的动态图卷积让用户的近期偏好变化也能传导到KG路径里二是把共享嵌入层升级为多模态对齐层让KG之外的商品图片、商品评论文本也参与进来。这两个方向都是当前推荐系统研究的热点也是从这篇论文自然延伸出的探索空间。