图神经网络(GNN)怎么用在推荐系统里?

🚀 本文收录于Github:AI-From-Zero 项目 —— 一个从零开始系统学习 AI 的知识库。如果觉得有帮助,欢迎 ⭐ Star 支持!

by @Laizhuocheng


一、简介:推荐系统的"社交困境"

想象你刚搬到一个新小区,想找个靠谱的理发店。

传统推荐就像问物业要了一份"小区最受欢迎的店铺榜单"。榜单上的店确实不错,但问题是——这些店可能离你很远,或者风格根本不适合你。更尴尬的是,榜单上全是开了十年的老店,新开的精品小店根本没有机会被推荐。

这就是传统协同过滤的困境:它只看"谁买了什么",却看不到"谁和谁是朋友"、“哪些商品其实很像”。它把用户和商品当成孤立的点,忽略了它们之间丰富的连接关系。

**图神经网络(GNN)**的出现,彻底改变了这个局面。它把推荐问题看作一个图结构问题:用户是节点,商品是节点,点击、购买、收藏等行为是边。通过"消息传递"机制,GNN让每个节点都能"听到"邻居的声音,从而发现那些隐藏在连接背后的深层关联。

就像你在新小区找理发店时,不是看榜单,而是问邻居:"你平时在哪剪头发?"邻居再告诉你:"我朋友推荐了一家新开的店,手艺特别好。“这种"朋友的朋友的推荐”,往往能发现算法榜单永远找不到的宝藏店铺。


二、什么是图神经网络推荐

图神经网络推荐(GNN-based Recommendation)是指利用图神经网络技术,将用户、商品及其交互关系建模为图结构,通过消息传递机制学习节点的高阶表示,从而进行个性化推荐。

核心思想

传统推荐系统把数据看成一张表格:行是用户,列是商品,单元格是评分或交互记录。这种视角虽然直观,但丢失了大量结构信息。

GNN推荐则把数据看成一张

  • 节点:用户、商品,甚至商品属性(品牌、类别、标签)
  • :用户行为(点击、购买、收藏)和商品关系(同品牌、同类别)
  • 邻居:与当前节点有直接连接的其他节点

举个生活中的类比

想象一个社交聚会。传统推荐就像你只看每个人的名片(姓名、职业),然后猜测谁可能合得来。GNN推荐则像你真的参加聚会,和每个人聊天,了解他们的朋友是谁、有什么共同爱好。通过几轮交流,你不仅能认识在场的人,还能推断出"朋友的朋友"可能是什么样的人。

为什么图结构更适合推荐

推荐系统本质上就是一个关系预测问题:给定一个用户,预测他会和哪些商品产生交互。而图结构天然适合表达关系:

  1. 用户-商品交互 → 二部图的边
  2. 用户相似性 → 共同购买的商品越多,用户节点越接近
  3. 商品相似性 → 被同一批用户购买,商品节点越接近
  4. 高阶连接 → 用户A买了商品X,商品X也被用户B买,用户B买了商品Y → 可以把Y推荐给用户A

这种"朋友的朋友"的间接关联,正是传统方法难以捕捉的。


三、GNN推荐如何工作

1. 图构建:把数据变成网络

第一步是把原始数据转换成图结构。以电商推荐为例:

节点类型

  • 用户节点:每个注册用户
  • 商品节点:每个SKU
  • 属性节点:品牌、类别、标签等

边类型

  • 用户-商品边:点击、加购、购买、收藏(不同行为可以设置不同权重)
  • 商品-商品边:同品牌、同类别、经常一起购买
  • 用户-用户边:好友关系、关注关系(如果有社交数据)

边的权重设计

点击:权重 = 1
加购:权重 = 3  
购买:权重 = 5
收藏:权重 = 4

这样,购买行为的信号就比点击强5倍,更符合业务逻辑。

2. 消息传递:邻居的信息流动

这是GNN的核心机制。想象每个节点都在"广播"自己的特征,同时"收听"邻居的广播。

单层消息传递的过程

  1. 聚合(Aggregate):收集邻居节点的特征

    • 用户节点收集他交互过的所有商品特征
    • 商品节点收集所有购买过它的用户特征
  2. 更新(Update):结合自身特征和聚合的邻居特征,生成新的表示

    • 新表示 = 自身特征 + 邻居信息
  3. 传播(Propagate):把更新后的特征传递给下一层

类比理解

想象你在一个会议室里,每个人手里有一张写着自己爱好的纸条。

  • 第一轮:你和周围的人交换纸条,了解他们的爱好(聚合邻居信息)
  • 第二轮:你把这些信息和自己的爱好结合起来,形成一个新的"兴趣画像"(更新自身表示)
  • 第三轮:这个新的画像再传递给下一轮交流(传播到下一层)

