微软多兴趣召回:Octopus

本文介绍了一种名为Octopus的模型,用于解决多兴趣召回中的个性化需求和噪声问题。通过预设正交的兴趣通道,结合用户历史行为激活兴趣,同时考虑兴趣重要性来个性化召回候选集。模型使用正则化保证兴趣向量正交,并提出两种方法解决候选集数量个性化:竞争式和分配式。实验对比了不同通道数量和策略的效果。
摘要由CSDN通过智能技术生成

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) 分配式
在这里插入图片描述

  • 24
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值