赞
踩
本论文提出模型TDM算法解决两个核心问题:
论文的总体思路是训练一个树模型,并将这个树模型推送至线上进行召回,分为三大步:
如下会对上述三个核心分别进行介绍。
文章构建的树模型如下所示:
每个叶子节点对应一个item,每个item的embedding可以通过pre-train的方式进行初始化。每个非叶子节点对应一个类目,这里类目可以是item的具体类别信息(手机、鞋等),也可以是抽象的类别信息(embedding的抽象聚类表示),不同类目划分标准对应不同构建树的方式:
经过第一步的初始化,已经将树的每个节点用embedding来表示(node_emb)。训练树模型核心步骤如下:
论文中提到的是一个user对某些item有过行为,那么这个item对应的从根节点到叶子节点路径中所有的节点都为正样本,之后在非正样本中其他样本都为负样本,之后随机采集一批负样本与上述正样本搭配进行学习。
整体的训练过程如下所示:
解释一下,将User的交互历史对应的item_embeddings和树的node_emb组成样本,进行学习,学习的过程解释可以参照DIN和DIEN模型,这样模型训练收敛后就可以将模型推送至线上了。
通过上图可以发现,左侧的训练模型可以任意替换,也就是说树的整体训练过程只是一个框架,框架中的模型可插拔,这样整套框架的可扩展性就会很强;而且User与item之间的交互学习更加抽象,因为原先的模型都是直接通过User的交互历史和item_emb去学习,而现在是用User的交互历史和node_emb去学习,学习到的模型更加鲁棒和抽象。
线上的召回过程如下所示:
其核心思想在于从树的根节点开始层次遍历,每层选取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个节点。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。