图神经网络(GNN)怎么用在推荐系统里?
图神经网络(GNN)怎么用在推荐系统里?
🚀 本文收录于Github:AI-From-Zero 项目 —— 一个从零开始系统学习 AI 的知识库。如果觉得有帮助,欢迎 ⭐ Star 支持!
by @Laizhuocheng
一、简介:推荐系统的"社交困境"
想象你刚搬到一个新小区,想找个靠谱的理发店。
传统推荐就像问物业要了一份"小区最受欢迎的店铺榜单"。榜单上的店确实不错,但问题是——这些店可能离你很远,或者风格根本不适合你。更尴尬的是,榜单上全是开了十年的老店,新开的精品小店根本没有机会被推荐。
这就是传统协同过滤的困境:它只看"谁买了什么",却看不到"谁和谁是朋友"、“哪些商品其实很像”。它把用户和商品当成孤立的点,忽略了它们之间丰富的连接关系。
**图神经网络(GNN)**的出现,彻底改变了这个局面。它把推荐问题看作一个图结构问题:用户是节点,商品是节点,点击、购买、收藏等行为是边。通过"消息传递"机制,GNN让每个节点都能"听到"邻居的声音,从而发现那些隐藏在连接背后的深层关联。
就像你在新小区找理发店时,不是看榜单,而是问邻居:"你平时在哪剪头发?"邻居再告诉你:"我朋友推荐了一家新开的店,手艺特别好。“这种"朋友的朋友的推荐”,往往能发现算法榜单永远找不到的宝藏店铺。
二、什么是图神经网络推荐
图神经网络推荐(GNN-based Recommendation)是指利用图神经网络技术,将用户、商品及其交互关系建模为图结构,通过消息传递机制学习节点的高阶表示,从而进行个性化推荐。
核心思想
传统推荐系统把数据看成一张表格:行是用户,列是商品,单元格是评分或交互记录。这种视角虽然直观,但丢失了大量结构信息。
GNN推荐则把数据看成一张图:
- 节点:用户、商品,甚至商品属性(品牌、类别、标签)
- 边:用户行为(点击、购买、收藏)和商品关系(同品牌、同类别)
- 邻居:与当前节点有直接连接的其他节点
举个生活中的类比:
想象一个社交聚会。传统推荐就像你只看每个人的名片(姓名、职业),然后猜测谁可能合得来。GNN推荐则像你真的参加聚会,和每个人聊天,了解他们的朋友是谁、有什么共同爱好。通过几轮交流,你不仅能认识在场的人,还能推断出"朋友的朋友"可能是什么样的人。
为什么图结构更适合推荐
推荐系统本质上就是一个关系预测问题:给定一个用户,预测他会和哪些商品产生交互。而图结构天然适合表达关系:
- 用户-商品交互 → 二部图的边
- 用户相似性 → 共同购买的商品越多,用户节点越接近
- 商品相似性 → 被同一批用户购买,商品节点越接近
- 高阶连接 → 用户A买了商品X,商品X也被用户B买,用户B买了商品Y → 可以把Y推荐给用户A
这种"朋友的朋友"的间接关联,正是传统方法难以捕捉的。
三、GNN推荐如何工作
1. 图构建:把数据变成网络
第一步是把原始数据转换成图结构。以电商推荐为例:
节点类型:
- 用户节点:每个注册用户
- 商品节点:每个SKU
- 属性节点:品牌、类别、标签等
边类型:
- 用户-商品边:点击、加购、购买、收藏(不同行为可以设置不同权重)
- 商品-商品边:同品牌、同类别、经常一起购买
- 用户-用户边:好友关系、关注关系(如果有社交数据)
边的权重设计:
点击:权重 = 1
加购:权重 = 3
购买:权重 = 5
收藏:权重 = 4
这样,购买行为的信号就比点击强5倍,更符合业务逻辑。
2. 消息传递:邻居的信息流动
这是GNN的核心机制。想象每个节点都在"广播"自己的特征,同时"收听"邻居的广播。
单层消息传递的过程:
-
聚合(Aggregate):收集邻居节点的特征
- 用户节点收集他交互过的所有商品特征
- 商品节点收集所有购买过它的用户特征
-
更新(Update):结合自身特征和聚合的邻居特征,生成新的表示
- 新表示 = 自身特征 + 邻居信息
-
传播(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则把它看作图上的节点表示学习问题。这种转变的价值在于:
- 显式建模关系:不再把用户和商品看作孤立的ID,而是理解它们之间的连接
- 捕捉高阶信号:通过多跳邻居,发现"朋友的朋友"这类间接关联
- 融合异构信息:统一处理用户行为、商品属性、社交关系等多源数据
但技术终究是手段,不是目的。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
更多推荐
所有评论(0)