微软多兴趣召回:Octopus

Octopus: Comprehensive and Elastic User Representation for the Generation of Recommendation Candidates

背景:

多兴趣通道(channel)结构的多兴趣召回模型在兴趣通道数量上面存在两个问题

  1. 兴趣通道较少,不能充分学习到用户的多个兴趣。
  2. 兴趣通道较多,很多兴趣通道可能和用户兴趣不相关,这样会引入很多不相关的候选集,带来噪声;固定的 topK 策略会导致有噪声的兴趣也会召回到对应的候选集,从而挤占整体相关兴趣的候选数量,造成整体相关候选集数量下降;而且线上耗时和兴趣通道数据是线性相关,兴趣通道越多造成的耗时越大。

在这里插入图片描述

其实说的更简单点,2 个问题:就是多兴趣召回里面,不同用户产出的多个兴趣数量是固定的,没有个性化;每个兴趣向量召回的 topK 个候选,没有考虑不同兴趣的重要度

即如何实现个性化的兴趣数量、如何实现根据兴趣重要度去个性化选择候选数量。

解决方案:

预设多个兴趣通道,但是根据用户历史行为来激活部分兴趣通道,对激活的兴趣通道计算用户的兴趣向量。同时根据兴趣重要度来决定每个兴趣拉取候选集的 quota。

方案详情:

整体结构图如下:
在这里插入图片描述

以上面的结果图为例,预设 M(图中M=8) 个全局的相互正交的兴趣通道,设兴趣向量的维度为 d,

解决第一个问题:如何实现不同用户的兴趣数量个性化
兴趣通道正交

怎么保证各个兴趣向量之间的正交性呢,即怎么保障 M 个兴趣通道对应的兴趣向量矩阵 H ∈ R M × d \mathbf H \in R^{M \times d} HRM×d为正交矩阵,可以通过迭代的方式来,用户行为序列矩阵为 Θ ∈ R N × d \mathbf \Theta \in R^{N \times d} ΘRN×d
通过求兴趣向量矩阵正交基得到
a r g m i n ∑ Θ ∣ ∣ θ − θ H T H ∣ ∣ 2 argmin \sum_{\Theta} \vert \vert \theta - \theta \mathbf H^T \mathbf H \vert \vert_2 argminΘ∣∣θθHTH2
另外通过正则项约束来进一步保证兴趣通道向量矩阵的正交性,其中 I ∈ R M × M \mathbf I \in R^{M \times M} IRM×M是单位矩阵
∣ ∣ H H T − I ∣ ∣ 2 \vert \vert \mathbf H \mathbf H^T - \mathbf I \vert \vert_2 ∣∣HHTI2

兴趣激活

假设用户序列长度为 N,首先将每个序列都投影到 M 个兴趣通道上面,即计算每个序列在 M 个兴趣通道上面的注意力分数(论文中用的是点乘),分数最大的兴趣通道作为激活的兴趣通道,用户 N 个序列就会得到 N 个注意力分数最大的通道,当然只有 M 个通道。以上图为例(M=8,N=7),有 3 个序列在兴趣通道 2 上面计算得到的注意力分数最大,有 2 个序列在兴趣通道 6 上面注意力分数最大,剩下还有 2 个序列在兴趣通道 7 上面注意力分数最大, 这 N=7 个序列行为总共激活了 3 个(兴趣通道 2、6、7)兴趣通道,那么这个用户最后产出的多兴趣数目为 3。这样就把最相关的一些兴趣通道给激活出来了,相关性弱的兴趣通道不会参与候选集召回。

兴趣聚合

上图中,序列行为 1、2、3 激活了兴趣通道 2,序列行为 3、4 激活了兴趣通道 6,序列行为 5、6 激活了兴趣通道 7。最终的用户兴趣向量通过 attention 的方式计算得到。第 l l l个兴趣向量 h l ∈ H h_l \in \mathbf H hlH由激活第 l l l个兴趣通道的序列行为集合根据新计算的注意力分数得到,计算方式如下

ϕ l = ∑ x i ∈ X a i , l θ x i \phi_l = \sum_{x_i \in \mathbf X} a_{i,l} \theta_{x_i} ϕl=xiXai,lθxi

a i , l = exp ⁡ s i m ( θ x i , h l ) ∑ x j ∈ X exp ⁡ s i m ( θ x j , h l ) a_{i,l} = \frac { \exp {sim( \theta_{x_i}, h_l)}} { \sum_{x_j \in \mathbf X} \exp {sim( \theta_{x_j}, h_l)} } ai,l=xjXexpsim(θxj,hl)expsim(θxi,hl)
比如,第一个激活的兴趣通道 2,产出的用户兴趣向量是序列 1、2、3 在兴趣通道 2 上面的注意力权重,然后根据权重乘以行为向量,聚合得到第一个兴趣向量。

训练目标,本来是用户向量尽可能的学的好,即和 target物料向量在向量空间尽可能的接近,向量空间反应了相关性,向量空间距离最接近表示相关性最高,但是多个兴趣向量就不是这样了,因为用户兴趣是多样的,我们只需要选出 target 物料向量和兴趣向量距离最小的那个兴趣向量,然后最小化这个兴趣向量和 target 物料向量的距离,至于其他用户兴趣向量,不用 care。

解决第二个问题:如果实现不同兴趣对应的候选集数量个性化

2 种解决办法

在这里插入图片描述

第一个:竞争式(Competition)

M 个兴趣向量,每个用户兴趣向量先各自召回 J 个候选,计算用户兴趣向量和各自候选集的距离,会得到 M*J 个距离,然后选择 topK 个距离最小的候选。不过有个问题,不同兴趣和候选集的距离可能不可比,比如某个兴趣,和它对应的候选距离天然都要小些,那么这个兴趣对应的候选最终会全部进入 topK 集合中,其他的兴趣可能因为距离天然要大些,可能一个也不会进入到最终的 topK 候选中。

