多兴趣推荐召回模型:ComiRec

news2024/9/20 18:41:59

前言

多兴趣向量召回系列:

通过Youtube DNN推荐模型来理解推荐流程

多兴趣召回模型:MIND

推荐系统可以表达为序列推荐问题的形式,序列推荐任务是通过用户的历史行为来预测用户下一个感兴趣的item,这也与真实场景的推荐场景是符合的。

大部分模型会为每一个用户生成一个整体的用户嵌入向量(user embedding),但一个用户向量难以代表用户多方面的兴趣。

如下图,用户感兴趣的商品是涉及多个方面的,比如化妆品、包包等等。

image-20220825222310323

上一篇文章,我们已经讲述了一个可以提取多个用户兴趣向量的召回模型:MIND(Multi-Interest Network with Dynamic Routing)

这次,我们再来说另一个相关的模型:ComiRec,同样是阿里发表的论文《Controllable Multi-Interest Framework for Recommendation》。

这篇论文的主要贡献为以下三点:

  1. 提出了一种在统一的推荐系统中集成了可控性(controllability)和多兴趣模块的框架;
  2. 通过在线上推荐系统的实现和学习,探索了个性化系统可控性的作用;
  3. 在真实的两个数据集中(Amazon Books和Taobao dataset),取得了state-of-the-art的表现。

#模型框架

image-20220831215806812

从这张结构图可以看出,ComiRec的整体与MIND还是比较像的。

  1. 用户的行为序列即互动过的item列表,通过Embedding Layer层转换为item embeddings;
  2. 然后这些item embeddings给到Multi-Interest Extraction,得到用户的K个interest embeddings;
  3. 在训练阶段,会选择一个与target item embedding最接近的interest embeddings,来计算sampled softmax loss;
  4. 在预测阶段,每个interest embeddings都会召回top-N个item即总共K*N个,然后进入Aggregation Module,最终得到N个item作为推荐结果。

下面,我们对每个模块进行拆解解读。

Embedding Layer还是常规的embedding做法,在这里就不再赘述了。

Multi-Interest Framework

论文中使用了两种多兴趣提取模块:Dynamic RoutingSelf-Attentive Method,并且分别称为ComiRec-DR和 ComiRec-SA。

Dynamic Routing

这个方法是出自CapsNet《Dynamic routing between capsules》,大体的思想是:

  • 一个capsule(胶囊)是一组神经元,这些神经元的向量代表了一种类型的实体,例如一个object或者一个object的部分;
  • 一个capsule的输出向量的length( ∣ ∣ s ∣ ∣ ||s|| ∣∣s∣∣)又代表了当前输入下,该实体向量为capsule表征的概率。

阿里将用户行为序列的item embeddings作为初始的capsule,然后提取出多个兴趣capsules,即为用户的多个兴趣。

e i e_i ei为第一层网络的第i个capsules,那么下一层网络的第j个capsules为:

image-20220905220536739

W i j W_{ij} Wij为转换矩阵。

接着,第j个capsule的全部输入为:

image-20220905220703425

其中, c i j c_{ij} cij为第i个capsule和下一层的第j个capsule的耦合系数,由迭代的动态路由计算决定,并且加和为1。

作者使用“routing softmax”来计算这个耦合系数, b i j b_{ij} bij代表了第i个capsule和下一层的第j个capsule是成对(be coupled to)的先验概率log值,初始化为0:

image-20220905221143574

最后,第j个capsule的输入 s j s_j sj会通过一个非线性的"squashing"函数,得到输出的capsule v j v_j vj

squash函数的目的主要是让short的向量缩放到length接近为0,而long的向量缩放到length接近于1(略低于1)。这里有起到向量筛选的作用,不相关或者不重要的向量length会趋于0,而相关或者重要的向量length就基本保持不变。

image-20220907214840421

