群组推荐模型---AGREE(Attentive Group Recommendation)

群组推荐模型---AGREE

  • AGREE简单概述
  • 基于注意力的群组表征学习(Attentive Group Representation Learning)
  • NCF(Neural Collaborative Filtering)

AGREE简单概述

群组推荐领域比较经典的论文便是AGREE(Attentive Group Recommendation),此文的主要贡献如下:(1)利用神经注意力网络从数据中动态学习聚合策略的群体推荐系统。进一步整合了用户-项目交互,提高了群组推荐的性能.(2)有效缓解项目推荐的用户冷启动问题。(3)在一个自建数据集和一个公共数据集上进行了大量的实验,以证明方法有效性。
群组推荐可以大致分为四个模块:偏好获取群组划分偏好融合预测推荐。首先,在推荐算法中一般将偏好定义为用户对两个及以上项目的排序关系。其次对于群组划分,本文中使用的为开源真实数据集(Mafengwo和CAMRa2011),数据集中群组已经划分完毕,因此不再需要利用其他手段进行群组划分。如若需要构建其他数据集中的虚拟群组,可以利用聚类算法完成群组划分。在偏好融合层面,利用注意力机制学习群组成员权重替代预定义策略,最后一步使用NCF进行交互学习,为用户和组推荐项目。

基于注意力的群组表征学习(Attentive Group Representation Learning)

大多数的群组推荐系统都是通过一些预定义的策略对群组成员的评分进行聚合。例如最大最小值策略等。这类策略需要预定义参数,无法获知群组成员内部相互影响,缺乏动态调整群组成员权重的灵活性。使用注意力机制来学习聚合策略。它的基本思想是,当将一组表示压缩成一个表示时,对它们执行加权和,其中的权值由神经网络学习。偏好融合公式如下:
g l ( j ) = ∑ u t ∈ g l a ( j , t ) u t + q l g_l(j)=\displaystyle\sum_{u_t \in g_l}a(j,t)u_t+q_l gl(j)=utgla(j,t)ut+ql
g l g_l gl为群组 l l l中用户, a ( j , t ) a(j,t) a(j,t)为注意力权重,本文最为主要的部分便是注意力权重的训练,公式如下:
o ( j , t ) = h T R e L U ( P v v t + P u u t + b ) o(j,t)=h^TReLU(P_vv_t+P_uu_t+b) o(j,t)=hTReLU(Pvvt+Puut+b)
a ( j , t ) = s o f t m a x ( o ( j , t ) ) = e x p ( o ( j , t ) ) ∑ t ∈ g l e x p ( o ( j , t ) ) a(j,t)=softmax(o(j,t))=\frac{exp(o(j,t))}{\textstyle\sum_{t\in g_l}exp(o(j,t))} a(j,t)=softmax(o(j,t))=tglexp(o(j,t))exp(o(j,t))
P v P_v Pv P u P_u Pu表示物品v和用户u的权重矩阵,通过激活函数和归一化的处理,训练出最终的用户权重。
而在群组偏好融合的公式中,还有一个 q l q_l ql变量,表示群组偏好向量,目的是考虑群组的整体偏好。

NCF(Neural Collaborative Filtering)

NCF是一种用于项目推荐的多层神经网络框架。它的想法是将用户嵌入和物品嵌入到一个专用的神经网络中,从而从数据中学习交互功能。由于神经网络具有较强的数据拟合能力,因此NCF框架比传统的MF模型具有更强的通用性,后者简单地使用与数据无关的内积函数作为交互函数。因此,选择NCF框架来对嵌入(表示用户、项目和组)和交互功能(预测用户-项目和组-项目交互)执行端到端学习。
pooling layer
对输入的向量 g l ( j ) g_l(j) gl(j) v ( j ) v(j) v(j)进行逐元素乘积,然后与 g l ( j ) , v ( j ) g_l(j),v(j) gl(j),v(j)进行连接。
e 0 = φ p o o l i n g ( g l ( j ) , v ( j ) ) = [ g l ( j ) ⨀ v ( j ) g l ( j ) v ( j ) ] e_0=\varphi_{pooling}(g_l(j),v(j))= \begin{bmatrix} g_l(j)\bigodot v(j)\\ g_l(j)\\ v(j) \end{bmatrix} e0=φpooling(gl(j),v(j))= gl(j)v(j)gl(j)v(j)
内积能够有效的捕获到群组和物品之间的交互,同时连接群组和物品本身的信息能够避免信息丢失。
hidden layer
池化层之上是一堆完全连接的层,这些层使模型能够捕获用户、组和项目之间的非线性和高阶相关性。
{ e 1 = R e L U ( W 1 e 0 + b 1 ) e 1 = R e L U ( W 1 e 0 + b 1 ) . . . . e h = R e L U ( W h e h − 1 + b h ) \begin{cases} e_1=ReLU(W_1e_0+b_1)\\ e_1=ReLU(W_1e_0+b_1)\\ ....\\ e_h=ReLU(W_he_{h-1}+b_h) \end{cases} e1=ReLU(W1e0+b1)e1=ReLU(W1e0+b1)....eh=ReLU(Wheh1+bh)
最后一层输出 e h e_h eh经过下面的公式转化为预测分:
{ r i j ^ = w T e h , i f e 0 = φ p o o l i n g ( u i , v j ) y i j ^ = w T e h , i f e 0 = φ p o o l i n g ( g l ( j ) , v j ) \begin{cases} \hat{r_{ij}}=w^Te_h,if e_0=\varphi_{pooling}(u_i,v_j)\\ \hat{y_{ij}}=w^Te_h,if e_0=\varphi_{pooling}(g_l(j),v_j) \end{cases} {rij^=wTeh,ife0=φpooling(ui,vj)yij^=wTeh,ife0=φpooling(gl(j),vj)
w w w表示预测层的权重 r i j ^ \hat{r_{ij}} rij^ y i j ^ \hat{y_{ij}} yij^分别表示用户对物品的预测分和群组对物品的预测分。设计了两个任务的预测共享相同的隐藏层。这是因为群嵌入是从用户嵌入聚合而来的,这使得它们本质上处于相同的语义空间中。此外,这可以增强用户-项目交互数据对组-项目交互功能的训练,反之亦然,有利于二者的相互强化。

代码链接:点击

你可能感兴趣的:(python,深度学习,pytorch)