第二个:分配式(Allocation)

从效率考虑,用一个 MLP 来建模兴趣重要度。将前面产出的多个兴趣向量作为模型输入,每个兴趣向量经过 MLP( d × d d \times d d×d d × 1 d \times 1 d×1后经过 sigmoid 激活),计算每个用户兴趣向量的相对重要性

γ i = M L P ( ϕ i ) ∑ M L P ( ϕ j ) \gamma_i = \frac { MLP(\phi_i)} { \sum MLP(\phi_j)} γi=MLP(ϕj)MLP(ϕi)

然后找到和 target 物料向量和距离最小的兴趣向量 ϕ k \phi_k ϕk,设置 label 为 1,计算 γ k \gamma_k γk和 1 之间的交叉熵loss

兴趣重要度模型训练好之后,输入用户的多个兴趣向量,可以得到每个兴趣向量经过网络之后的兴趣重要度得分 γ i \gamma_i γi,根据重要度来决定候选 quota 数量的分配,第 l l l个兴趣向量对应的比例,计算如下

β l = ( γ l ) α ∑ ( γ j ) α \beta_l = \frac { (\gamma_l)^{\alpha} } { \sum (\gamma_j)^{\alpha} } βl=(γj)α(γl)α

其中 α \alpha α是超参数

在这里插入图片描述

实验
不同通道数量的比较

在这里插入图片描述

消融实验

+Orth 表示加兴趣通道正则化
+Group 表示加兴趣激活
OCT© 竞争式
OCT(A) 分配式
在这里插入图片描述

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

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

相关文章

学c++对Python有帮助吗?

学习C对Python编程确实有帮助,尽管这两种语言在许多方面有很大的不同。以下是学习C可能对Python编程产生帮助的几个方面: 理解底层概念:C是一种更接近硬件的编程语言,它要求程序员更深入地理解内存管理、指针、数据类型等底层概念…

【鸿蒙 HarmonyOS 4.0】应用状态:LocalStorage/AppStorage/PersistentStorage

一、介绍 如果要实现应用级的,或者多个页面的状态数据共享,就需要用到应用级别的状态管理的概念。 LocalStorage:页面级UI状态存储,通常用于UIAbility内、页面间的状态共享。AppStorage:特殊的单例LocalStorage对象&…

链路负载均衡之DNS透明代理

一、DNS透明代理 一般来说,企业的客户端上都只能配置一个运营商的DNS服务器地址,DNS服务器通常会将域名解析成自己所在ISP内的Web服务器地址,这将导致内网用户的上网流量都集中在一个ISP的链路上转发,最终可能会造成链路拥塞&…

java数据结构与算法刷题-----LeetCode637. 二叉树的层平均值

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 广度优先2. 深度优先 解题思路:时间复杂度O(n)&am…

计算机网络-典型网络组网架构

前面基本网络知识已经能够满足中小企业的需要了,今天来看下一些基本网络组网架构。 首先网络是分层架构,从接入层到汇聚层再到核心层,然后接入运营商出口。内部包括有线网络、无线网络,出口一般可以使用路由器或者防火墙进行安全防…

证明高维度神经网络模型是低纬度神经网络模型的加和

神经网络中矩阵乘法的分解与应用 启发标题:神经网络中矩阵乘法的分解与应用摘要:引言:方法:实验:结论:参考文献:附录1附录2实验数据 启发 理论上 更具矩阵乘法 A[p,mn]B[mn,q]C[p,q] Acat(A[:,…

Linux操作系统的vim常用命令和vim 键盘图

在vi编辑器的命令模式下,命令的组成格式是:nnc。其中,字符c是命令,nn是整数值,它表示该命令将重复执行nn次,如果不给出重复次数的nn值,则命令将只执行一次。例如,在命令模式下按j键表…

AutoSAR(基础入门篇)13.6-Mcal Adc配置(上)

目录 一、AdcGeneral 二、AdcSafety 三、AdcConfigSet 在之前的章节中,咱们在Port的配置中讲解了工具的初步使用与一些技巧;在Dio的配置中讲解了生成的代码的内容;在mcu的配置里讲解了外部一些 第三方简便工具的使用。这一次咱们配合ADC模块,就详细的讲讲每个配置项的作…

游戏引擎用什么语言开发上层应用

现在主流的游戏引擎包括: 1、Unity3D,C#语言,优点在于支持几乎所有平台 丹麦创立的一家公司,现已被微软收购。在中国市场占有率最高,也是社群很强大,一般解决方案也能在网上找到,教程丰富。物理…

【PHP趣味技术】分分钟教会你轻松采集PDF文本内容 《重庆话真的太吃皮老!》

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享博主 🐋 希望大家多多支持一下, 我们一起学习和进步!😄 🏅 如果文章对你有帮助的话,欢迎评论 💬点赞&a…

CentOS 7.9 二进制离线部署 Kubernetes v1.28.7

文章目录 1. 简介2. 软件版本3. 预备条件3.1 安装操作系统3.2 检查内核3.3 配置主机名3.4 配置互信3.5 配置 yum(可选)3.6 配置 NFS(可选) 4 下载介质4.1 下载 k8s 介质4.2 下载镜像4.3 介质打包 5. 安装镜像仓库(可选)6. 镜像入库…

#QT(智能家居界面-界面切换)

1.IDE:QTCreator 2.实验 3.记录 (1)创建一个新界面(UI界面) (2)可以看到新加入一个ui文件,双击打开,设置窗口大小与登录界面一致 (3)加入几个PUS…