上面的过程会经过多次的迭代。最终输出的capsules V u = [ v 1 , . . . , v K ] ∈ R d × K V_u=[v_1,...,v_K]\in R^{d \times K} Vu=[v1,...,vK]Rd×K就是用户的多个兴趣capsules(interest embeddings)。

整个Dynamic Routing的算法流程如下:

image-20220907215617287

###Self-Attentive Method

自我注意力机制也可以应用到多兴趣提取模块。给定用户的行为序列embeddings H ∈ R d × n H\in R^{d\times n} HRd×n(n为序列的长度),使用自我注意力机制可以得到这些行为序列embeddings的权重 a ∈ R n a\in R^n aRn

image-20220919205539854

其中 w 2 ( s i z e 为 d a ) 和 W 1 ( s i z e 为 d a × d ) w_2(size为d_a)和W_1(size为d_a\times d) w2(sizeda)W1(sizeda×d)都是可以训练的参数。

接着,再使用权重a对用户行为序列embeddings进行加权求和,就可以得到用户的兴趣向量表征: v u = H a v_u=Ha vu=Ha

但是,作者为了能够利用上用户行为序列的顺序信息,增加了一个维度与行为序列embeddings相同的可训练的位置向量(positional embeddings),让其与行为序列embeddings相加;并且为了能够提取用户多个方向的不同兴趣,让 w 2 从一维扩展为二维矩阵 W 2 ( d a × K ) w_2从一维扩展为二维矩阵W_2(d_a \times K) w2从一维扩展为二维矩阵W2(da×K)

image-20220919211237687

Model Training

在模型训练阶段,提取了用户的多个 interest embeddings之后,会从中挑选一个与target item i ( e m b e d d i n g 为 e i ) i(embedding为e_i) iembeddingei最贴合的embedding,使用内积作为度量进行挑选:

image-20220919211746952

目标函数仍然是结合负采样的最大似然法:

I I I是全量的item库,计算代价过高,所以使用负采样来代替)

image-20220919212025861

image-20220919212034702

Online Serving

线上预测时,通过多兴趣提取模块计算得到用户的多个兴趣向量,每个兴趣向量可以分别从大规模的item库召回N个item,然后这些N*K个item会再输入到一个聚合模块,来决定整体的item候选集,最终排序分数的最高的N个item会作为最终的召回结果。

Aggregation Module

一个最直接的聚合方法,也是MIND使用的,就是直接使用上一步的召回分数(内积相似度),挑选分数最高的N个item:

image-20220919215010535

这个方法是对推荐准确率最有效的,但作者认为推荐系统不能单单考虑准确率,用户更希望能够推荐一些新的或者不同的东西。

因此论文提出一种综合考虑推荐准确率和多样性的聚合方法。

给定多兴趣提取模块召回的K*N个items的集合M,求出N个items的集合S,满足下式分数最大:

image-20220921205222642

image-20220921205904868

其中, λ ≥ 0 \lambda \ge 0 λ0是一个可控因素,也就是论文强调的推荐系统的可控性,当 λ = 0 \lambda=0 λ=0时,则等同于最直接的聚合方法,当 λ = ∞ \lambda=\infty λ=时,则会召回的item多样性是最丰富的;

δ ( ⋅ ) \delta(\cdot) δ()是一种指示函数( indicator function),在论文的场景下,当i和j的品类相同时,g(i, j)=1,反之则g(i, j)=0。

在推理时,论文提出了一种最大化Q(u,S)的贪心算法,具体如下:

image-20220919215530278

工程细节

推荐模型除了要学习模型的相关知识,其实数据方面的工程工作也是相当重要的,甚至其重要性相比模型是有之过而无不及。下面就再来讲讲这篇论文一些工程上的实现。

数据集划分

论文是按照用户来划分数据集的,训练集:验证集:测试集的比例为8:1:1。

