阿里TDM论文阅读《Learning Tree-based Deep Model for Recommender Systems》
背景
推荐本质上需要完成从全量商品库高效检索Topk相关商品,由于候选商品数量过于庞大,现在的推荐系统一般分为两个阶段:召回和排序。对于召回阶段,面临着从全量商品库里面,高效召回商品的问题,由于存在系统的性能问题,需要重点去解决两个关键问题:
- 怎么高效检索,即算的快。高效检索意味着需要设计合理的检索结构和检索策略,能够在一个系统可容纳的时间内来保证可以召回足够量的商品。
- 整个召回的过程虽然算得快,但是不能算得太偏了,还是要把用户真正感兴趣的这些商品能够召回回来,就是所谓的算的准。
那么关于召回技术,大概经历了两代技术发展:
- 第一代以启发式规则为代表(比如基于item的协同过滤),缺点是不能面向全量商品库来做检索,系统只能在用户历史行为过的商品里面找到侯选的相似商品来做召回,使得整个推荐结果的多样性和发现性比较差,你会发现系统老是给你推荐看过的或者买过的商品
- 第二代基于内积模型的向量检索方案,比如YouTube-DNN召回模型。通过离线学习item的embedding向量,然后通过积量化的方式构建索引,在线上应用的时候,实时计算user embedding,在索引中查找最近邻(比较user emb和item emb的乘积)的 K 个 item 作为推荐候选。这类方法的核心思想是将用户和商品用向量表示,用向量内积大小度量兴趣,借助向量索引实现大规模全量检索。但是这个方法不太方便去做用户和商品之间的特征组合关系,使整个模型能力受限。
因此本文设计了一套全新的推荐算法框架:深度树匹配,允许容纳任意先进的模型而非限定内积形式,并且能够对全量候选集进行更好的推荐。
TDM架构
TDM的架构如上图所示,主要包含了两个部分:
- 深度模型,主要用来建模user对item的感兴趣程度,如CTR、CVR,可以采用通用的任意模型
- 最大堆树,相当于一个索引结构,给定一个user之后,可以以 2klogC 的时间复杂度得到 top k 候选item (C是所用item数目)。树中的每个节点都是模型训练得到的一个embedding,其中每个叶子结点都是一个item,非叶子结点是item的聚类(如类别)
如何在树中做快速检索得到top k候选item?
如何做高效检索?不失一般性,假定我们的树是一棵完全二叉树,全部叶子节点代表全部商品,中间节点代表某种意义上的粗粒度聚合(例如“iPhone”是商品,作为叶子,“手机”是该商品的类别,作为父节点;但是这里需要说明,在通常的 TDM 树中,我们并不要求中间节点一定存在具体物理意义)。
树上如何做高效检索呢?我们采用了 BeamSearch 这种方式,自顶向下,做快速剪枝。
BeamSearch 检索方式如图中右侧流程所示:假设要寻找最优 Top2 个 Item,第一层有两个子节点,打分排序选出 Top2(只有2个,全取);扩展出第二层四个子节点,打分排序选出 Top2;扩展出第三层四个子节点,打分排序选出 Top2,达到叶子层,最终返回 Top2 个 Items,查找复杂度为 O(2*K*log2N),K 为返回个数,N 为叶子个数。
最大堆树的“最大堆性质保证”
TDM中的最大堆树具有如下性质:
直观理解就是,每个父节点概率值是子节点概率值的最大值。
为了保证这个性质TDM采用了如下样本构建方法:
- 正样本:用户有交互item对应的叶子结点,以及这个叶子结点对应的祖先节点
- 负样本:在树中的正样本对应每一层进行随机采样作为负样本
训练方法
1. 对树进行初始化
- 首先对item的类别进行随机排序,把item放在对应的类别下(如果一个item对应多个类别,随机放在某一个类别下)
- 重复如下步骤知道每个节点只有一个item:把当前节点的item均匀的分到左右两个子节点中
2. 利用深度模型去学习,得到每个叶子结点的embedding,按如下方式重新建树:
- 2means聚类得到树第二层的两个cluster,为了得到更平衡的二叉树,使落在每个cluster的item数目差不多,在聚类过程中需要做适当调整
- 对上一层的每个节点做2means,直到这个cluster只有一个item
- 重复上一步,得到新的树结构
3. 对这个新的树结构,利用深度模型重新进行学习
问题
- 在检索时需要对每一层按模型预估分排序取topk,每层最多要算2 * k个候选的预估分Z(所以时间复杂度是2klogc),是否比较耗时?
- 新item怎么处理,是否是挂在相似cluster下面?
- 是否只能用item_id特征,不能用item其它属性特征,如果用item属性特征,那么非叶子节点的素材特征是子节点item属性特征的集合吗?
- 如何增量更新,是不是只能过段时间从头训练一次
相对双塔+ANN检索的优点:
- 可以使用更复杂的网络结构,user特征和item特征更早的交叉
- 树的非叶子embedding也是训练出来的,对比把cluster均值或中心点作为cluster embedding的ANN方法更准确一些
参考资料
https://zhuanlan.zhihu.com/p/78488485
https://zhuanlan.zhihu.com/p/78941783
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2019-11-02 hive