核心思想
本论文提出模型TDM算法解决两个核心问题:
- 抛弃以往通过计算user和item embedding相似度(cos or其他)作为user和item相似标准,来召回与user最相似的topK的item的做法。
- 设计一个可插拔的通用召回模型。
具体思路
论文的总体思路是训练一个树模型,并将这个树模型推送至线上进行召回,分为三大步:
- 初始化树模型
- 训练树模型
- 推送至线上,选取topK item作为召回
如下会对上述三个核心分别进行介绍。
初始化树模型
文章构建的树模型如下所示:
每个叶子节点对应一个item,每个item的embedding可以通过pre-train的方式进行初始化。每个非叶子节点对应一个类目,这里类目可以是item的具体类别信息(手机、鞋等),也可以是抽象的类别信息(embedding的抽象聚类表示),不同类目划分标准对应不同构建树的方式:
- 利用item本身的类别标签去构建树,例如从树的根节点到叶子节点,每个节点代表意义为:商品 -> 鞋服 -> 鞋 -> 女士鞋 -> 女士高跟鞋,每个非叶子节点的embedding是其子节点embedding的平均(也可以用其他聚合方式)。
- 利用训练好的item_embedding进行分层级聚类,例如在根节点处将所有的item聚类(kmeans)成两部分,作为根节点的左右两个节点,每个节点的embedding为分到这个节点所有item的embedding的平均(也可以用其他聚合方式)。
训练树模型
经过第一步的初始化,已经将树的每个节点用embedding来表示(node_emb)。训练树模型核心步骤如下:
- 确定正负样本
- 训练模型
确定正负样本
论文中提到的是一个user对某些item有过行为,那么这个item对应的从根节点到叶子节点路径中所有的节点都为正样本,之后在非正样本中其他样本都为负样本,之后随机采集一批负样本与上述正样本搭配进行学习。
训练模型
整体的训练过程如下所示:
解释一下,将User的交互历史对应的item_embeddings和树的node_emb组成样本,进行学习,学习的过程解释可以参照DIN和DIEN模型,这样模型训练收敛后就可以将模型推送至线上了。
通过上图可以发现,左侧的训练模型可以任意替换,也就是说树的整体训练过程只是一个框架,框架中的模型可插拔,这样整套框架的可扩展性就会很强;而且User与item之间的交互学习更加抽象,因为原先的模型都是直接通过User的交互历史和item_emb去学习,而现在是用User的交互历史和node_emb去学习,学习到的模型更加鲁棒和抽象。
推送至线上,选取topK item作为召回
线上的召回过程如下所示:
其核心思想在于从树的根节点开始层次遍历,每层选取topK个节点,之后只遍历这些节点的子节点,然后再在这些子节点中选择topK的节点,直到选出topK个叶子节点为止,这样能够保证搜索的效率是最高的。
如果树的结构是二叉树,最多遍历 2 ∗ K ∗ l o g ( C ) 2 * K * log(C) 2∗K∗log(C)个节点就能找到指定的候选叶子节点,其中 C C C代表corpus size,因为从根节点到叶子节点路径长度为 l o g ( C ) log(C) log(C),每个非叶子节点遍历完成后会把2个子节点加入 Q Q Q中,这样在下一层遍历过程中最多需要遍历 2 ∗ K 2*K 2∗K个节点。