开源了一个小项目,将一些经典的RS模型整合到一套代码中,可以作为学习参考,
GitHub地址:https://github.com/ChadsLee/RS_Zoos
NGCF:Neural Graph Collaborative Filtering (SIGIR’19)
前文GCN中的邻接矩阵 A A A可以表征数据之间的关联,在这里换了一个说法,叫做“CF signal”。
假设用户为 u u u,物品为 i i i,我们可以画出user-item的二部图,同时根据二部图可以将 u 1 u_1 u1的高维连接表示出来,如下图所示:
![image-20210521211525242](https://tva1.sinaimg.cn/large/008i3skNly1gqqczsmembj31bc0m0gtg.jpg)
模型框架主要有三个部分组成:
- Embedding Layer:提供初始的user embedding 和 item embedding
- Multiple Embedding Propagation Layers:通过注入高阶连接关系来细化嵌入
- The Prediction Layer:通过整合多层嵌入来预测 ( u , i ) (u,i) (u,i)
Embedding Layer
E = [ e u 1 , ⋯ , e u N ⏟ users embeddings , e i 1 , ⋯ , e i M ⏟ item embeddings ] \mathbf{E}=[\underbrace{\mathbf{e}_{u_{1}}, \cdots, \mathbf{e}_{u_{N}}}_{\text {users embeddings }}, \underbrace{\mathbf{e}_{i_{1}}, \cdots, \mathbf{e}_{i_{M}}}_{\text {item embeddings }}] E=[users embeddings eu1,⋯,euN,item embeddings ei1,⋯,eiM]
d维embedding,没什么好说的,如果是矩阵分解, e u \mathbf{e}_{u} eu和 e i \mathbf{e}_{i} ei一乘就就是预测结果了。
Embedding Propagation Layers
u − > i u->i u−>i和 i − > u i->u i−>u是一样的,这里以 u u u为例。首先考虑一层,对应一阶的情况。
first-order propagation
物品 i i i传递给消费过他的用户 u u u的信息可以表达为:
m u ← i = f ( e i , e u , p u i ) m u ← i = 1 ∣ N u ∣ ∣ N i ∣ ( W 1 e i + W 2 ( e i ⊙ e u ) ) , \mathbf{m}_{u \leftarrow i}=f\left(\mathbf{e}_{i}, \mathbf{e}_{u}, p_{u i}\right)\\ \mathbf{m}_{u \leftarrow i}=\frac{1}{\sqrt{\left|\mathcal{N}_{u}\right|\left|\mathcal{N}_{i}\right|}}\left(\mathbf{W}_{1} \mathbf{e}_{i}+\mathbf{W}_{2}\left(\mathbf{e}_{i} \odot \mathbf{e}_{u}\right)\right), mu←i=f(ei,eu,pui)mu←i=∣Nu∣∣Ni∣1(W1ei+W2(ei⊙eu)),
W 1 W_1 W1 和 W 2 W_2 W2是训练出来的权重矩阵,维度为 d ∗ d ′ d*d' d∗d′, 1 ∣ N u ∣ ∣ N i ∣ \frac{1}{\sqrt{\left|\mathcal{N}_{u}\right|\left|\mathcal{N}_{i}\right|}} ∣Nu∣∣Ni∣1就是衰减因子 p u i p_{u i} pui。
信息聚合: