推荐系统架构
ffm+faiss 千万级别的 item 召回性能问题,使用阿里巴巴 深度树匹配模型(TDM)做聚类。
- 基本概念
- 数据结构与算法
- 树:树是计算机科学中数据结构的经典类型,在数据组织上具有良好的效率。
- BeamSearch 算法:一种启发式的贪心搜索方法。
- Kmeans 聚类算法:一种基于向量量化的无监督聚类算法。
- 语言基础
文档内容说明
本文旨在介绍 TDM 以及如何使用 TDM 开源项目进行实际业务生产所用,阅读完成后,你可以了解到:
- TDM 的基本系统组成
- TDM 开源代码的运行和使用
- 应用 TDM 到具体实践的方法
受限于篇幅以及主旨,以下内容本文不涉及,或请参阅相关文档:
- XDL 训练平台的系统组成和使用。
- 公开数据集 (UserBehavior) 的下载、使用和授权。
TDM 适用的范围
TDM 面向解决的是大规模推荐问题,自主提出的以树方式组织大规模候选建立层次关系进而支撑层次检索的框架,具有普遍的适用性和优秀的实验效果。TDM 算法具有极高的业务适用性,在包括如视频推荐、商品推荐、新闻推荐等业务领域已经成功应用,并取得了非常可观的业务效果。更多的业务领域 TDM 应用实践正在开展中,本文后续会不断更新 TDM 的业务实践效果。
算法原理
TDM 是为大规模推荐系统设计的、能承载任意先进模型来高效检索用户兴趣的推荐算法解决方案。TDM 基于树结构,提出了一套对用户兴趣度量进行层次化建模与检索的方法论,使得系统能直接利高级深度学习模型在全库范围内检索用户兴趣。详细的算法介绍,请参见 TDM 在 KDD 会议上的论文 [1],其基本原理是使用树结构对全库 item 进行索引,然后训练深度模型以支持树上的逐层检索,从而将大规模推荐中全库检索的复杂度由 O(n)(n 为所有 item 的量级)下降至 O(log n)。
系统组成
树结构
树在 TDM 框架中承担的是索引结构的角色,即全库 item 都会通过树结构被索引起来。关于树结构的示例如下:
如上图所示,树中的每一个叶节点对应库中的一个 item;非叶节点表示 item 的集合。这样的一种层次化结构,体现了粒度从粗到细的 item 架构。此时,推荐任务转换成了如何从树中检索一系列叶节点,作为用户最感兴趣的 item 返回。值得一提的是,虽然图中展示的树结构是一个二叉树,但在实际应用中并无此限制。
基于树的检索算法
在一些传统的树状索引如二叉搜索树、B - 树等结构中,检索过程往往是使用键值在树上进行逐层往下的 top 1 检索,最终找到一个满足条件的叶节点并返回。而在 TDM 框架中,基于树结构进行大规模推荐的方法,是每一个用户寻找 K 个最感兴趣的叶节点。因此,检索过程也做了相应的改变:在逐层往下的检索过程中,每一层都保留 K 个节点并往下扩展,即经典的 BeamSearch 方法。这一检索方案兼具效率与精度,剩下的问题是如何得到每层内精准的兴趣判别器,来找到每层内的 K 个最感兴趣的节点。
深度网络模型
深度网络在 TDM 框架中承担的是用户兴趣判别器的角色,其输出的(用户,节点)对的兴趣度,将被用于检索过程作为寻找每层 Top K 的评判指标。由于 TDM 框架具备高效的剪枝能力,因此其能兼容任意先进的深度网络模型来进行全库检索。下图给出了一个深度网络模型的示例:
上述网络结构中,在用户特征方面仅使用了用户历史行为,并对历史行为根据其发生时间,进行了时间窗口划分。在节点特征方面,使用的是节点经过 embedding 后的向量作为输入。此外,模型借助 attention 结构 [2],将用户行为中和本次判别相关的那部分筛选出来,以实现更精准的判别。
网络与树结构的联合训练
树索引结构在 TDM 框架中起到了两方面的作用,一是在训练过程提供了上溯正采样样本和平层负采样样本;二是在检索过程中决定了选择与剪枝方案。因此,良好的树结构应该能为训练提供易于区分的上层样本,并尽量体现真实的用户兴趣层级结构来帮助检索。基于数据驱动的索引学习及检索模型、索引结构联合训练的出发点,TDM 框架进行了一种尝试:使用学习得到的叶节点(即 item)embedding 向量进行层次化聚类,来生成新的树索引结构。联合训练过程如下图所示:
检索模型训练、树索引结构学习过程迭代进行,最终得到稳定的结构与模型。
评测指标
TDM 主要采用召回率、准确率两种评价指标:
- 召回率:R = size({预测集合} ∩ {真集}) / size({真集})
- 准确率:P = size({预测集合} ∩ {真集}) / size({预测集合})
融合公式
index = ctr(先验 0-1)*staytime(先验回归预估平均停留时间)+α*评论率+β*分享率->TOPN
推荐系统架构升级
离线推荐:召回 ffm+排序 deepfm
实时推荐:基于 fink 的召回 ffm+排序 deepfm 使用 FTRL 优化器
推荐系统架构
实时推荐:
0、个性化的热度指数(xgb+lr 线性模型)
模型指数:ctr*stayTime+α+β+…. finish*(like+comment+profile) finish * like 两个都是点击率
360 模型指数:ctr*log(dur) 平均观看时长
Word embedding + xgb(交叉特征 用户 性别 等作为特征放入)
1、fm+lr fmemb topk faiss
2、ffm emb fmemb topk faiss
3、ffm & wide&deep ->deepfm
4、Wide deep,deepfm,youtube next watch ,din,lpfebinate
观察指标:时长 留存 CTR 互动指标 1 小时到 1.30 分钟
时效性:90 天 30 天 1 天
特征处理:
useremb
itememb
keywords
基于关键词的交叉特征
冷启动:
1、经典投放素材
2、新用户单独训练模型
3、用户画像
视频指数:。。。