何向南老师组的又两大必读论文,分别发在SIGIR19’和SIGIR20’。同时补一篇CIKM21’的优化。
Neural Graph Collaborative Filtering
协同过滤(collaborative filtering)的基本假设是相似的用户会对物品展现出相似的偏好,自从全面进入深度学习领域之后,一般主要是先在隐空间中学习关于user和item的embedding,然后重建两者的交互即interaction modeling,如MF做内积,NCF模拟高阶交互等。但是他们并没有把user和item的交互信息本身编码进 embedding 中,这就是NGCF想解决的点:显式建模User-Item 之间的高阶连接性来提升 embedding。
High-order Connectivity
解释高阶连通性如上图,图1左边为一般CF中user-item交互的二部图,双圆圈表示此时需要预测的用户u1,对于u1我们可以把有关他的连接扩展成右图的树形结构,l是能到达的路径长度(或者可以叫跳数),l=1表明能一步到达u1的item,此时可以看到最外层的跳数相同的i4跟i5相比(l都为3),用户u1对i4的兴趣可能要比i5高,因为i4->u2->i2->u1、i4->u3->i3->u1有两条路径,而i5->u2->i2->u1只有一条,所以i4的相似性会更高。所以如果能扩展成这样的路径连通性来解释用户的兴趣,就是高阶连通性。
NGCF的完整模型如下图,可以分为三个部分来看:
- Embeddings:对user和item的嵌入向量,普通的用id来嵌入就可以了
- Embedding Propagation Layers:挖掘高阶连通性关系来捕捉交互以细化Embedding的多个嵌入传播层
- Prediction Layer:用更新之后带有交互信息的 user 和 item Embedding来进行预测
主要就是中间的交互信息捕捉怎么构建,主要思路是借助GNN的message passing消息传递机制: m u ← i = 1 ∣ N u ∣ ∣ N i ∣ ( W 1 e i + W 2 ( e i ⊙ e u ) ) m_{u\leftarrow i}=\frac{1}{\sqrt {|N_u||N_i|}}(W_1e_i+W_2(e_i\odot e_u)) mu←i=∣Nu∣∣Ni∣1(W1ei+W2(ei⊙eu))其中Mu←i是消息嵌入(即要传播的信息),使用embedding后的user,item的特征 e u , e i e_u,e_i eu,ei作为输入,然后两者计算内积相似度来控制邻域的信息,再加回到item上,用权重W控制权重,最后的N是u和i的度用来归一化系数,可以看做是折扣系数,随着传播路径长度的增大,信息慢慢衰减。
博主自己的理解是实际上做了一个小型的attention从领域的item整合信息,所以下一步就是用这些邻域信息更新user: e u ( 1 ) = L e a k y R e L U ( m u ← u + ∑ i ∈ N u m u ← i ) e^{(1)}_u=LeakyReLU(m_{u\leftarrow u}+\sum_{i\in N_u}m_{u\leftarrow i}) eu(1)=LeakyReLU(mu←u+i∈Nu∑mu←i)上标(1)表示一阶聚合,可以看到从领域的i中整合信息又考虑到了自身节点的信息,最后再激活一下。高阶传播实际就是将上述的一阶传播堆叠多层,这样经过 l 次聚合,每个节点都会融合其 l 阶邻居的信息,也就得到了节点的 l 阶表示,具体的传播如下图:
对应user u2来说,先由直接连接的i2,i4,i5开始是一阶,进行上述的聚合更新之后,聚合二阶邻居(此时u1也完成了更新),此时用u1和u2更新i2,同样的其他的item也会相应的更新,最后再由i1,i2,i3来更新u1,这样通过相互更新相互迭代,就完成了开篇那张图的树形结果。
如果把上述的更新换成矩阵形式的话:
E ( l ) = σ ( ( L + I ) E ( l − 1 ) W 1 ( l ) + L E ( l − 1 ) ⊙ E ( l − 1 ) W 2 ( l ) ) E^{(l)}=\sigma((L+I)E^{(l-1)}W^{(l)}_1+LE^{(l-1)}\odot E^{(l-1)}W^{(l)}_2)