训练集毫无疑问是使用全部点击序列来训练模型,用户的点击序列为 ( e 1 ( u ) , e 2 ( u ) , . . . , e k ( u ) , . . . , e n ( u ) ) (e_1^{(u)},e_2^{(u)},...,e_k^{(u)},...,e_n^{(u)}) (e1(u),e2(u),...,ek(u),...,en(u)),那么每个训练样本则会使用序列的前k个items来作为模型的输入,来预测第k+1个item,其中 k = 1 , 2 , . . . , ( n − 1 ) k=1,2,...,(n-1) k=1,2,...,(n1)

(这里对于初学者,如果仅仅研究了模型,那么对于样本的构造也是可能设计错误的)

验证集和测试集是使用用户的前面80%的点击序列来作为模型的输入,然后去预测后面的点击序列。

这样做的好处是相比同个用户的行为序列在训练和验证时都使用到(即不是按照用户来划分数据集,而是所有样本随机划分),更具泛化性,效果更可信。

评估指标

论文使用了三个常规的指标来离线评估模型的召回效果。

**Recall:**为了更好的可解释性,使用用户平均的recall而不是全局平均。 I ^ u , N \hat{I}_{u,N} I^u,N为模型召回的top-N个items, I u I_u Iu为用户的真实点击item。Recall度量了用户的真实点击items被模型召回命中的比例。

image-20220921213359864

**Hit Rate:**度量了模型召回的items至少命中一个用户的真实items的比例

image-20220921213800474

这里的 δ ( ⋅ ) \delta(\cdot) δ()同样是一种指示函数( indicator function),跟上述的含义相同。

**Normalized Discounted Cumulative Gain:**NDCG度量了模型召回的items命中的位置,命中的位置越靠前,NDCG的分数就越高,效果当然也就越好。

image-20220921214721906

其中, i ^ u , k \hat{i}_{u,k} i^u,k为用户u召回的第k个item,Z是一个常量,它的值等于DCG的最大可能值,其实就是模型推荐召回的items位置与真实的items完全一致时,DCG的值。

推荐多样性

为了让推荐系统取得更高的准确率,一些研究建议需要让推荐多元化来避免单调性以及提升用户的体验。

论文使用了以下的方式来计算推荐的items的多样性:

image-20220921220435610

模型超参数

image-20220921215729243

image-20220921215739497

实验结果

  • embedding的维度为64
  • 负采样的负样本数量为10
  • 多兴趣提取模块提取的interest embeddings的数量K=4
  • 使用Adma优化器,学习率为0.001
  • 训练步数为了1百万

image-20220921215247059

代码实现

GitHub

总结

  1. 论文指出了推荐召回模型中单个用户兴趣向量的弊端,提出一种可以提取多个用户兴趣向量的模型ComiRec,包括两种多兴趣提取模块:Dynamic RoutingSelf-Attentive Method,对应的模型分别为ComiRec-DR和ComiRec-SA;
  2. 提出一种新的对用户多个兴趣向量召回结果的聚合方法(Aggregation Module),指出推荐系统可控性的重要性(论文中主要体现了推荐的多样性控制);
  3. 与MIND有很多相似的地方,都是为了解决单个用户兴趣向量召回的局限性,而区别也主要是上面两点。另外需要注意的一点是动态路由方法也是不同的:MIND是提出了新的Behavior-to-Interest (B2I) dynamic routing,而该论文是原始的dynamic routing(CapsNet);还有一个就是MIND的用户兴趣向量的个数K是由用户的历史行为序列的长度动态计算得到,而ComiRec是固定的。
  4. 最后,论文对用户的其他特征没有说明如何处理使用,像常规的离散特征embedding、连续特征直接拼接或者分箱再embedding,也是可以一起加进去的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/453827.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 通过Chrony实现NTP

Linux实现NTP服务器时间同步,可以通过ntp服务实现,也可以通过chrony服务实现 两者区别主要有 Chrony运行于UDP的323端口,NTP运行于UDP的123端口 Chrony相比于NTP可以更快同步,能够最大同步的减少时间和频率的误差 Chrony能够更好…

