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

2023-12-17 08:52

本文主要是介绍群组推荐模型---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^分别表示用户对物品的预测分和群组对物品的预测分。设计了两个任务的预测共享相同的隐藏层。这是因为群嵌入是从用户嵌入聚合而来的,这使得它们本质上处于相同的语义空间中。此外,这可以增强用户-项目交互数据对组-项目交互功能的训练,反之亦然,有利于二者的相互强化。

代码链接:点击

这篇关于群组推荐模型---AGREE(Attentive Group Recommendation)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/503799

相关文章

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

python 常见数学公式函数使用详解(最新推荐)

《python常见数学公式函数使用详解(最新推荐)》文章介绍了Python的数学计算工具,涵盖内置函数、math/cmath标准库及numpy/scipy/sympy第三方库,支持从基础算术到复杂数... 目录python 数学公式与函数大全1. 基本数学运算1.1 算术运算1.2 分数与小数2. 数学函数

Python Pillow 库详解文档(最新推荐)

《PythonPillow库详解文档(最新推荐)》Pillow是Python中最流行的图像处理库,它是PythonImagingLibrary(PIL)的现代分支和继承者,本文给大家介绍Pytho... 目录python Pillow 库详解文档简介安装核心模块架构Image 模块 - 核心图像处理基本导入

CSS Anchor Positioning重新定义锚点定位的时代来临(最新推荐)

《CSSAnchorPositioning重新定义锚点定位的时代来临(最新推荐)》CSSAnchorPositioning是一项仍在草案中的新特性,由Chrome125开始提供原生支持需... 目录 css Anchor Positioning:重新定义「锚定定位」的时代来了! 什么是 Anchor Pos

Java SWT库详解与安装指南(最新推荐)

《JavaSWT库详解与安装指南(最新推荐)》:本文主要介绍JavaSWT库详解与安装指南,在本章中,我们介绍了如何下载、安装SWTJAR包,并详述了在Eclipse以及命令行环境中配置Java... 目录1. Java SWT类库概述2. SWT与AWT和Swing的区别2.1 历史背景与设计理念2.1.