点击上方,选择星标或置顶,每天给你送干货![]() !
!
 
    
    阅读大概需要5分钟![]()
 
    跟随小博主,每天进步一丢丢![]()
 
   
 
   
 
    
    
    来源:知乎( 
    https://zhuanlan.zhihu.com/p/114798371 
    ) 
    
    
    
    
    SIGIR'19的一篇论文Neural Graph Collaborative Filtering(NGCF)介绍了用图神经网络(GNN)来增强协同过滤推荐系统的方法。今天我们来聊一聊下面几个话题: 
    
 
    
    
    
   
 
   协同过滤
 
   
 
    
    协同过滤(CF)是一种常用的推荐系统做法。协同,指收集广大用户的口味;过滤,指过滤出『我』可能喜欢的物品。这个方法通过收集用户的兴趣和口味,给用户推荐口味相近的人喜欢的物品。 
    
    
    
    在构建推荐系统的过程中,我们收集了很多用户与物品的交互历史,比如豆瓣电影中用户对电影的打分;淘宝中用户对物品的浏览、购买等。这些交互历史能够表示成一个用户  
    ![]() 、物品
 
     、物品  
    ![]() 的交互矩阵
 
     的交互矩阵  
    ![]() 。 
    
    
    
    协同过滤模型需要 1. 用向量表示用户的口味
 
     。 
    
    
    
    协同过滤模型需要 1. 用向量表示用户的口味  
    ![]() 、物品的特性
 
     、物品的特性  
    ![]() ;2. 通过用户的口味、物品的特性去近似交互历史
 
     ;2. 通过用户的口味、物品的特性去近似交互历史  
    ![]() ;3. 给用户
 
     ;3. 给用户  
    ![]() 推荐交互得分最高的物品
 
     推荐交互得分最高的物品  
    ![]() 。
 
     。 
    
    
    
   
 
    
    
   
 
    
    
    
   
 
    
    MF的输入单一,不能使用用户与物品的特征作为输入;同时MF对稀疏的交互矩阵效果较差。NGCF作者认为使用GNN能同时解决这两个问题。1. GNN使用节点特征作为初始embedding,可以在这里加入用户特征、物品特征;2. GNN能够引入『高阶交互历史信息』。 
    
    
    
    例如『你浏览的这个电影,喜欢它的用户也喜欢以下电影』这种『用户-物品-用户-物品』三阶信息,就是一种『高阶交互历史信息』。这种信息在推荐系统中无疑是非常重要的。 
    
   
 
    
   
 
    
    那么作者在论文中如何将GNN加入协同过滤系统的呢?首先,要将历史交互构图;然后,在这个交互图上,使用GNN来嵌入『高阶交互历史信息』,获得节点(用户、物品)的embedding;最后,通过embedding来近似历史交互矩阵  
    ![]() 。过程如下:
 
     。过程如下: 
    
    
    
    - 使用交互历史构图;
 
 
- 在图上,使用GNN学习embedding ![]() ; ;
 
- 和MF类似,使用矩阵的乘积 ![]() 去近似交互矩阵 去近似交互矩阵![]() 。 。
 
 
   NGCF如何构图?
 
   
 
    
    作者希望使用GNN对高阶交互历史进行建模,就首先要对交互历史进行构图。左图是由用户、物品的交互历史构成的二部图;右图是将左图围绕  
    ![]() 展开,获得该点的『高阶历史信息』。
 
     展开,获得该点的『高阶历史信息』。 
    
   
 
    
   
 
   GNN如何获得节点embedding?
 
   
 
    
    在GNN中,节点的embedding初始化成节点的特征,然后通过聚合邻居及自己上一层的 
    ![]() ,获得新一层的
 
     ,获得新一层的  
    ![]() 。 
    
    
    
    在NGCF中,第k-1层的节点信息是这样聚合到第k层的:
 
     。 
    
    
    
    在NGCF中,第k-1层的节点信息是这样聚合到第k层的: 
    
   
 
    
    
   
 
   GNCF的整体网络架构
 
   
 
    
   
 
    
    - 将每个用户 ![]() 所有layer的embedding连接起来作为用户最终embedding 所有layer的embedding连接起来作为用户最终embedding![]() 
 
- 将每个物品 ![]() 所有layer的embedding连接起来作为物品最终embedding 所有layer的embedding连接起来作为物品最终embedding![]() 
 
- 将点积 ![]() 作为最后的模型预测值 作为最后的模型预测值
 
- 使用了推荐系统常用的pairwise BPR loss,能对正样本和负样本加上不同的权重,使正样本能特别体现用户的口味,负样本能少量体现用户的口味 
 
   
 
   学到的embedding效果如何?
 
   
 
    
    在用t-SNE降维后,下图是对NGCF与MF的embedding可视化。星星是一个用户,圆圈是一个物品。可以看到NGCF的clusters彼此之间更加分离,即同一个用户交互过的物品,它们的embeddings更加相似。 
    
   
 
    
   
 
    
    
    作者还在Gowalla、Yelp2018、Amazon-Book三个数据集上对比了推荐效果,NGCF均为state of the art。 
    
    
    
    
   参考
 
   [1] How does Netflix recommend movies? Matrix Factorization https://www.youtube.com/watch?v=ZspR5PZemcs
 
   [2] https://arxiv.org/abs/1905.08108
 
   [3] https://github.com/xiangwang1223/neural_graph_collaborative_filtering
 
    
   
 
    
     
     交流学习,进群备注: 
     昵称-学校(公司)-方向,进入DL&NLP交流群。 
     
 
     
     
     方向有很多: 
     机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。