一、业务背景
随着短视频和信息流等场景的兴起,用户在这些场景中产生了大量的行为序列,包括曝光、播放、点击、点赞和关注等。这些序列本身就具备很高的价值。因此涌现出了许多序列模型,如 YouTube DNN [1]、GRU4REC [2]、MIND [3]等。这些模型通过对用户行为序列进行建模,以提取用户的兴趣。其中,MIND 模型具有独特的特点。
MIND 模型是 2019 年由阿里巴巴团队提出的,其独特之处在于直接建模了用户的多个兴趣,而不是得到一个统一的用户表达。该模型受到了胶囊网络 CapsuleNet 的启发,通过胶囊间的路由计算来提取用户的多个兴趣。在 2020 年,阿里巴巴团队和清华大学团队联合对 MIND 模型进行了改进,提出了 ComiRec 模型 [4]。主要改进在于推理阶段。原本的 MIND 在推理得到多个用户兴趣表达后,分别进行 ann 检索以得到召回结果。而 ComiRec 模型则对多个兴趣检索后的检索结果进行了融合,从而进一步保证了召回结果的多样性。
根据 MIND 模型论文,我们进行了复现并将该模型应用于我们的墨鱼丸小视频场景中。在评估过程中,我们发现原始 MIND 模型存在一些问题,例如胶囊数与用户序列长度之间的强绑定关系以及胶囊之间的差异性不强。为了解决这些问题,我们在初始化胶囊的位置和数量上进行了改进,并改进了路由算法的计算方式,以增加胶囊之间的差异度。
二、原 MIND 模型以及其发展
上图为原 MIND 模型结构,该模型主要分为以下几个模块,分别是 Embedding Layer、Multi-interest Extraction Layer(最重要)、Label-aware Attention Layer、Serving,对于 Embedding Layer 部分,该模型与目前其他序列模型一样,在此不做赘述。我们下面对其他几个模块依次进行介绍。
1、Capsule 胶囊网络以及 MIND 改造
原 MIND 模型的 Multi-interest Extraction Layer 主要参考的是 capsule 网络 [5]。胶囊即是一小群神经元的聚集,其共同输出一个完整的向量。不同于原始的 Dense 结构,胶囊采用路由的方式得到,并进行反向传播优化,路由算法如下:
这里需要注意,每个下层胶囊 i 与上层胶囊 j 都对应一个双线性映射矩阵 W_ij。这里胶囊网络考虑下层胶囊 i 与上层胶囊 j 之间的 W_ij 矩阵,是仿照了神经网络中上层神经元 i 与下层神经元 j 之间的权重 w_ij。由于每个胶囊是多维的,则胶囊间路由采用的是矩阵而非一个标量。
基于该方法,MIND 模型对胶囊的路由进行了改进:
对于共享使用一个双线性映射矩阵,MIND 作者是考虑到在推荐场景中,用户的行为序列是不定长的,且作者希望多个兴趣映射到同一个空间下。另一方面,我们认为 MIND 作者假定了位置信息在其推荐场景中并不重要,无需对每个序列的位置设计不同的映射矩阵。
由于采用了共享双线性矩阵,如果 routing logit b_ij 依然采用零初始化,则第一轮的上层胶囊会全部一样。以后也会一直一样,代表所有底层胶囊的均值。所以对于 routing logit b_ij 采用了正态随机初始化。
论文也提出了一种动态调整胶囊个数的方式,该方式假设了用户合适的胶囊数应当与用户序列数呈现次线性关系。实际上用户合适的胶囊数与业务场景和数据的内部结构相关,很难一概而论。
2、Label-aware和serving
在 label-aware 阶段,对于候选 item,通过 attention 的方式确定每个兴趣重要程度。在计算 softmax 之前,对 logit 进行了以 p 为指数的运算,通过调节 p 来调整多个兴趣权重的差异程度。模型损失函数采用对数 softmax。需要指出的是:
- 多个用户兴趣采用 attention 方式聚合是必要的,该方式使得用户序列中的小众兴趣在更新时免受主要兴趣的影响和掩盖,从而进行更有效的更新和兴趣捕捉。我们认为,label-aware 的 attention 是多兴趣捕捉的关键所在。
- 以 p 为指数的运算在实际训练中是有限制的,选取的 p 应满足 x^p 为单调函数,使得得分通过函数后依然保序。可替换成对得分除 τ>0 以控制。
在 serving 阶段,MIND 模型分别计算各个兴趣 emb 做向量检索,以获取 topN 资源。在 MIND 后续工作中,阿里巴巴团队在多个兴趣索引的 topN 个结果如何合并方面进行了研究和改进。
3、优势以及存在的问题
MIND 模型优势在于其显性建模了用户多个兴趣,其论文对比说明,建模多个用户向量表示对于推荐是有很大帮助的。尤其是电商这类资源种类较多,用户兴趣较为广泛的推荐场景。
我们通过分析和实验也发现原 MIND 模型存在以下问题:
- 胶囊数的强假设:MIND 中假设了胶囊数与用户序列长度存在次线性关系,有一定道理,但对用户序列内部结构考虑不足。
- 胶囊初始化的随机性:routing logit 随机导致胶囊初始化的随机,稳定性不足。
- 胶囊间的相似性:胶囊间的相似性过高,可能会导致模型重复捕捉相同的兴趣,兴趣召回覆盖不足。
- 胶囊内资源内容的一致性不足:胶囊内的资源内容可能缺乏一致性,解释性不足。
三、MIND 改进过程
基于以上的缺点,我们的改进从胶囊初始化、路由计算过程、数据与训练方式三个方面展开。
1、胶囊初始化改进
胶囊路由的过程很容易联想到聚类计算的过程。以聚类算法 Kmeans 为例,在该算法中胶囊的初始化位置对聚类结果的影响是巨大的,类比胶囊网络我们也认为胶囊初始化位置对于胶囊路由计算影响是巨大的。实际上原始 mind 论文并不直接对胶囊做初始化,而是对 logit routing 矩阵做初始化,进而计算出第一轮胶囊的结果。这种方式本身并没有对初始胶囊之间的位置关系进行约束和限制,而我们希望初始化的胶囊之间尽量保持远离,以让其尽可能覆盖不同兴趣。所以我们首先采取了与 kmeans++ 中一样的 maxmin 类似的初始化策略,直接初始化胶囊位置。
(1)maxmin方法
设一个用户全部 items 为 S,则该集合就是我们胶囊的候选集。首先我们在 S 中随机选择一个 item,作为第一个胶囊的初始化位置。假设已选择出的全部胶囊为 C,然后在剩余的全部 items 中,分别计算各个 item 与当前胶囊集合 C 的距离。这里需要说明的是,我们定义点 x 到集合 C 的距离如下
我们选择剩余的全部 items 中,将距离最远的 item 作为本轮选出的胶囊,加入到胶囊集合 C 中,即
该过程一直迭代下去直到选择出的胶囊数达到所需胶囊数。其算法步骤如下:
- 根据用户序列长度计算用户所需的胶囊数 K。
- 随机选择一个 item 作为第一个初始化胶囊,将目前全部已经选出的胶囊记为 C。
- 剩余全部 items 计算其与C距离。
- 取与 C 距离最大的点作为下一个胶囊,将其加入到 C 中。
- 重复进行 3-4 直到 C 中的胶囊数达到 K 则停止。
我们下面也给出了一个例子直观地说明该方法的初始化结果,其中蓝色的点由两种分布生成,分别在[-10,10]×[-10,10]上按照均匀分布采样 100 个点,再分别以(±5,±5)为期望,1 为方差的四个正态分布中各采样 20 点,总共 180 个点。通过 maxmin 初始化方法采样 4 个胶囊得到图中橙色点,最终路由后的胶囊位置为图中的红点。
注意到由于我们生成的正态分布位于四个象限,而该初始化方法也分别在四个象限初始化了胶囊。经过胶囊路由计算后,四个胶囊也分别迭代到与其最近的点簇附近,该初始化方式基本上是符合预期的。
但是该方法依然存在缺点:
- 胶囊数K依然取决于用户序列长度。
- 初始中心位置边缘,离群点风险增大,序列较短时问题更严重。
- 随机性,每次初始化不同,不保证收敛结果一致。
(2)markov 方法
重新审视该问题,对于下面的图,其各个点的生成方式与 mm 方法中图的生成方式相同。我们很容易观察到该图应该存在四个簇,而我们希望将该过程进行建模。
我们认为在整个表征空间内,点密度越大则这些点越有可能属于同一兴趣,其应当被同一胶囊覆盖。选择胶囊初始化位置实际上就是选择密度最大的点的“选点问题”。为了刻画一个点所处的位置密度,我们可以通过计算该点与其他点的相似程度来实现。而序列中两点的距离,则代表了序列中"选点问题”所需的全部结构信息。具体而言,如果一个点的邻居点数量越多,且邻居点与其相距越近,那么该点附近的密度就越高,因此该点应该被视为候选胶囊。基于这种想法,我们使用类似于 PageRank 算法中计算节点重要度的方法(既周边密度),该方法本质上是基于 markov 过程的图标签传递问题(graph label propagation)。
我们简单介绍一下离散的 markov 过程。首先离散的 markov 过程是一个随机过程,'离散'说明该随机过程在时间上存在众多离散的时刻 t_0<t_1<…<t_?,而非在时间上连续。对于时刻?,该过程存在对应的状态 x(t)。A 为 ?×? 的状态转移矩阵,其列和为 1,?_?? 代表的含义为 n 个点中第 j 个点经过一次转移以后到达第 i 个点的概率。那么在 ? 时刻,想获得 ?+1 时刻的状态,其计算公式为 ?_(?+1)=?*?_?,也就是说 ?+1 时刻的状态只与 ? 时刻状态以及转移概率有关,与之前时刻状态无关。
上述转移过程一直进行下去,在满足一定条件下,是可以停止的。也就是说存在一个状态 ?,使得 ?_(?+1)≈?_?,这时的状态就是马尔科夫平稳状态。
在我们的问题里,把 n 个点初始 t_0 时刻的状态 x(?_0)定义为全为 1 的向量,代表最开始每个点的重要程度都是均等的。我们通过构建点之间的相似矩阵,并对其做列归一化得到状态转移矩阵(确保收敛状态存在),通过多轮转移计算后得到平稳状态,即状态转移矩阵特征值为 1 的特征向量。
我们下面给出了上图 markov 平稳状态时各点重要度得分。很容易可以注意到,四个较为密集的簇得分最高,而较为疏远的点则得分很低。
基于各点的重要度,我们了进行胶囊的选择。我们参考了连续函数的极大值点的定义,即对于点 x,存在很小的 ϵ>0,使得以 x 为球心,ϵ 为半径的邻域内该点的值最大,则 x 是个极大值点。同样我们的胶囊选择方式为:对于点 x 以及给定的半径 r>0,首先在以 x 为球心,r 为半径的邻域内存在至少 2 个点(保证 x 不是孤立点),并且 x 的重要度是最大的,这样的 x 记为候选胶囊。在满足条件的候选胶囊中,优先选择邻居多的候选胶囊作为胶囊初始化点,并且选出的胶囊数不超过设置的最大胶囊数。
通过上述方式选择的胶囊如下图所示,总共选出四个候选胶囊,且胶囊位置都落在重要度较大的点簇中,该初始化方案符合我们的预期。
注意到该方式得到的胶囊数并非根据用户序列长度计算得到或者直接将胶囊数设置为超参数,而是取决于用户序列本身内部结构。并且该过程不含随机部分,即多次推理初始化结果一致。
我们把 markov 过程初始化胶囊方法流程汇总如下:
- 计算点和点之间的转移概率构建概率转移矩阵,给定各点初始重要度为 1。
- 计算 markov 平稳过程,得到平稳状态下各点重要度。
- 根据各点邻居数以及邻居重要度找到全部候选胶囊。
- 在不超过胶囊最大值的情况下,优先选择邻居数最多的候选胶囊作为初始化胶囊。
2、路由过程改造
对于路由过程,我们首先做了部分删减,汇总如下
- 删除双线性映射矩阵 S。
- Squash 函数更改为 L2-norm。
- Logit routing 矩阵不采用 softmax,而是保留每列最大值,其他值置为 0。
首先是删除了双线性映射矩阵 S,我们认为在多兴趣模型中,资源在序列中的位置并不重要,所以我们不考虑对每个上下层胶囊都设置不同映射矩阵 S_ij。其次 MIND 模型将 embedding layer 作为第一层胶囊,多个兴趣作为第二层胶囊,兴趣提取模块只有这两层胶囊。映射矩阵 S 始终作用于第一层胶囊上,这等价于对全部资源 embedding 做 S 为线性变换矩阵的线性变换,且 embedding 和 S 都需要学习,这是没必要的。因此我们直接删除了矩阵 S。
对于原 squash 函数,由于我们模型中都是通过 L2-norm 将 emb 模长变为 1,所以我们也不采用原论文中的 squash 函数,而是直接采用 L2-norm 运算。
最大的改动在于对 logit routing 矩阵的处理,该矩阵直接决定了各个行为序列到兴趣胶囊的权重大小。原始的 logit routing 矩阵是稠密的,即各序列 item 到各个胶囊都有贡献,这容易造成各个胶囊之间差异性不强,即便在这一步原 mind 论文做了 softmax 也只是让 item 到胶囊各个得分差异增加。我们通过只保留 item 到各个胶囊得分的最大值部分,其他置零,将该矩阵变成稀疏矩阵。通过该方式,每轮路由每个 item 只会贡献一个胶囊的更新。并且 logit routing 我们不再采用累加,而是直接每轮计算完后覆盖。
以上两个处理方式也是仿照了 kmeans 算法的更新方式。在 kmeans 中,每个 item 只能属于一个簇,其到其他簇的得分为 0。并且簇的本轮迭代只基于本轮各个簇下所属的 items 计算得到,不会考虑上一轮中该簇下面的 items。
3。数据与训练
序列模型或者语言模型的训练,本质上是学习序列中 token 的共现性,这个共线性可能是高阶的。我们今天讨论的模型,则希望在解决 token 共现性的同时,通过中间的一个隐因子来解释这种共线性。通过对隐因子的显式建模,来实现对用户行为中潜在兴趣点的捕捉,进而实现在推荐过程中对用户兴趣的控制。
(1)资源表达学习:
- 在完全的端到端学习中,资源的表达本质上体现资源在行为序列中的共现,而不保证在资源内容刻画上的一致性。出于对推荐结果可解释性的要求,我们使用资源预训练的 embedding 做初始化,并且在资源作为 input 时将该 emb 进行 fix 操作,即 stop gradient。同时,我们删除了胶囊网络中的双线性映射矩阵 S,进一步将兴趣点限定在资源原始语义空间的聚集。实验证明,这种操作虽然对模型做了极大的限定,但训练的有效性和可解释性有足够的保证。这一点在用户历史行为的跨度较大(几个月到半年不等),平台内容分布以及用户行为 pattern 在不断变化的情况下,尤其重要。
- 同时,当资源作为输出侧目标,用于 label-aware attention 计算及 sampled softmax 损失函数计算时,与输入层一致使用资源预训练表达初始化,并进行正常的梯度更新。这样的优势在于,初始与输入层表达一致,可以进行更有效的 label-aware attention 计算,而正常的梯度更新可以保证模型在框定语义空间一致的条件下,学习得到资源在语料中的显著性信息。
(2)负采样策略:
- 根据资源在语料中出现的频次的幂律分布(0~1)作为资源被采样为负样本的概率,以便于对语料中超头部的资源做较好的控制。一般来讲,幂律越大,对热门资源的打压效果越明显。
- 对于超冷门资源,由于我们的方案保证了内容的一致性和解释性,同时其作为负样本的概率极低,因此推理阶段进行胶囊的向量检索时很容易被排到靠前的位置。但有概率的地方就一定存在先验,我们为每个资源给定一个基础的先验频率 L。具体的值可以根据业务需要和语料分布灵活调整,该方法可以有效遏制推荐结果中的”翘尾“现象。
下图为我们最终改进后 MIND 的结构图:
四、实际建模效果
1、胶囊初始化实验效果
为验证我们提出的 markov 胶囊初始化效果,我们采用用户真实的行为序列,在该数据上进行 markov 胶囊初始化选择胶囊,并通过 t-SNE 算法进行降维后可视化,更加直观的呈现出我们的方法在真实场景的效果。在可视化图中,我们用资源的标签绘制散点图,黑色加粗的标签表示经过 markov 过程选择出的初始化胶囊。
我们下面抽取了两个用户序列作为例子,两个序列都是长行为序列。前者行为序列中的资源类型较为集中,主要是搞笑视频和动漫,后者则兴趣相对分散,有动漫、游戏、亲子、动物、剧情等类型。注意到对于长序列且兴趣较为集中的例子 1,只需 2-4 个胶囊就可以将其主要兴趣捕捉到,但是如果采用传统的基于序列长度计算所需胶囊个数的方式,则会强行将其分派到 7-8 个胶囊下。而在长序列且兴趣较为分散的例子 2 中,主要的几个兴趣均被胶囊捕捉到,胶囊也不会由于边缘点、孤立点的存在而偏离。
以下两个例子充分说明了,markov 胶囊初始化方法在自适应地确定用户胶囊数量和初始化位置的优势。
2、业务实际效果评估
在根据用户过去半年时间内发生的正向反馈行为进行多兴趣建模的召回中,我们发现除了在召回占比、正向反馈率等都有明显提升之外,最主要的收益体现在召回品类多样性以及单位曝光中覆盖的不同资源量及作者数量。
五、总结
本文主要针对阿里提出的多兴趣抽取模型的兴趣抽取过程进行迭代,在结合自身业务优化的诉求下,提出了将胶囊的随机映射初始化改为从底层胶囊选择的策略,同时提出了两种初始胶囊选择的方案。
从实际应用上看,maxmin 方案简单实用,在业务对兴趣点区分度要求不大,同时对边缘兴趣(探测、发现)有较高诉求的场景更为合适。而 markov 的方法在业务对用户兴趣覆盖度、区分度、显著性都有较高要求的场景较为合适,计算复杂度也略高。
六、参考文章
[1] Covington P, Adams J, Sargin E. Deep neural networks for youtube recommendations[C]//Proceedings of the 10th ACM conference on recommender systems. 2016: 191-198。
[2] Hidasi B, Karatzoglou A, Baltrunas L, et al. Session-based recommendations with recurrent neural networks[J]. arXiv preprint arXiv:1511.06939, 2015。
[3] Li C, Liu Z, Wu M, et al. Multi-interest network with dynamic routing for recommendation at Tmall[C]//Proceedings of the 28th ACM international conference on information and knowledge management. 2019: 2615-2623。
[4] Cen Y, Zhang J, Zou X, et al. Controllable multi-interest framework for recommendation[C]//Proceedings of the 26th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2020: 2942-2951。
[5] Sabour S, Frosst N, Hinton G E. Dynamic routing between capsules[J]. Advances in neural information processing systems, 2017, 30。