- 第 1 期:DSSM、Youtube_DNN、SASRec、PinSAGE、TDM、MIMD
- 第 2 期:PinnerSAGE、ENSFM、MHCN、FFM、FNN、PNN
- 第 3 期:Wide&Deep、DCN、xDeepFM、DIN、GateNet、IPRec
本期收录模型速览
推荐系统是指利用电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程的系统。在广告、电商、信息流分发等业务场景中,推荐系统发挥了至关重要的作用,是帮助用户快速获得感兴趣的信息的关键,也是改进产品以吸引用户、提高用户粘性的关键。推荐系统把用户模型中的兴趣需求信息和推荐对象模型中的特征信息匹配,同时使用相应的推荐算法进行计算筛选,找到用户可能感兴趣的推荐对象,然后推荐给用户。为了实现精准推荐,首先要对用户进行画像。对用户画像打标签后,生成多维度、丰富、全面的用户标签,这些标签就是推荐系统中的特征,而这些特征就是推荐系统中的推荐算法/模型的输入数据。利用特征对推荐算法/模型进行离线训练,然后进行A/B测试后,获得最终的推荐算法/模型。后续还包括算法/模型的部署、冷启动等流程。
具体到推荐算法/模型部分,一般包括两大环节:召回和排序。
- 召回主要是指“根据用户的兴趣和历史行为,从海量的物品库里,快速找回一小部分用户潜在感兴趣的物品”。召回方法主要要求具备处理数据量大、处理速度快的能力。经典的召回方法包括基于统计的启发式召回和基于深度学习的向量召回方法。本报告主要聚焦于基于深度学习的召回方法。
- 排序则是指根据多类特征,使用模型进行个性化的推荐。排序环节还可以进一步细分为粗排、精排和重排。
推荐算法/模型在工业场景中应用主要面对下面这些问题:数据量庞大、训练环境低效、在线和离线环境的不一致、上线部署的困难等等。因此,一个好的推荐系统中一般会应用多个推荐算法/模型,而每个推荐算法/模型的最佳效果需要工程师在实践中摸索调试出来的,每个基础模型又有很多改良版本,针对不同的问题效果也可能不同。
我们在这篇报告中总结的是能够在推荐系统中应用的必备的TOP基础推荐算法/模型。
一、召回模型
1、 DSSM
DSSM(Deep Structured Semantic Models)也叫深度语义匹配模型,最早是在微软2013年发表的一篇应用于 NLP 领域中计算语义相似度任务的文章中提出的。DSSM是适用于广告推荐领域中的模型,其目的是从广告维度为广告主推荐一定数量的人群,从数量上看是从数亿级别人群中找出百万级人群用于投放广告,所以是召回模型。DSSM 原理很简单:获取搜索引擎中的用户搜索 query 和 doc 的海量曝光和点击日志数据,训练阶段分别用复杂的深度学习网络构建 query 侧特征的 query embedding 和 doc 侧特征的 doc embedding,线上 infer 时通过计算两个语义向量的 cos 距离来表示语义相似度,最终获得语义相似模型。这个模型既可以获得语句的低维语义向量表达 sentence embedding,还可以预测两句话的语义相似度。
如图1所示,DSSM使用一个DNN架构将原始文本特征映射到语义空间中的特征。DNN的输入(原始文本特征)是一个高维的术语向量,例如,查询或文档中的术语的原始计数,而DNN的输出是一个低维语义特征空间的概念向量。DNN模型用于网络文档的排名,具体包括:1)将术语向量映射到其相应的语义概念向量;2)将文档和查询之间的相关性分数计算为其相应语义概念向量的余弦相似度。
对于输入是英文的输入层,可以通过 Word Hashing 方式处理,该方法基于字母的 n-gram,主要作用是减少输入向量的维度。而对于输入是中文的输入层,还要增加额外的分词处理步骤。给定一个词(例如:good),首先在该词上添加词首和词尾的标记(例如:#good#)。然后,将该词分解为字母n-grams(例如,字母trigrams:#go, goo, ood, od#)。最后,用一个字母n-grams的向量来表示这个词。
DSSM 模型表示层使用的是 BOW(bag of words)词袋模型,没有考虑词序的信息,由图1可见,最下面的 Term Vector 到 Word Hashing 将词映射到 3W 维的向量空间中。然后分别经过两层 300 维度的隐藏层,最后统一输出 128 维度的向量。
最后,将 query 和 doc 统一转换成了两个 128 维的语义向量,接下来通过 cos 函数计算这两个向量的余弦相似度,公式如下:
其中,y_Q和y_D分别是查询和文档的概念向量。在网络搜索中,给定查询,文件按其语义相关性分数进行排序。使用点击数据对模型进行训练以获取参数,目的是使得点击概率最大(即最小化损失函数)。条件概率如下:
根据极大似然估计法,得出损失函数:
当前 SOTA!平台收录 DSSM 共 3 个模型实现资源。
2、 Youtube_DNN
Youtube_DNN是Youtube推出的一个视频推荐模型,属于一个应用场景驱动的模型。视频推荐任务中面临的问题包括:数据规模超大、视频(数据)更新速度快且对响应速度要求高、用户行为预测难度大(用户隐式反馈多、显式反馈少)。如图2所示,Youtube_DNN主要包括三个阶段:(1)召回层:从百万级视频中筛选出小部分视频;要求速度快;召回层根据用户历史观看、搜索等记录进行召回,以满足用户泛化的兴趣。(2)排序层:为了更精准地推荐给用户,这阶段需要更加复杂的模型和特征进行排序。(3)线下评估:评估指标有precision、recall、ranking loss;最终线上做A/B测试(指标:点击率、观看时间)。
在召回层,YouTube把推荐问题看作是一个超大规模多分类softmax问题,给定用户历史行为和上下文,学习用户嵌入,然后输入softmax生成召回层的候选集结果。完整的召回模型如图3所示。
YouTube_CNN输入的特征包括用户历史观看视频的嵌入向量、搜索词的嵌入向量、用户地理特征、用户设备特征和example age、人口属性特征。example age可以理解为视频的年龄:初始值设为0,随着时间的增长,记录视频的年龄。
然后,将输入的特征通过concat层连接起来,输入到三层ReLU神经网络中训练。使用常见的塔状设计,底层最宽,往上每层的神经元数目减半,直到 Softmax 输入层是 256 维(1024ReLU→512ReLU→256ReLU)。利用softmax层进行分类,定义为基于特定用户U 和其上下文 C,在时刻t,将视频库 V中指定的视频 w_t划分为第 i 类的概率:
softmax输出层不是做点击率预估,而是预测用户会点击哪个视频,即用softmax对视频进行分类,然后按照概率进行从大到小的排序,选取topN。输出层的维度和视频ID的嵌入向量维度相同,最终得到用户向量u。
图4是 Youtube_DNN的推荐模型架构。排序模型的作用是引入更多描述视频、用户以及二者之间关系的特征,达到对候选视频集合准确排序的目的。图4与图3的整体结构非常相似,主要的区别在于特征工程部分。排序模型中用到的特征包括:(1)impression video ID embedding: 当前要计算的video的embedding;(2)watched video IDs average embedding: 用户观看过的最后N个视频embedding的average pooling;(3)language embedding: 用户语言的embedding和当前视频语言的embedding;(4)time since last watch: 自上次观看同channel视频的时间;(5)#previous impressions: 该视频已经被曝光给该用户的次数。
当前 SOTA!平台收录 Youtube_DNN 共 4 个模型实现资源。
3、 SASRec
顺序动态是许多现代推荐系统的一个关键特征,这些系统试图根据用户最近执行的行动来捕捉他们活动的 "背景"。为了捕捉这种模式,有两种主要的方法:马尔科夫链(Markov Chains,MCs)和循环神经网络(RNNs)。马尔科夫链假定可以根据用户的最后(或最后几个)行动来预测他们的下一个行动,而RNN原则上允许发现更长期的语义。一般来说,基于马尔可夫链的方法在极其稀疏的数据集中表现最好,在这种情况下,模型的简洁性至关重要;而RNN在密集的数据集中表现更好,在这种情况下,更高的模型复杂性是可以承受的。本文的目标是平衡这两个目标,提出了一个基于自注意力的顺序模型(self-attention based sequential model,SASRec),它允许我们捕捉长期语义,使用注意力机制,根据相对较少的行动进行预测。在每个时间步长,SASRec试图从用户的行动历史中识别哪些项目是 "相关的",并利用它们来预测下一个项目。
在顺序推荐的设定中,给定一个用户的行动序列Su = ((S_1)u, (S_2)u, ..., (S_|Su|)u),预测下一个项目。在训练过程中,在时间步长t,模型根据之前的t个项目来预测下一个项目。将训练序列((S_1)u, (S_2)u, ..., (S_|Su|-1)u)转化为固定长度的序列s = (s_1, s_2, ..., s_n),其中,n代表模型可以处理的最大长度。如果序列的长度大于n,我们就考虑最近的n个动作。如果序列长度小于n,我们在左边重复添加一个 "padding "项,直到长度为n。创建一个项嵌入矩阵M∈R|l|xd,其中,d是潜在维度,并检索输入嵌入矩阵E∈Rnxd,E_i=M_si。一个恒定的零向量0被用来作为填充项的嵌入。由于自注意力模型不包括任何循环或卷积模块,它不知道以前的项目的位置。因此,我们在输入嵌入中注入一个可学习的位置嵌入P∈Rnxd。
缩放的点积注意力定义为:
在机器翻译等NLP任务中,注意力机制通常使用K=V(例如使用RNN编码器-解码器进行翻译:编码器的隐藏状态是键和值,解码器的隐藏状态是查询)。在该方法中,自注意力操作将嵌入的E_b作为输入,通过线性投影将其转换为三个矩阵,并将其送入注意力层:
由于序列的性质,模型在预测(t+1)项时应该只考虑前t项。然而,自注意力层(S_t)的第t个输出包含后续项目的嵌入,这使得该模型不适用。因此,通过禁止Qi和Kj(j>i)之间的所有链接来修改注意力。尽管自注意力能够以适应性的权重聚合所有以前的项目嵌入,但最终它仍然是一个线性模型。为了赋予该模型以非线性,并考虑不同潜在维度之间的相互作用,对所有的S_i都采用了一个点式两层前馈网络(共享参数):
在第一个自注意力区块之后,F_i基本上聚合了所有以前的项目嵌入(即E_bj, j≤i)。然而,通过另一个基于F的自注意力块来学习更复杂的项目转换可能是有用的。具体来说,将自注意力区块(即一个自注意力层和一个前馈网络)进行堆叠,第b(b>1)个区块定义为
然而,当网络加深时,有几个问题会变得更加严重。1)模型容量的增加导致过度拟合;2)训练过程变得不稳定(由于梯度消失等原因);3)具有更多参数的模型往往需要更多的训练时间。因此,引入以下处理:
现有的顺序推荐方法表明,最后访问的项目对预测下一个项目起着关键作用。然而,在经过几个自注意力块之后,最后访问的项目的嵌入已经与之前的所有项目纠缠在一起;添加残差连接将最后访问过的项目的嵌入传播到最后一层,会使得该模型更容易利用低层的信息。
层归一化是用来归一化各特征的输入(即零均值和单位方差),这有利于稳定和加速神经网络训练。与批量归一化不同,层归一化中使用的统计数据与同一批次中的其他样本无关。具体来说,假设输入是一个包含样本所有特征的向量x,该操作被定义为:
为了缓解深度神经网络中的过拟合问题,"Dropout "正则化技术已被证明在各种神经网络架构中是有效的。Dropout的概念很简单:在训练期间以概率p随机 "turn off "神经元,并在测试时使用所有神经元。我们还在嵌入的E^上应用了一个Dropout层。
在自适应地、分层次地提取先前消费的项目信息的b个自注意力块之后,根据(F_t)b预测下一个项目(给定前t个项目)。具体来说,采用一个MF层来预测项目i的相关性。
为了减少模型的大小和缓解过度拟合,本文考虑另一种方案,它只使用一个单一的项目嵌入M:
品嵌入的一个潜在问题是,它们的内部产品不能代表不对称的物品转换(例如,物品i经常在j之后购买,但反之则不然),我们的模型没有这个问题,因为它学习了一个非线性变换。
为了提供个性化的推荐,现有的方法通常采取两种方法之一:1)学习一个代表用户偏好的显式用户嵌入。2)考虑用户以前的行为,并从访问过的项目的嵌入中诱导出一个隐含的用户嵌入:
其中,U为用户嵌入。
当前 SOTA!平台收录 SASRec 共 4 个模型实现资源。
4、 PinSAGE
Pinterest 推出的基于 GCN ( GraphSAGE)的召回算法 PinSAGE,被称为"GCN 在工业级推荐系统上的首次成功运用"。PinSAGE 主要思想是通过 GraphSAGE 得到 pin(Pinterest 中的书签,可以理解为普通推荐系统中的 item)的向量表示,然后基于 pin embedding 做 item2item 的召回。PinSAGE 底层算法就是 GraphSAGE,只不过为了将其落地于一个 web-scale 的工业级推荐系统,PinSAGE 做了一系列的改进。
PinSAGE的关键计算工作原理是局部图卷积的概念。为了生成一个节点(即一个项目)的嵌入,应用了多个卷积模块,这些模块从节点的局部图邻域聚集特征信息(例如,视觉、文本特征)(如图6所示)。每个模块都会学习如何从一个小的图形邻域聚集信息,通过堆叠多个这样的模块,PinSAGE可以获得关于局部网络拓扑结构的信息。重要的是,这些局部卷积模块的参数是在所有节点上共享的,这使得该方法的参数复杂性与输入图的大小无关。
Pinterest是一个内容发现应用程序,用户与pins互动,pins是在线内容的视觉书签(例如,他们想做的菜谱,他们想购买的衣服等等)。用户将这些pins整理成板块,其中,包含用户认为在主题上相关的pins集合。总的来说,Pinterest图包含20亿个pins,10亿个boards,以及超过180亿条边(即pins与相应board的会员关系)。我们的任务是生成高质量的pins嵌入或表示,以用于推荐。为了学习这些嵌入,将Pinterest环境建模为一个由两个互不相干的集合(I(包含pins)和C(包含boards)中的节点组成的二方图。除了图结构之外,还假设pins/项目 u∈I与实值属性x_u∈Rd相关。一般来说,这些属性可以指定项目的元数据或内容信息,在Pinterest的案例中,我们认为pins与丰富的文本和图像特征都有关联。目标是利用这些输入属性以及bipartite graph 的结构来生成高质量的嵌入。然后,利用这些嵌入通过最近邻查找来生成推荐系统的候选人,或者作为机器学习系统中的特征来对候选人进行排名。
前向传播算法。我们考虑的任务是为一个节点u生成一个嵌入z_u,这取决于节点的输入特征和这个节点周围的图结构。PinSage算法的核心是一个本地化的卷积操作,在这里我们学习如何从u的邻域聚合信息(图6)。整个过程详见算法1。其基本思想是,我们通过密集神经网络转换u的邻域表示z_v ,∀v∈N (u),然后在生成的向量集上应用聚合器/池化函数(line 1)。这个聚合步骤提供了一个u的本地邻域N(u)的向量表示n_u。然后,将聚合的邻域向量n_u与u的当前表示h_u连接起来,并将连接的向量通过另一个密集的神经网络层进行转换(Line 2)。作者观察到在使用串联操作时有明显的性能提升。此外,第3行的归一化处理能够使得训练更加稳定,对归一化嵌入进行近似近邻搜索的效率更高。该算法的输出是一个u的向量表示,它包含了关于自身和局部图邻域的信息。
基于重要性的邻域。PinSAGE的一个重要创新是如何定义节点邻域N(u),也就是说,如何选择算法1中的邻域集合来进行卷积。以前的GCN方法只是检查k-hop图的邻域,而在PinSage中,定义了基于重要性的邻域,其中一个节点u的邻域被定义为对节点u影响最大的T个节点。具体来说,模拟从节点u开始的随机行走,并计算随机行走所访问的节点的L1归一化访问计数。然后,将u的邻域定义为相对于节点u具有最高归一化访问计数的前T个节点。
这种基于重要性的邻域定义有两方面的优势。首先,选择固定数量的节点进行聚合,使我们能够在训练期间控制算法的内存占用。其次,它允许算法1在汇总局部向量表示时考虑到邻居的重要性。特别是,将算法1中的γ作为加权平均数来实现,其权重根据L1归一化访问计数来定义。作者把这种新的方法称为重要性集合。
堆叠卷积。每次应用卷积操作(算法1)都会得到一个新的节点表示,我们可以将多个这样的卷积堆叠在一起,以便获得关于节点u的局部图结构的更多信息。特别是引入多层卷积,其中,第k层的卷积输入取决于第k-1层输出的表示(图6),初始(即 "第0层")表示等于输入节点特征。算法1中的模型参数(Q、q、W和w)是各节点共享的,但各层之间有所不同。算法2详细说明了堆叠卷积如何为mini-batch的节点集M生成嵌入。首先计算每个节点的邻域,然后应用K卷积迭代来生成目标节点的K层表示。最后卷积层的输出再通过一个全连接的神经网络来生成最终的输出嵌入z_u,∀u∈M。
随后学习的模型的全套参数:每个卷积层的权重和偏置参数(Q(k),q(k),W(k),w(k), ∀k∈{1,...,K})以及最后密集神经网络层的参数G1,G2和g。算法1中第1行的输出维度(即Q的列空间维度)在所有层都被设定为m。为了简单起见,将所有卷积层的输出维度(即算法1第3行的输出)设置为相等,用d表示这个尺寸参数。模型的最终输出维度(应用算法2第18行后)也设置为d。
以有监督的方式训练PinSage,使用的损失函数为 max-margin ranking loss。假设我们可以获得一组有标签的物品对L,其中,集合中的物品对(q,i)∈L,被假设为是相关的,即我们假设如果(q,i)∈L,那么物品i是查询物品q的一个好的推荐候选者。训练阶段的目标是优化PinSage的参数,使标签集合中的物品对(q,i)∈L的输出嵌入接近。
为了训练模型的参数,我们使用一个基于最大边际的损失函数( max-margin-based loss function)。其基本思想是,我们要使正例的内积最大化,即查询项和相应的相关项的嵌入。同时,我们要确保负样本的内积—即查询项的嵌入与不相关项的内积—比正样本的内积小一些,且有一定的预设幅度。因此,单对节点嵌入(zq, zi):(q,i)∈L的损失函数为:
5、 TDM
TDM(Tree-based Deep Model)是一种新的基于树的方法,它可以提供与语料库大小相对应的对数复杂度,如深度神经网络,主要想法是通过自上而下地遍历树状节点,对每个用户-节点对进行决策,从粗到细地预测用户兴趣。树状结构可以联合学习,以更好地兼容用户的兴趣分布,从而促进训练和预测。
在收到用户的页面浏览请求后,系统使用用户特征、上下文特征和项目特征作为输入,从匹配服务器的整个语料库(数以亿计)中生成一个相对小得多的候选项目集(通常是数百个)。基于树形的推荐模型在这个阶段做了大量工作,将候选集的规模缩小了几个数量级。TDM模型旨在构建一个有数百个项目的候选集。根据用户是否对生成的候选项目感兴趣,给出了一个印象质量的上限。如何从整个语料库中提取候选人,权衡效率和效果是工业级应用要解决的关键问题。
TDM架构如图8所示。树搜索的方式体现在右下角,作者希望最终构建出来的树是满足贪婪搜索的,即从上而下,每层保留topk个路径,最终就能得到推荐的topk个商品。为树上的每个节点学习低维嵌入,并使用注意力模块软搜索相关的行为,以更好地代表用户。为了利用包含时间戳信息的用户行为,作者设计了分块输入层来区分位于不同时间窗口的行为。历史行为可以沿着时间线划分为不同的时间窗口,每个时间窗口中的物品嵌入是加权平均的。注意力模块和下面的网络大大加强了模型的能力,也使用户对候选项目的偏好不能被调节到内部。
树的初始化。树用于表征用户兴趣的层次信息,所以我们的目标是将类似的项目组织在树型结构接近的位置上。鉴于类别信息在许多领域都是广泛存在的,作者提出了一个利用项目的类别信息来建立初始树的方法。我们以二叉树为例,首先,对所有类别进行随机排序,并将属于同一类别的项目以类别内的随机顺序放在一起。如果一个项目属于一个以上的类别,将该项目分配到一个随机的类别,以保证其唯一性。通过这种方式,我们可以得到一个排序后的项目列表。其次,这些排序后的项目被递归地减半为两个相等的部分,直到当前的集合只包含一个项目,这可以自上而下地构建一个接近完整的二叉树。
树的学习。作为模型的一部分,每个叶子节点的嵌入可以在模型训练后学习。然后,我们使用学习到的叶子节点的嵌入向量来聚类一个新的树。考虑到语料库的大小,我们使用k-means聚类算法,因为它具有良好的可扩展性。在每一步,项目根据其嵌入向量聚类为两个子集。调节两个子集至相等以获得一个更平衡的树。当只剩下一个项目时,递归就会停止,二叉树可以用这样一种自上而下的方式来构建。深度模型和树结构是以另一种方式共同学习的:1)构建初始树并训练模型直到收敛;2)在训练的叶子节点嵌入的基础上学习获得新的树结构;3)用学习的新树结构再次训练模型。
最后,图9给出了TDM的在线服务系统。将输入特征集合和物品检索划分成两个异步阶段。每一个用户的行为,包括点击、购买和将物品放入购物车,都会促使实时特征服务器生成新的输入特征。一旦接收到页面浏览请求,用户定位服务器将使用预先组合生成的特征从树中检索出候选者。这种检索是分层进行的,使用训练后得到的神经网络来计算在输入特征的情况下一个节点是否是首选的概率。
当前 SOTA!平台收录 TDM 共 2 个模型实现资源。
6、 MIMD
MIMD主要用于解决天猫主页的个性化推荐(占天猫流量的约50%)中的召回部分。在天猫的个性化推荐场景中,无论召回还是排序,最重要的都是为用户兴趣建模。然而建模用户兴趣面临一个关键问题:一个用户可能对多种物品感兴趣。MIND模型关注点在于在排序阶段为用户的兴趣多样性建模。作者设计了一个多兴趣抽取层,利用动态路由来将用户的历史信息聚合为用户的嵌入表达。这一动态路由可以看做是一种soft clustering,将用户历史聚合成一些簇。这样对于一个用户,MIND就可以输出多个向量来表达用户的多种兴趣。
推荐系统召回阶段的目标就是从一个巨大的物品池I中为每个用户u ∈ U 召回一千级别的物品,并且每个物品都与用户兴趣相关。为达成这一目标,收集推荐系统生成的历史数据来构建召回模型。其中的每个样本可以表示为一个三元组( I_u , P_u , F_i ) ,I_u表示用户u交互过的物品,P_u表示用户的基础画像。F_i表示目标物品的特征。MIND的核心任务就是学习一个映射关系,将原始特征与用户表示映射起来:
其中,V_u 表示用户向量。K为向量个数。若K = 1,那么就像youtube DNN一样只用一个向量表示用户。目标物品i 用以下嵌入表示:
在得到用户和物品的嵌入后,topN的物品根据以下分数进行召回:
如图10所示,MIND的输入由三部分组成:用户属性、用户行为和目标物品。每个部分都有一些类别ID特征,对于这些特征我们进行embedding。对于用户属性嵌入,直接将其拼接起来;对于物品ID和属性嵌入,对它们进行平均池化处理。最后,直接用组成用户行为的物品嵌入集合来表示用户行为。
多兴趣抽取层。MIMD用多个向量分别表示用户的兴趣。为学习这一表示,利用聚类方法来将用户的历史行为聚成多个簇。对于动态路由,假设我们有两层胶囊网络,分别为低级胶囊和高级胶囊。动态路由的目标就是通过低级胶囊的值来迭代地计算高级胶囊的值。在每次迭代中,给出低级胶囊和对应的向量,以及高级胶囊和对应的向量,路由的logit用下面方法计算:
有了这样的一个路由logits,高级胶囊的候选vector就可以由所有低级胶囊的加权和表示:
其中,w_ij表示连接低层胶囊i和高层胶囊j的权重,通过对路由对数进行softmax计算,即:
最后,应用一个非线性 "squash "函数来获得高层胶囊的向量,即
可以把胶囊理解成一个由多个向量组成的神经元,每个向量可以表达实体的不同属性。作者对动态路由做了三个改动,以使之适用于用户兴趣的表示:
- 共享双线性映射矩阵。原始的动态路由每对高级-低级胶囊都有一个双线性映射矩阵,而我们对所有高级-低级胶囊共享同一个矩阵。路由逻辑可以表示为:
- 路由逻辑的随机初始化。由于共享双线映射矩阵S,将路由logit初始化为0会导致初始兴趣胶囊完全一致,后续的迭代便会陷入一个循环:不同的兴趣胶囊参数始终是完全相同的。为避免这种情况,我们用从高斯分布中采样的随机矩阵来进行初始化。这一做法与k-means算法类似。
- 动态兴趣数量。由于不同用户的兴趣胶囊数目不同,我们引入了一个启发式的规则来为不同的用户调整兴趣胶囊的数目K:用户u的K值由下式计算:
label aware注意力。通过多兴趣抽取层我们生成了多个兴趣胶囊。不同的兴趣胶囊表示了用户兴趣的不同方面,使用相关的兴趣胶囊评估用户对特定物品的兴趣。于是在训练期间作者设计了一个label-aware的attention层,attention是基于缩放点积的。特别地,对于一个目标item,计算出每个兴趣胶囊与它的相容性,然后将兴趣胶囊加权求和作为用户向量。在label-aware attention中,label(目标item)是query,兴趣胶囊是key和value。输出的用户向量由下式计算:
得到用户向量之后,用户u与物品i交互的概率就可以得到:
于是整体的目标函数就是:
训练完成后,MIND网络会用来进行用户向量的生成。为一个用户生成多个兴趣向量后,可以使用这些向量召回top N的item至推荐系统中。
当前 SOTA!平台收录 MIMD 共 3 个模型实现资源。