1. 概述
在工业界,一个完好的引荐系统中一般包含两个阶段,分别为召回阶段和排序阶段。在召回阶段,依据用户的爱好从海量的产品中去检索出用户(User)可能感爱好的候选产品( Item),满意引荐相关性和多样性需求。在排序阶段,依据不同的方针,如CTR,CVR,时长等对候选出的产品进行打分。现在,关于用户爱好的建模,一般是从用户的前史行为中挖掘出用户爱好,以当时的深度学习模型为例,一般是将User的前史行为数据embedding到一个固定长度的向量中,以此表明该用户的爱好。然而在实践环境中,一个用户的爱好一般是多样的,运用单一固定长度的embedding向量难以刻画用户爱好的多样性。Multi-Interest Network with Dynamic routing[1](MIND)用户多爱好建模网络替代了原先的单一固定长度embedding向量,取而代之的是用户的多爱好向量。在MIND中,主要的创新点在于:
- 经过Mulit-Interest Extractor Layer获取User的多个爱好向量表达,并选用动态路由(Dynamic Routing)的办法自适应地将User前史行为聚合到User爱好表达向量中;
- 经过Label-Aware Attention机制,指导网络学习到用户的多爱好Embedding向量;
2. 算法原理
2.1. MIND模型的网络结构
MIND模型的网络结构如下图所示:
MIND的网络结构与Youtube的召回网络结构[2]根本一致,Youtube的召回网络结构如下图所示:
不同点主要是在多爱好抽取层Mulit-Interest Extractor Layer和Label-Aware Attention机制。
2.2. Mulit-Interest Extractor Layer
多爱好抽取层的意图是对用户前史行为的item抽取出多个爱好向量表达,一般选用聚类的进程将用户的前史行为聚类到多个簇中,一个簇中的item比较靠近,该簇代表了用户爱好的一个方面。在MIND中,为了实现这样的聚类进程,运用到了胶囊网络(Capsule Network)。
2.2.1. 胶囊网络(Capsule Network)
什么是胶囊网络(Capsule Network)呢?参照参阅[3],对胶囊网络做简略介绍。关于一个一般的神经网络是由神经元组成,每个神经元中是一个详细的值,如下图的左侧图所示;而在胶囊网络中是由被称为Capsule的根本单元组成,与神经元不同的是Capsule中存储的是向量,如下图的右侧图所示。
在上图的胶囊网络中,蓝色的Capsule的输入是黄色的Capsule和绿色的Capsule的输出,分别为向量v1v^1和向量v2v^2,蓝色的Capsule的输出是向量vv。
2.2.2. 动态路由(Dynamic Routing)
在神经网络中,网络的权重w1,w2,⋯ ,wnw_1,w_2,\cdots ,w_n是在网络的backpropagation进程中学习到的。关于胶囊网络,其进程与神经网络有点不一样,借鉴参阅[3]中的图,结合参阅[1]中的实例,有如下的图:
假定存在两层的胶囊,当时的第hh层的胶囊如上图中的蓝色部分,其输入为第ll层,且上层的输出向量为c→il∈RNl1\overrightarrow{c}_i^l\in \mathbb{R}^{N_l\times 1},且i∈{1,⋯ ,m}i\in \left\{1,\cdots ,m \right\},对应到第hh层的输出向量为c→jh∈RNh1\overrightarrow{c}_j^h\in \mathbb{R}^{N_h\times 1},且j∈{1,⋯ ,n}j\in \left\{1,\cdots ,n \right\},在上图中,咱们选取其间一个第hh层的输出向量c→jh\overrightarrow{c}_j^h。z→jh\overrightarrow{z}_j^h的计算进程如下:
其间,矩阵Sij∈RNhNlS_{ij}\in \mathbb{R}^{N_h\times N_l}是需要学习的参数,可经过网络的backpropagation进程学习,衔接权重wijw_{ij}在胶囊网络中被称为coupling coefficients,不是在网络中学习得到的。终究经过一个非线性的squash函数得到终究的胶囊的输出向量c→jh\overrightarrow{c}_j^h:
Squash函数的作用是相当于对向量z→jh\overrightarrow{z}_j^h做归一化的操作,当至此完成了胶囊网络的前馈进程,然而关于衔接权重却并不知道是怎么得到的,为了求得衔接权重需要运用到动态路由(dynamic routing)的进程,动态路由其实是一个迭代的进程,首要定义the routing logit bijb_{ij}:
那么,wijw_{ij}能够由bijb_{ij}定义:
详细进程如下面的伪代码所示:
2.2.3. 怎么理解聚类进程
在参阅[4]中详细论说了动态路由与K-Means聚类算法之间的关系,简略来说Capsule所运用的聚类算法,其实是K-Means的变种。经过直观的理解这个进程,首要关于K-Means,为了与上面的Dynamic Routing进程对应,假定原始的样本为eie_i,其间i∈{1,⋯ ,m}i\in \left\{1,\cdots ,m \right\},存在KK个聚类中心uju_j,其间j∈{1,⋯ ,K}j\in \left\{1,\cdots ,K \right\},K-Means的方针是将mm个原始样本e1,e2,⋯ ,eme_1,e_2,\cdots ,e_m划分到KK个类中,使得类内的间隔最小,即:
其间wijw_ij表明样本eie_i是否属于聚类jj,因此wij∈{0,1}w_{ij}\in \left\{0,1 \right\}。聚类中心uju_j为:
与Dynamic Routing中的u→j\overrightarrow{u}_j的更新有两点不一样,第一,计算wijw_{ij}的办法,第二是计算最终结果,在K-Means中是直接求平均,而在Dynamic Routing中,u→j\overrightarrow{u}_j选用的是squash函数。
上述仅仅从直观上对比了两个进程,详细的数学上的论说能够拜见参阅[4]。
2.2.4. 动态爱好个数
关于不同的用户,其爱好的个数KK是不一样的,在参阅[1]中给出了计算特定用户uu的爱好个数Ku′K_{u}^{‘}
2.3. Label-aware Attention Layer.
经过多爱好提取器层,对用户行为序列得到了用户的多个爱好向量,为了评价多个爱好向量对方针Item相关度及贡献度,在[1]中规划Label-aware Attention机制来衡量方针Item选择运用哪个爱好向量,其详细的表达式如下:
其间,powpow表明的是指数函数,pp是一个调理attention分布的参数。
3. 总结
在MIND中,经过Mulit-Interest Extractor Layer获取User的多个爱好向量表达,并选用动态路由(Dynamic Routing)的办法自适应地将User前史行为聚合到User爱好表达向量中;最终经过Label-Aware Attention机制,指导网络学习到用户的多爱好Embedding向量。
参阅文献
[1] 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.
[2] 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.
[3] 14.胶囊网络(Capsule Network)
[4] 再来一顿贺岁宴:从K-Means到Capsule
[5]. 引荐系统召回模型之MIND用户多爱好网络