今天学习的是新加坡国立大学和中国科技大学同学合作的论文《Neural Graph Collaborative Filtering》,发表于 2019 年 ACM SIGIR 会议。
Embedding 向量是现代推荐系统的核心,但是目前的方法无法捕捉到 user-item 交互中潜在的协作信号。因此,由此产生的 Embedding 向量可能不足以捕获到协同过滤的内容。
为此,作者提出神经网络协同过滤(Neural Graph Collaborative Filtering,NGCF),旨在将 user-item 的交互信息集成到 Embedding 中,从而在完成二部图的高阶连通性的表达建模。
1.Introduction
一般而言,有两种可学习的协同过滤模型:
- Embedding:将 user 和 item 转换成向量表示。比如说矩阵分解得到 Embedding,并建模了 user 和 item 之间的交互信息;
- 交互建模:基于 Embedding 重建历史交互。比如说利用非线性神经网络代替 MF 中的内积或者利用欧几里得作为交互函数;
但这些方法还不足以产生非常好的效果,关键原因在于缺少关键的协作信号(collaborative signal)显示的编码到 Emedding 中,这种信号可以揭示 user(或 item)之间的行为相似性。
虽然这个交互信息很有用,但是想做到这一点绝非易事,特别是在实际应用中,交互规模通常会达到千百万甚至上亿的数据量,从而很难提取所需的协作信号。
本文中,作者通过从 user-item 的交互中探索高阶连接性(high-order connectivity)来解决以上问题。下图阐述了 user-item 的二部图和高阶连接性的概念:
作者设计了一个 Embedding Propagation Layer 通过聚合 user(或 item)的 Embedding 来完善 Embedding 的表达。通过堆叠多个 Embedding Propagation Layer 可以强制 Embedding 捕获到 高阶连通性中的 协同信号。以上图右侧为例,堆叠两层可以捕获 u 1 ← i 2 ← u 2 u_1\leftarrow i_2 \leftarrow u_2 u1←i2←u2 的行为相似性,堆叠三层可以捕获 u 1 ← i 2 ← u 2 ← i 4 u_1\leftarrow i_2 \leftarrow u_2 \leftarrow i_4 u1←i2←u2←i4 的潜在推荐,同时也可以捕捉到信息的强度(确定 i 4 , i 5 i_4,i_5 i4,i5 的推荐优先级)。
2.NGCF
我们来看下 NGCF 具体内容。
NGCF 总共有三个部分:Embedding Layer、Embedding Propagation Layers 和 Prediction Layer。
2.1 Embedding Layer
Embedding Layer 提供初始化的 user Embedding 和 item Embedding,可以被认为是构建了一个参数矩阵作为 Embedding look-up 表:
E = [ e u 1 , … , e u N ⏟ users embedding , e i 1 , … , e i M ⏟ item embedding ] \mathbf{E}=[\underbrace{\mathbf{e}_{u_1},…,\mathbf{e}_{u_N}}_{\text{users embedding}} , \underbrace{\mathbf{e}_{i_1},…,\mathbf{e}_{i_M}}_{\text{item embedding}}] \\ E=[users embedding
eu1,…,euN,item embedding
ei1,…,eiM]
该 look-up 表将作为 NGCF 的一部分参与到端到端的优化中,通过多层 Embedding 传播层的优化,可以将协作信号显示注入到 Embedding 中,从而可以产生更加有效的 Embedding 向量。
2.2 Embedding Propagation Layers
接下来我们介绍下消息传递架构,首先考虑单层。
2.2.1 First-order Propagation
交互信息会提供用户偏好的直接证据,类似的,消费了 item 的 user 也可以将该 user 视为该 item 的特征,从而用来衡量两个 item 的协同相似性。在此基础上作者制定了两个操作流程:消息构建(message construction)和消息聚合(message aggregation)。
Message construction
考虑 user-item pair,定义从 i 到 u 的消息传播:
m u ← i = f ( e i , e u , p u i ) \mathbf{m}_{u\leftarrow i} = f(\mathbf{e}_i,\mathbf{e}_u,p_{ui}) \\ mu←i=f(ei,eu,pui)
其中, f ( ⋅ ) f(\cdot) f(⋅) 为消息编码函数, e i \mathbf{e}_i ei e u \mathbf{e}_u eu 为 Embedding 向量, p u i p_{ui}