经过多轮交流后,你不仅知道自己的爱好,还知道"朋友的朋友"的爱好,从而发现更多潜在兴趣。

3. 多层传播:捕捉高阶关系

一层GNN只能捕捉直接邻居(一跳关系)。比如:

  • 用户A直接买过商品X → 用户A知道商品X的特征

两层GNN能捕捉二跳邻居

  • 用户A买过商品X → 商品X还被用户B买过 → 用户A知道"和自己买同样商品的人"的特征
  • 这就是协同过滤的本质:“买了A的人也买了B”

三层GNN能捕捉三跳邻居

  • 用户A → 商品X → 用户B → 商品Y
  • 用户A可以推断出:“和我品味相似的人还喜欢什么”

层数不是越多越好。层数太深会导致:

  • 过平滑问题:所有节点的表示趋于相同,失去区分度
  • 计算爆炸:邻居数量指数级增长

实践中,2-3层通常效果最好。

4. 采样策略:应对大规模图

工业级推荐系统的图可能有数十亿节点,不可能每次传播都遍历所有邻居。所以需要采样:

采样方法 原理 适用场景
随机采样 从邻居中随机选K个 简单高效,适合均匀分布的图
重要性采样 按边权重采样,重要邻居被选中的概率更高 边权重差异大的场景
随机游走采样 从中心节点出发做随机游走,记录访问频率高的节点 需要捕捉图的结构特征
分层采样 第一层采样50个,第二层采样20个,逐层递减 控制计算量,避免指数爆炸

采样数量示例

第一层(直接邻居):最多采样50个
第二层(邻居的邻居):最多采样20个  
第三层:最多采样10个

这样既控制了计算量,又能覆盖主要的连接关系。
在这里插入图片描述


四、GNN推荐的优缺点

对比维度 传统协同过滤 GNN推荐
数据视角 用户-商品评分矩阵,平面结构 异构图结构,支持多类型节点和边
关系捕捉 只能捕捉直接交互(一跳) 能捕捉高阶连接(多跳邻居)
冷启动能力 ❌ 弱:新用户/商品无交互记录 ✅ 强:可通过属性节点传递信息
稀疏性处理 ❌ 差:数据稀疏时效果差 ✅ 好:通过邻居聚合补充信息
可解释性 ⚠️ 中等:基于相似度 ✅ 强:可追踪传播路径解释推荐
特征融合 ⚠️ 有限:难以融合多源信息 ✅ 灵活:天然支持异构信息融合
计算复杂度 ✅ 低:矩阵运算高效 ❌ 高:图传播计算量大
实时性 ✅ 毫秒级响应 ⚠️ 需要预计算或采样优化
模型复杂度 ✅ 简单,易部署 ❌ 复杂,需要专门优化

优势详解

1. 高阶关系建模

传统矩阵分解只能学"用户A买了商品X",GNN能学"用户A和用户B都喜欢商品X和Y,所以他们品味相似,可以把用户B喜欢的商品Z推荐给用户A"。这种"朋友的朋友"的间接关联,是提升推荐质量的关键。

2. 异构信息融合

真实推荐场景往往有多种信息源:

  • 用户画像(年龄、性别、地域)
  • 商品属性(品牌、类别、价格)
  • 上下文(时间、地点、设备)
  • 社交关系(好友、关注)

GNN可以把这些都建模为图的不同节点和边类型,统一学习。比如:

用户 --购买--> 商品 --属于--> 类别 --包含--> 其他商品

3. 冷启动缓解

新商品虽然没有交互记录,但有属性信息(品牌、类别)。通过异构图,新商品可以从属性节点"继承"表示,实现冷启动推荐。

局限性

1. 计算成本高

图传播需要遍历邻居,大规模图上训练很慢。解决方案:

  • 邻居采样(控制每层计算的邻居数)
  • 图分区(分布式训练)
  • 预计算embedding(离线训练,在线查表)

2. 过平滑问题

层数太深时,所有节点的表示趋于相同,失去区分度。解决方案:

  • 限制层数(通常2-3层)
  • 残差连接(保留浅层信息)
  • 注意力机制(区分重要邻居)

3. 动态图处理

用户行为是实时产生的,图结构不断变化。解决方案:

  • 离线T+1更新图结构和embedding
  • 在线用实时特征补充(如最近点击的商品)
  • 增量更新策略

五、实际应用与发展趋势

典型工业案例

1. Pinterest的PinSage

Pinterest有数十亿个Pin(图片)和Board(收藏夹),是典型的超大规模图场景。

核心设计

  • 用随机游走采样邻居,每次只选最重要的K个邻居
  • 带重启的随机游走,保证采样结果既有多样性又不偏离中心节点太远
  • 离线预计算所有节点的embedding,在线直接查表