linux安装harbor ,搭建镜像私服

linux安装harbor ,搭建镜像私服 前提 环境中要有 docker 和 docker-compose 2、下载 harbor 的 .tgz 安装包 官网地址: Releases goharbor/harbor GitHub 第一个是离线安装包,第二个是在线安装包;带asc后缀的文件就是校验…

ROS学习第三十二节——xacro构建激光雷达小车

https://download.csdn.net/download/qq_45685327/87718396 在前面小车底盘基础之上&#xff0c;添加摄像头和雷达传感器。 0.底盘实现 deamo02_base.xacro <!--使用 xacro 优化 URDF 版的小车底盘实现&#xff1a;实现思路:1.将一些常量、变量封装为 xacro:property比如…

【Spring】Spring AOP

目录 一、Spring AOP简介1.什么是AOP2.AOP术语 二、AspectJ开发1.基于XML的声明式AspectJ1.1 配置切面1.2 配置切入点1.3 配置通知 2.基于注解的声明式AspectJ 一、Spring AOP简介 1.什么是AOP AOP的全称是Aspect-Oriented Programming&#xff0c;即面向切面编程&#xff08;…

一种引入过渡阶段和高斯变异的改进算术优化算法(TGAOA)-附代码

一种引入过渡阶段和高斯变异的改进算术优化算法(TGAOA) 文章目录 一种引入过渡阶段和高斯变异的改进算术优化算法(TGAOA)1.算术优化算法2. 改进算术优化算法2.1 重构数学加速优化器 MOA2.2 新策略的引入2.3 具有一致性的高斯变异策略2.4具有一致性的高斯变异策略 3.实验结果4.参…

YOLOv8 应用轻量级通用上采样算子CARAFE

特征上采样是现代卷积神经网络架构中的关键操作,例如特征金字塔。其设计对于密集预测任务,如目标检测和语义/实例分割至关重要。在本研究中,我们提出了一种称为内容感知特征重组(CARAFE)的通用、轻量级且高效的操作符,以实现这一目标。CARAFE具有以下几个优点:(1)大的…

模型评估与选择

一、问题 在现实任务中&#xff0c;我们往往有多种学习算沾了供选择&#xff0c;甚至对同 -个学习算法&#xff0c;当使用不同的参数配置时也会产生不 同的模型 . 那么&#xff0c;我们该选用 哪一个学习算法、使用哪一种参数配置呢? 理想的解决方案当然是对候选模型的泛化误…

Java线程详解

线程是CPU调度和分配的基本单位&#xff0c;是操作系统可以识别的最小执行和调度单位&#xff0c;每个线程都有自己特定的独立的内存区域&#xff0c;当然也与其他线程共享堆内存&#xff0c;文件队列以及其他内核资源&#xff0c;Java虚拟机允许一个应用拥有多个线程并发工作。…

AI绘画——Lora模型 小人书·连环画 xiaorenshu

目录 小人书连环画 使用说明&#xff1a; Instructions for v1.5: Instructions for v1.0: 下载地址 模型演示&#xff08;多图预警&#xff09; Night Sky YOZORA Model 模型 Lora模型xiaorenshu pastel-mix模型pastel-waifu-diffusion.vae模型Lora模型xiaorenshu 小人书…

JavaSE05|数组的定义与使用

文章目录 JavaSE05|**数组的定义与使用**1.数据基本概念**2.** **数组是引用类型****3.** **数组的应用场景** JavaSE05|数组的定义与使用 1.数据基本概念 定义&#xff1a;可以看成是相同类型元素的一个集合 1.1数组初始化 动态初始化&#xff1a;在创建数组时&#xff0c…

使用 Kubectl Patch 命令更新资源

