基于树的召回框架(一):Learning Tree-based Deep Model for Recommender Systems

本系列其他文章:

1、基于树的召回框架(二):Joint Optimization of Tree-based Index and Deep Model for Recommender Systems

2、基于树的召回框架(三):Learning Optimal Tree Models under Beam Search

背景

在召回阶段,如果需做全量召回,直接线性遍历每个物品的时间复杂度是 O ( N ) O(N) O(N),如果 N N N 过大,会遇到严重的计算效率过低的问题。在面对大规模物品集时,经典的召回思路有两种:基于物品的协同过滤、内积模型向量检索。

基于物品的协同过滤

使用 item-based 的协同过滤方法进行物品召回,可以有效降低计算量。其基于两阶段的思路,首先根据用户的历史行为(点击、购买等)获得触发物品(Trigger Item),然后到物品集中检索与这些触发物品最相似的物品,其中物品对的相似度是离线就已经预先计算好的。该过程示意图见下图:

在这里插入图片描述

内积向量模型

在这里插入图片描述
使用用户以及物品的embedding内积来表示用户对物品的兴趣,会使得模型的表达能力非常有限。目前,基于MLP甚至是注意力机制等更加高级的神经网络已经被用于进行点击率预测,但这类模型无法像内积模型一样使用近似 kNN 算法高效地进行召回。

本文(指本博客介绍的论文,下同)提出了一种基于树结构的模型用于大规模物品集上的召回,其优点在于:

  • 该模型进行全量召回的时间复杂度是 O ( log ⁡ ( N ) ) O(\log (N)) O(log(N)) ,使得在大规模物品集上,任意高级的CTR模型(例如 DIN)都可以应用到召回阶段。
  • 对比传统模型,本文模型对于新颖物品具有更优的发现能力(这是由于全量召回以及高级模型的融合成为可能)
  • 在本文方法中,构建的树结构也可以进行优化(与神经网络轮流进行优化)

深度树匹配模型

深度树匹配模型(Tree-based Deep Model,TDM)一共涉及 3 篇论文,具体见参考文献一节。本文主要介绍第一篇,即《Learning Tree-based Deep Model for Recommender Systems》。

最大堆树

本文的树结构具有“类似最大堆”的性质,即每个节点的值等于其所有孩子节点的值中的最大者(每一层还会进行归一化以保证每一层的值求和结果为1)。具有这样性质的树可以保证我们在使用类似于Beam Search的搜索思路在树上搜索节点时得到的 K 个结果一定是概率为 Top-K 的结果。所谓“类似于Beam Search的搜索思路”,指的是在每一层,我们计算每个该用户对于该层所有节点感兴趣的概率,然后保留 Top-K 个节点的集合,到下一层,仅对于上一层中 Top-K 节点的孩子节点进行计算用户感兴趣的概率,如此循环,直到到达树的最后一层,则最后保留下来的叶子结点一定是概率最高的 Top-K 个叶子节点。

在这里插入图片描述

固定树结构时,对用户兴趣模型的训练

我们先假设我们已经得到了所有物品构成的树,其中所有物品都对应了叶子结点,而非叶子节点是不同粒度的类别。用户兴趣模型接受用户行为序列以及某个节点的embedding作为输入,输出的是该用户对于该节点感兴趣的概率,具体模型结构以及优势分析见下面两张图。

在这里插入图片描述

在这里插入图片描述

我们先假设已经得到了物品构成的树结构,我们会固定树结构,进行用户兴趣模型的训练。我们首先构建正负样本,其中,用户实际点击的物品对应的叶子结点都是正样本。根据最大堆树的性质,正样本的叶子结点,其所有祖先节点都是正样本,而在每一层,我们对除了正样本以外的节点进行采样得到负样本。得到了正负样本,我们就可以训练二分类器,让其判别具有某个行为序列的用户对于树中任意一个结点的感兴趣程度。

一个猜测:论文中没有说清楚具体的标签值是如何得到的,博主认为,并非正样本的标签为 1,负样本为0,因为这样虽然也满足“类似最大堆”的性质,但是每一层的正样本并没有区分度,得到的 Top-K也是没有意义的。因此,博主认为至少有一种合理的标签构建方法是这样的:对于叶子结点,我们使用用户与该物品交互过的次数作为标签,经过归一化后,得到最后一层的所有节点的标签值(负样本的标签为0,正样本的标签介于0和1之间)。然后根据父亲的值为最大的孩子结点的值这一性质,来得到上一层的结点的值,再对该层进行归一化,得到该层的标签,如此从下往上直到得到根节点的标签(肯定是1)。

第二个疑惑,关于这个二分类器是只需要训练一个全局的,还是对于树的每一层都需要训练一个,我感觉论文没有讲清楚。论文第4页第1段,“. We use one global deep neural network binary model with different input for all levels’ order discriminators.”,而在后面的几个段落中,公式(4)后面,又提到“ Each level’s global discriminator can make precise decisions independently, without depending on the goodness of upper levels’ decisions”。个人倾向于认为只需要对于一棵树训练一个全局的评分器即可。

注意,虽然示意图中,仅使用了用户的行为序列作为输入的用户特征,在实际应用时,用户的profile特征以及一些上下文特征都可以作为评分器模型的输入。

用户兴趣模型收敛后,重新构造树结构

前面一节假设我们根据正负样本训练用户兴趣模型直到收敛,则能够从该用户兴趣模型中得到物品的embedding。使用所有物品的embedding,我们可以重新构建树结构。为了兼顾效率以及效果,我们使用了 K-means 聚类算法。首先,根据物品的向量表征,将其分为2个簇(我们还会进行一些微调以尽量确保两个簇的物品数量接近)。下一步,对于每个簇中的物品,继续将其划分为 2 个簇。这个划分过程持续到所有簇都仅有一个物品,我们就能得到一颗二叉树。

整体训练过程以及预测流程

我们首先初始化树结构,我们根据一些预先定义好的类别,将物品划分到多个类别中(同时属于多个类别的会被随机划分到某一个类别),然后每个类别中的物品会被随机平均分配到 2 个子类别中。不断地进行划分直到当前划分得到的类别都只包含了一个物品,我们就以一种自上而下的方式得到了一颗类似于完全二叉树的树。

初始化树结构之后,我们就可以固定树结构,进行用户兴趣模型的训练;而用户兴趣模型训练结束,可以得到物品的embedding,又可以重新构造树结构;树结构与用户兴趣模型轮流进行训练(论文好像没有说明何时结束,个人猜测是当用户兴趣模型效果已经收敛或者在下游任务的指标足够高时停止该训练过程)

使用训练完后的树结构以及用户兴趣模型,进行 Top-K 召回的过程:

在这里插入图片描述

参考文献

[1] Learning Tree-based Deep Model for Recommender Systems

[2] Joint Optimization of Tree-based Index and Deep Model for Recommender Systems

[3] Learning Optimal Tree Models under Beam Search

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值