5、 TDM
TDM(Tree-based Deep Model)是一种新的基于树的方法,它可以提供与语料库大小相对应的对数复杂度,如深度神经网络,主要想法是通过自上而下地遍历树状节点,对每个用户-节点对进行决策,从粗到细地预测用户兴趣。树状结构可以联合学习,以更好地兼容用户的兴趣分布,从而促进训练和预测。
图7. 淘宝网展示广告推荐系统的系统架构
在收到用户的页面浏览请求后,系统使用用户特征、上下文特征和项目特征作为输入,从匹配服务器的整个语料库(数以亿计)中生成一个相对小得多的候选项目集(通常是数百个)。基于树形的推荐模型在这个阶段做了大量工作,将候选集的规模缩小了几个数量级。TDM模型旨在构建一个有数百个项目的候选集。根据用户是否对生成的候选项目感兴趣,给出了一个印象质量的上限。如何从整个语料库中提取候选人,权衡效率和效果是工业级应用要解决的关键问题。
图8. 基于树形的深度模型架构。用户行为根据时间戳划分为不同的时间窗口。在每个时间窗口中,项目嵌入加权平均,而权重来自激活单元。每个时间窗口的输出和候选节点的嵌入被串联起来作为神经网络的输入。在三个具有PReLU激活和批量归一化的全连接层之后,使用二进制softmax来得出用户是否对候选节点感兴趣的概率。每个项目和其相应的叶子节点共享相同的嵌入。所有嵌入都是随机初始化的
TDM架构如图8所示。树搜索的方式体现在右下角,作者希望最终构建出来的树是满足贪婪搜索的,即从上而下,每层保留topk个路径,最终就能得到推荐的topk个商品。为树上的每个节点学习低维嵌入,并使用注意力模块软搜索相关的行为,以更好地代表用户。为了利用包含时间戳信息的用户行为,作者设计了分块输入层来区分位于不同时间窗口的行为。历史行为可以沿着时间线划分为不同的时间窗口,每个时间窗口中的物品嵌入是加权平均的。注意力模块和下面的网络大大加强了模型的能力,也使用户对候选项目的偏好不能被调节到内部。
树的初始化。树用于表征用户兴趣的层次信息,所以我们的目标是将类似的项目组织在树型结构接近的位置上。鉴于类别信息在许多领域都是广泛存在的,作者提出了一个利用项目的类别信息来建立初始树的方法。我们以二叉树为例,首先,对所有类别进行随机排序,并将属于同一类别的项目以类别内的随机顺序放在一起。如果一个项目属于一个以上的类别,将该项目分配到一个随机的类别,以保证其唯一性。通过这种方式,我们可以得到一个排序后的项目列表。其次,这些排序后的项目被递归地减半为两个相等的部分,直到当前的集合只包含一个项目,这可以自上而下地构建一个接近完整的二叉树。
树的学习。作为模型的一部分,每个叶子节点的嵌入可以在模型训练后学习。然后,我们使用学习到的叶子节点的嵌入向量来聚类一个新的树。考虑到语料库的大小,我们使用k-means聚类算法,因为它具有良好的可扩展性。在每一步,项目根据其嵌入向量聚类为两个子集。调节两个子集至相等以获得一个更平衡的树。当只剩下一个项目时,递归就会停止,二叉树可以用这样一种自上而下的方式来构建。深度模型和树结构是以另一种方式共同学习的:1)构建初始树并训练模型直到收敛;2)在训练的叶子节点嵌入的基础上学习获得新的树结构;3)用学习的新树结构再次训练模型。
最后,图9给出了TDM的在线服务系统。将输入特征集合和物品检索划分成两个异步阶段。每一个用户的行为,包括点击、购买和将物品放入购物车,都会促使实时特征服务器生成新的输入特征。一旦接收到页面浏览请求,用户定位服务器将使用预先组合生成的特征从树中检索出候选者。这种检索是分层进行的,使用训练后得到的神经网络来计算在输入特征的情况下一个节点是否是首选的概率。
图9. 基于树状模型的在线服务系统,用户特征是异步组装的
当前 SOTA!平台收录 TDM 共 2 个模型实现资源。
项目 | SOTA!平台项目详情页 |
TDM | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/tdm |
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概述。MIND将用户行为与用户特征作为输入,并在推荐的匹配阶段输出用户代表向量用于项目检索。输入层的ID特征通过嵌入层转化为嵌入,每个项目的嵌入通过池化层进一步平均化。将用户行为嵌入送入多兴趣提取器层,以生成兴趣胶囊capsule。将带有用户特征嵌入的兴趣胶囊串联起来,并通过几个ReLU层对串联的胶囊进行转换,得到用户的表示向量。在训练过程中,引入额外的标签感知的注意力层来指导训练过程
如图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 个模型实现资源。
项目 | SOTA!平台项目详情页 |
MIMD | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/mimd |
前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及API等资源。
网页端访问:在浏览器地址栏输入新版站点地址 sota.jiqizhixin.com ,即可前往「SOTA!模型」平台,查看关注的模型是否有新资源收录。
移动端访问:在微信移动端中搜索服务号名称「机器之心SOTA模型」或 ID 「sotaai」,关注 SOTA!模型服务号,即可通过服务号底部菜单栏使用平台功能,更有最新AI技术、开发资源及社区动态定期推送。