Kubectl patch 命令允许用户对运行在 Kubernetes 集群中的资源进行局部更新。相较于我们经常使用的 kubectl apply 命令&#xff0c;kubectl patch 命令在更新时无需提供完整的资源文件&#xff0c;只需要提供要更新的内容即可。 Kubectl patch 支持以下 3 种 patch 类型&…

ROS学习第三十三节——Arbotix使用

https://download.csdn.net/download/qq_45685327/87718484 1.介绍 通过 URDF 结合 rviz 可以创建并显示机器人模型&#xff0c;不过&#xff0c;当前实现的只是静态模型&#xff0c;如何控制模型的运动呢&#xff1f;在此&#xff0c;可以调用 Arbotix 实现此功能。 Arboti…

第九章 桥接模式

文章目录 前言一、桥接模式(Bridge)-基本介绍完整代码Brand 手机接口&#xff0c;定义行为Vivo 实现 Brand 接口XiaoMi 实现 Brand 接口Phone 抽象桥接类FoldedPhone 实现桥接 &#xff08;折叠样式手机&#xff09;UpRightPhone 实现桥接&#xff08;直立样式手机&#xff09;…

干货 | 被抑郁情绪所困扰?来了解CBT吧!

Hello&#xff0c;大家好&#xff01; 这里是 壹脑云科研圈 &#xff0c;我是 喵君姐姐~ 我们的情绪就像是一组正弦波&#xff0c;有情绪很高涨的时刻&#xff0c;也会有情绪低落的瞬间&#xff0c;也会有情绪平稳的时候。 这种情绪上的变化非常正常&#xff0c;也正是因为这…

shell的变量功能

文章目录 shell的变量功能什么是变量&#xff1f;变量的可变性与方便性影响bash环境操作的变量脚本程序设计(shell script)的好帮手 变量的使用与设置&#xff1a;echo、变量设置规则、unset变量的使用(echo)变量设置的规定使用案例 环境变量的功能用env观察环境变量与常见环境…

数据结构(五)—— 栈与队列(2)

一、接上章 栈与队列的中等、困难题。 堆是一块动态内存 栈是先进后出的堆的一种方法 队列是一种先进先出的线性表 二、题 2.5 150 逆波兰表达式求值 很有意思的一道题&#xff0c;将中缀表达式 4 13 / 5&#xff0c;转化为后缀表达式之后&#xff1a;["4", &qu…

深入理解机器学习——过拟合(Overfitting)与欠拟合(Underfitting)

分类目录&#xff1a;《深入理解深度学习》总目录 机器学习的主要挑战是我们的算法必须能够在先前未观测的新输入上表现良好&#xff0c;而不只是在训练集上表现良好。在先前未观测到的输入上表现良好的能力被称为泛化&#xff08;Generalization&#xff09;。通常情况下&…

测试需求平台6-数据持久化与PyMySQL使用

✍此系列为整理分享已完结入门搭建《TPM提测平台》系列的迭代版&#xff0c;拥抱Vue3.0将前端框架替换成字节最新开源的arco.design&#xff0c;其中约60%重构和20%新增内容&#xff0c;定位为从 0-1手把手实现简单的测试平台开发教程&#xff0c;内容将囊括基础、扩展和实战&a…

信息安全技术 健康医疗数据安全指南 付下载地址

声明 本文是学习GB-T 39725-2020 信息安全技术 健康医疗数据安全指南. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 数据使用管理办法示例 第一章 总则 第一条 为规范数据使用流程&#xff0c;根据国家相关法律法规及相关规定&#xff0c;特制定本…

imgaug Augment Polygons 对标注图片和polygons的数据增强

对于本地化进行图像的增强&#xff0c;大家都是非常好操作的。但是&#xff0c;对于标注信息一起增强&#xff0c;还是稍微有一些难度的&#xff0c;麻烦很多。 我是遇到一个数据集非常少的任务&#xff0c;只有40张图。就直接标记了去训练&#xff0c;发现几乎不拟合&#xf…