多兴趣推荐召回模型:ComiRec

news/2024/3/29 16:27:13/文章来源:https://blog.csdn.net/sgyuanshi/article/details/130330206

前言

多兴趣向量召回系列:

通过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.luyixian.cn/news_show_102319.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ERROR org.springframework.web.context.ContextLoader

项目启动时报错: ERROR org.springframework.web.context.ContextLoader - Context initialization failed java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotationUtils.clearCache() 原因分析 这个错误的原因可能是因为 Spring 的不同…

Go 语言进阶与依赖管理

作者:非妃是公主 专栏:《Golang》 博客主页:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录 一、语言进阶1. 并发和并行2. 协程(Goroutine…

Ubuntu20.04软件安装大全

目录 Ubuntu20.04 软件安装大全前言1. Windows和Ubuntu双系统安装1.1 下载Ubuntu系统镜像1.2 磁盘分区1.3 GPT分区安装Ubuntu1.4 系统完成后的一些设置1.5 遇到的一些小bug 2. 换源2.1 apt换源2.2 pip换源 3. 显卡驱动安装3.1 卸载显卡驱动3.2 准备工作3.3 驱动安装3.4 验证 4.…

Python自动发送消息小脚本,可用于各种聊天框~

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,YOLO,活动领域博主爱笑的男孩。擅长深度学习,YOLO,活动,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typecollect 个…

2023-04-23 算法面试中常见的动态规划问题

动态规划 1 什么是动态规划 以菲波那切数列求和为例,通过 1.普通的递归2.引入记忆数组memo3.自下而上地解决问题,即动态规划 动态规划的定义 dynamic programming (also known as dynamic optimization) is a method for solving a complex problem by…

C嘎嘎~~ 【初识C++ 下篇】

初识C 下篇 1.引用1.1引用的概念1.2引用的特点1.3常引用1.4引用使用的场景1.5引用和指针的区别 2.指针空值 --- nullptr3.内联函数3.1 内联函数的概念3.2内联函数的使用场景3.3内联函数的特性 1.引用 1.1引用的概念 相信大家小时候, 肯定有小名、绰号、亲朋好友的昵…

Zuul源码解析(二)

Zuul 的自动配置 ZuulProxyAutoConfiguration 如何触发 如上图,在 spring.factory 中配置 ZuulProxyAutoConfiguration 自动配置了,直接点进去 如上图所示,发现这有个条件注解,需要有 org.springframework.cloud.netflix.zuul.Zu…

“支付+SaaS”赋能传统产业数字化转型

易观:传统支付业务利润空间在政策监管和市场竞争下不断被压缩,多家上市支付机构逐步将业务经营重点转移切入到企业交易环节,为企业提供包括SaaS服务、行业解决方案、营销服务及金融科技服务等在内的企业服务收入成为新的增长点。 伴随着“十四…

Linux网络服务之yum仓库

目录 一、yum仓库简介二. ftp搭建yum源三. 搭建国内在线源四. 本地源和在线yum同时使用五. 通过缓存的方式保存所下载的软件包六 . 制作yum仓库 一、yum仓库简介 yum是一个基于RPM包(是Red-Hat Package Manager红帽软件包管理器的缩写)构建的软件更新机…

Java入门教程||Java 继承||Java 重写(Override)与重载(Overload)

Java 继承 继承是所有 OOP 语言和 Java 语言不可缺少的组成部分。 继承是 Java 面向对象编程技术的一块基石,是面向对象的三大特征之一,也是实现软件复用的重要手段,继承可以理解为一个对象从另一个对象获取属性的过程。 如果类 A 是类 B …

Automa自动化爬取文本(一)

目录 介绍 下载地址 安装教程 爬取百度热搜 介绍 Automa 是一个免费、开源的 Chrome 扩展,它通过目前流行的 No Code 无代码方式,只需要拖拽模块就实现了浏览器自动化,比如自动填写表格、执行重复性任务。 在工作中,如果我们…

learn_C_deep_5 (语句和表达式的概念、if语句的多种语法结构、C语言有没有布尔类型、“零值”的比较)

目录 语句和表达式的概念 if语句的多种语法结构 注释的便捷方法(环境vs) if语句执行的过程 逻辑与&& 逻辑或|| 运算关系的顺序 ​编辑 C语言有没有布尔类型 C99标准 sizeof(bool)的值为多少? _Bool原码 BOOL、TRUE、…

ERTEC200P-2 PROFINET设备完全开发手册(9-2)

9.2 运行AC1/AC4参考代码 修改源代码usrapp_cfg.h的宏为 #define EXAMPL_DEV_CONFIG_VERSION 44 编译后下载到评估板运行AC4示例程序 在TIA中导入GSDML-V2.35-Siemens-ERTEC200pApp44-20210623.xml。新建项目,添加PLC和Devkit设备。 按照如下图所示配置模块&am…

基于vfw的局域网语音聊天室系统源码论文

语音视频聊天 UDP套接字的运用 在实现语音视频聊天时,采用的是基于UDP套接字的点对点模式,而UDP面向的是无连接的数据服务,其套接字的使用如图10所示。 图10 UDP套接字的使用 视频的捕获 利用VFW接口,视频捕获可以分为以下几个步骤: 建立视频采集窗口…

stm32在SDIO模式下SD写入错误的问题

1、问题描述 使用FAT32 f_write 多次执行写操作时,会报FR_DISK_ERR错误,而且是刚开始写不报错,写几次后会一直报错。 设断点跟踪到HAL_SD_WriteBlocks中,在调用SDMMC_CmdWriteMultiBlock时,会报SDMMC_ERROR_TX_UNDERR…

【MYSQL】Java的JDBC编程(idea连接数据库)

1. 配置 (1)新建一个项目 (2)Build System 那里选择Maven,下一步Create (3)配置pom.xml文件 首先查看自己的MYSQL版本:进入MySQL命令窗口 我的MYSQL版本是8.0版本的. 下一步,…

C/C++占位符,%x和%p的区别

遇到的问题 今天遇到了一个很奇怪的问题&#xff0c;当使用malloc分配了一个堆空间后&#xff0c;分别尝试用cout和printf尝试打印该地址&#xff0c;出现了两个地址不一样的情况&#xff1a; int *pp (int*)malloc(10*sizeof(int)); *pp 1234; cout << pp << …

常用数据加密

一、加密和解密 1、 加密 数据加密的基本过程&#xff0c;就是对原来为明 的文件或数据按某种算法进行处理&#xff0c;使其成为不可读的一段代码&#xff0c;通常称为 “密文”。通过这样的途径&#xff0c;来达到保护数据不被 非法人窃取、阅读的目的。 2、解密 加密的逆…

2023年,人工智能和数据训练呈现哪些新趋势?

最近&#xff0c;多才多艺的“全能网友”ChatGPT一次次火出圈。未来人工智能将以多快的速度、发展到何种地步&#xff1f;人们已经开始坐下来认真地探讨和思考。 我们生活在这个日新月异的时代。新的一年&#xff0c;人工智能的真正能力和应用场景又发生了哪些演进&#xff1f;…

Java性能优化之序列化优化

1、Java 序列化及其缺陷 Java 提供了一种序列化机制&#xff0c;这种机制能够将一个对象序列化为二进制形式&#xff08;字节数组&#xff09;&#xff0c;用于写入磁盘或输出到网络&#xff0c;同时也能从网络或磁盘中读取字节数组&#xff0c;反序列化成对象&#xff0c;在程…