效果:在数十亿节点的图上实现高效推荐,成为工业界GNN推荐的标杆。

2. 阿里的EGES

淘宝的商品推荐面临严重的稀疏性和冷启动问题。

核心设计

  • 构建"用户-商品-品牌-类别"异构图
  • 用图游走(Graph Walk)学习商品的序列表示
  • 融合多种边类型(点击、加购、购买、收藏)

效果:有效缓解了长尾商品和新商品的冷启动问题。

3. LightGCN

这是学术界提出的简化版GNN,专为协同过滤任务设计。

核心设计

  • 去掉传统GCN的特征变换矩阵和非线性激活函数
  • 只保留邻居聚合操作
  • 对多层embedding做加权平均

效果:在MovieLens、Amazon等数据集上,简化后的模型效果反而更好,说明推荐场景中图结构本身就携带了足够的协同信号。

应用场景

电商推荐

  • 构建"用户-商品-品牌-店铺-类别"异构图
  • 捕捉"买了手机的人也买手机壳"这种关联
  • 解决新上架商品的冷启动

内容推荐

  • 短视频平台:用户-视频-创作者-话题-音乐
  • 新闻推荐:用户-文章-标签-来源-作者
  • 利用时间衰减权重,让最近的行为影响更大

社交推荐

  • 微博/朋友圈:用户-内容-好友关系
  • 好友的点赞、评论行为通过图传播
  • 推荐结果既符合个人兴趣又有社交属性

知识图谱增强推荐

  • 把商品知识图谱(属性、关系)融入推荐
  • “用户喜欢科幻电影 → 科幻电影由诺兰导演 → 推荐诺兰的其他电影”

当前挑战与改进方向

1. 效率优化

  • 图采样算法:更智能的邻居选择,减少计算量
  • 模型压缩:知识蒸馏、量化,降低推理成本
  • 硬件加速:GPU图计算库、专用图神经网络芯片

2. 动态图建模

  • 时序GNN:考虑边的时间戳,建模用户兴趣演变
  • 增量学习:新边到来时快速更新,不用全量重训
  • 在线学习:实时反馈快速调整推荐策略

3. 可解释性增强

  • 注意力可视化:展示哪些邻居对推荐贡献最大
  • 路径解释:给出推荐理由的图路径(“因为你喜欢A,A和B相似,所以推荐B”)
  • 反事实解释:“如果用户没买过X,推荐结果会怎样变化”

4. 与其他技术融合

  • GNN + 大模型:用大模型生成节点特征,GNN做关系推理
  • GNN + 强化学习:动态调整推荐策略,优化长期收益
  • GNN + 因果推断:区分相关性 vs 因果性,避免推荐偏差

未来趋势

1. 超大规模图处理

随着数据规模持续增长,千亿甚至万亿节点的图将成为常态。分布式图计算、图分区策略、近似算法将是研究重点。

2. 多模态图神经网络

融合文本、图像、视频等多模态信息,构建更丰富的节点表示。比如:

  • 商品图片的视觉特征
  • 视频内容的语义理解
  • 用户评论的情感分析

3. 自监督学习

减少对标注数据的依赖,通过图结构本身设计预训练任务(如链接预测、节点属性预测),提升模型的泛化能力。

4. 公平性与偏见消除

GNN可能放大历史数据中的偏见(如性别、地域歧视)。研究如何在图传播中注入公平性约束,将是重要的伦理课题。


六、总结与思考

图神经网络为推荐系统带来了全新的视角:从"表格思维"转向"网络思维"

传统方法把推荐看作矩阵填充问题,GNN则把它看作图上的节点表示学习问题。这种转变的价值在于:

  1. 显式建模关系:不再把用户和商品看作孤立的ID,而是理解它们之间的连接
  2. 捕捉高阶信号:通过多跳邻居,发现"朋友的朋友"这类间接关联
  3. 融合异构信息:统一处理用户行为、商品属性、社交关系等多源数据

但技术终究是手段,不是目的。GNN推荐的核心价值,是让系统能更像人类一样"理解"复杂的关联关系——就像我们在生活中,不仅看一个人买了什么,还会看他买了什么、他的朋友喜欢什么、和他相似的人喜欢什么。

最后留一个思考题:当GNN能捕捉越来越复杂的图结构,推荐系统会不会变得过于"聪明",反而让用户陷入信息茧房?如何在利用图结构提升推荐质量的同时,保持推荐的多样性和惊喜感?这或许是推荐算法设计者需要长期思考的问题。


参考资料:

  • Graph Convolutional Neural Networks for Web-Scale Recommender Systems (PinSage)
  • Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba (EGES)
  • LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation
Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