├── LICENSE ├── tdm2.md ├── README.md └── tdm.md /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 gaolinjie 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /tdm2.md: -------------------------------------------------------------------------------- 1 | 原文:[http://d0evi1.com/tdm2/](http://d0evi1.com/tdm2/) 2 | 3 | 阿里在2019又发布了一篇关于tdm(新的称为JTM)的paper:《Joint Optimization of Tree-based Index and Deep Model for 4 | Recommender Systems》, 我们来看下: 5 | 6 | # 介绍 7 | 8 | 为了打破内积形式的限制,并使得任意的关于用户偏好的高级模型对于从整个语料中检索候选的方式在计算上变得可行,之前提出的TDM使用树结构作为index,可以极大提升推荐的accuracy。TDM使用一个树结构来组织items,树中的每个leaf node对应于一个item。TDM假设:每个user-node偏好是指在所有子节点的偏好中具有最大值的节点,就如同一个max-heap一样。在训练阶段,每个user-node偏好的预测模型用于拟合这种类max-heap的偏好分布。与vector kNN-based搜索(index结构需要内积形式)不同的是,在TDM中对偏好建模的形式没有任何限制。在预测时,由训练模型给出的偏好得分,会被用于在tree index中执行layer-wise beam search来检索候选items。在树索引中的beam search的复杂度是log(corpus size),在模型结构上没有限制,这使得高级用户偏好模型在推荐中检索候选变得可行。 9 | 10 | index结构在kNN-based搜索、tree-based方法中扮演着不同的角色。在kNN搜索中,user和item的向量表示会首先通过学习得到,接着建立vector search index。而**在tree-based方法中,tree-index的结构(hierarchy)也会影响检索模型的训练**。因此,如果对tree index和用户偏好模型进行联合训练是一个重要的问题。tree-based方法在学术上也是一个活跃的话题。在已经存在的tree-based方法中,会学到tree结构,以便在在样本/标签空间(sample/label space)中得到一个更好的结构(hierarchy)。然而,**在tree-learning阶段,sample/label划分任务的目标与最终目标(比如:精准推荐)并不完全一致**。index learning与prediction模型训练间的不一致,会导致整个系统达到一个次优的状态。为了解决该挑战,更好地将tree index和用户偏好预测相协调,我们的工作聚焦于:通过对一个统一的偏好measure进行最优化,来开发一种同时学习树层级结构(tree hierearchy)和用户偏好预测模型。该paper的主要贡献可以归纳为: 11 | 12 | - 我们提出了一种joint optimization框架,为tree-based推荐学习树结构和用户偏好预测模型,其中,会对一个统一的performance measure(比如:用户偏好的accuracy)进行最优化 13 | - 我们演示了提出的树结构学习算法,它等同于二分图(bipartite graph)的加权最大化matching问题,并给出了一个近似算法来学习树结构 14 | - 我们提出了一种新方法,它可以更好利用tree index来生成层次化用户偏好(hierarchical user representation),它可以帮助学到更精准的用户偏好预测模型。 15 | - 我们展示了树结构学习和层次化用户表示两者可以同时提升推荐accuracy。这两个模块可以相互提升,来达到更大的效果提升。 16 | 17 | 本paper的其余部分如下方式组织: 18 | 19 | - 在第2节,我们会比较一些大规模推荐方法来展示不同 20 | - 在第3节,我们首先给出一个TDM之前工作的简短介绍,接着详细描述joint learning 21 | - 在第4节,离线对比和在线A/B test实验结果对比 22 | - 在第5节,结论 23 | 24 | # 2.相关工作 25 | 26 | - Youtube DNN 27 | - Yahoo news RNN 28 | - Label Partitioning for Sublinear Ranking (LPSR) 29 | - Partitioned Label Trees (Parabel) 30 | - Multi-label Random Forest (MLRF) 31 | - FastXML 32 | 33 | # 3.joint optimization 34 | 35 | 在本节中,我们首先给出了一个TDM的简单回顾。TDM使用一个tree hierarchy作为index,并允许高级深度模型作为用户偏好预测模型。接着,我们提出了关于tree-based index和deep模型的joint learning框架。它会选择性在一个全局loss function下最优化index和预测模型。提出了一个greedy-based tree learning算法来最优化index。在最后一个子节,我们会指定用于模型训练中的层次化用户偏好表示。 36 | 37 | ## 3.1 tree-based深度推荐模型 38 | 39 | 推荐系统需要返回给用户感兴趣的一个items候选集合。实际上,如何从一个大的item库中有效做出检索是个大挑战。TDM使用一棵树作为index,并提出了在该tree上的一个类max-heap的概率公式,其中对于**每个非叶子节点n在level l上的用户偏好**为: 40 | 41 | $$ 42 | p^{(l)}(n | u) = \frac{ \underset{n_c \in \lbrace n's \ children \ in \ level \ l+1 \rbrace}{max} {p^{(l+1)}(n_c | u)} }{\alpha^{(l)}} 43 | $$ 44 | 45 | ...(1) 46 | 47 | 其中: 48 | 49 | - $$p^{(l)}(n \mid u)$$是用户u喜欢节点n的ground truth概率。 50 | - $$\alpha^{(l)}$$是一个layer归一化项 51 | 52 | 上述公式意味着:在一个节点上的ground truth的user-node概率,等于它的子节点的最大user-node概率除以一个归一化项。因此,在level l上的top-k节点,必须被包含在在level(l-1)的top-k节点的子节点中,在不损失accuracy的前提下,**top-k的leaf items的检索必须被限制在每个layer的top-k节点上**。基于这一点,TDM将推荐任务转换成一个层次化检索问题(hierarchical retrieval problem)。通过一个自顶向下的过程,候选items可以从粗到细被逐渐选中。TDM的候选生成过程如图1所示。 53 | 54 | 55 | 56 | 图1: Tree-based deep推荐模型 (a) 用户偏好预测模型。我们首先以层次化的方式在对应的layers上的节点上对用户行为进行抽象。接着,用户行为抽象和目标节点(target node)、以及与其它特征(比如:user profile)一起被用于模型的输入。 (b) 树结构(tree hierarchy)。**每个item首先会通过一个投影函数$$\pi(\cdot)$$分配到一个不同的leaf node上**。在leaf level上的红色节点(items)会被选中作为候选集 57 | 58 | **在corpus中的每个item被分配到树层次结构(tree hierarchy)上的一个$$\tau$$的leaf node上。non-leaf nodes可以被看成是一个关于子节点的更粗粒度的抽象**。在检索时,为了进行打分,用户信息与节点组合在一起,首先会被向量化成一个用户偏好表示,作为深度神经网络M(例如:FC networks)的输入。接着,用户对该节点感兴趣的概率值通过模型M返回,如图1(a)所示。而对于检索top-k个items(leaf nodes)来说,会以level-by-level的方式执行一个自顶向下的(top-down)beam search策略,如图1(b)所示。在level l中,只有在level l-1上带有top-k概率的子节点被打分和排序来选择k个候选节点。该过程会一直持续,直到达到k个leaf items。 59 | 60 | **有了tree index,一个用户请求的整体检索复杂度,会从线性降到log(corpus size)**,而对于偏好模型结构没有任何限制。这使得TDM会打破用户偏好建模的内积形式的限制,**它通过引入vector kNN search index和特有的高级深度模型来检索整个corpus的候选**,这可以极大提升推荐的accuracy。 61 | 62 | ## 3.2 Joint Optimization框架 63 | 64 | 根据检索过程,TDM的推荐accuracy会通过用户偏好模型M和tree index T的质量(quality)来决定。给定n个关于正例训练数据$$(u_i, c_i)$$pairs(它表示user $$u_i$$对target item $$c_i$$感兴趣),**$$T$$决定着模型M会为用户$$u_i$$选择哪些non-leaf nodes来达到$$c_i$$**。为了替换之前单独学习M和T的方式,我们提出了一个全局loss函数来对M和T进行jointly learn。正如我们在实验中所见,对M和T进行jointly optimizing可以提升最终的推荐accuracy。 65 | 66 | $$p(\pi(c_i) \mid u_i; \pi)$$表示:给定一个user-item pair $$(u_i,c_i)$$,用户u在leaf node $$\pi(c_i)$$上的偏好概率。**其中:$$\pi(\cdot)$$是一个投影函数,它将一个item投影到在T上的一个leaf node上**。注意,投影函数$$\pi(\cdot)$$实际决定着在树中的item的层次结构,如图1(b)所示。模型M被用于估计和输出user-node偏好$$\hat{p}(\pi(c_i) \mid u_i; \theta, \pi)$$,其中$$\theta$$为模型参数。**如果pair $$(u_i, c_i)$$是一个正样本,根据多分类设置,我们具有ground truth偏好 $$p(\pi(c_i) \mid u_i; \pi) = 1$$**。 67 | 68 | 根据max-heap特性,所有$$\pi(c_i)$$的祖先节点(ancestor nodes)的用户偏好概率(注:每一层都有,构成一条路径),例如 $$\lbrace p(b_j(\pi(c_i)) \mid u_i; \pi)\rbrace_{j=0}^{l_{max}}$$应该为1,**在其中$$b_j(\cdot)$$是在level j上从一个节点到它的祖先节点(ancestor node)投影**,$$l_{max}$$是在T上的最大level。为了拟合这样一个user-node偏好分布,全局loss函数被公式化成: 69 | 70 | $$ 71 | L(\theta, \pi) = - \sum_{i=1}^n \sum_{j=0}^{l_{max}} log \hat{p} (b_j(\pi(c_i)) | u_i; \theta, \pi) 72 | $$ 73 | 74 | ...(2) 75 | 76 | 其中:n为训练样本正例数,我们将在所有正训练样本上对预测的user-node偏好的负log概率进行求和,它们的祖先user-node pairs作为global empirical loss。 77 | 78 | 79 | 80 | 算法1 81 | 82 | 由于对投影函数$$\pi(\cdot)$$最优化是一个组合最优化(combinational optimization),它几乎不可能使用基于梯度的算法来同时优化$$\theta$$。为了解决它,我们提出了如算法1所示的joint learning framework。**它可以根据用户偏好模型和tree hierarchy交替(alternativel)对loss function (2)进行最优化**。在模型训练和树学习中,training loss的一致性,可以促进框架的收敛。实际上,如果模型训练和树学习两者可以同时减小(2)的值,算法1确实会收敛,**因为$$\lbrace L(\theta_t, \pi_t)\rbrace$$是一个递减序列,最低界为0**。**在模型训练中,$$min_{\theta} L(\theta, \pi)$$是为了为每一layer学习一个user-node偏好模型**。受益于tree hierarchy,$$min_{\theta} L(\theta, \pi)$$被转换成学习user-node偏好分布,因此可以使用任意的高级深度模型,它们可以通过流行的最优化算法:SGD、Adam等求解。在归一化用户偏好设定中,由于节点数会随着node level指数增加,使用NCE估计$$\hat{p}(b_j(\pi(c_i)) \mid u_i; \theta, \pi)$$,通过sampling策略来避免计算归一化项。**树学习的任务是为了在给定$$\theta$$时求解$$min_{\pi} L(\theta, \pi)$$,它是一个组合优化问题**。实际上,给定树结构,$$min_{\pi} L(\theta, \pi)$$等于发现在corpus C中items与T中的leaf nodes间的最优匹配。更进一步,我们有: 83 | 84 | **推论1: $$min_{\pi} L(\theta, \pi)$$本质上是一个分配问题(assignment problem):在一个加权二分图中发现一个最大加权匹配。** 85 | 86 | 证明:假设第k项item $$c_k$$被分配到第m个leaf node $$n_m$$,比如:$$\pi(c_k) = n_m$$,以下的加权值可以被计算: 87 | 88 | $$ 89 | L_{c_k,n_m} = \sum\limits_{(u,c) \in A_k} \sum_{j=0}^{l_{max}} log \hat{p} (b_j (\pi(c)) \mid u; \theta, \pi) 90 | $$ 91 | 92 | ...(3) 93 | 94 | 其中: 95 | 96 | - $$A_k$$包含了所有正样本抽样对(u,c) 97 | - $$c_k$$是target item c 98 | 99 | **如果我们将在T中的leaf nodes和在corpus C中的items看成是顶点(vertices),将leaf nodes和items间的完全连接(full connection)看成是边(edges),我们可以构建一个加权二分图V,$$L_{c_k,n_m}$$是在$$c_k$$和$$n_m$$间边的权重**。更进一步,我们可以学到,每个在items和leaf nodes间的assignment $$\pi(\cdot)$$,等于一个关于V的matching。给定一个assignment $$\pi(\cdot)$$,total loss(2)可以通过下式计算: 100 | 101 | $$ 102 | L(\theta, \pi) = -\sum_{i=1}^{|C|} L_{c_i, \pi(c_i)} 103 | $$ 104 | 105 | 其中$$\mid C \mid$$是corpus size。因此,$$min_{\pi} L(\theta, \pi)$$等于寻找V的最大加权匹配(maximum weighted matching)。 106 | 107 | 对于分配问题,传统算法(比如:经典的匈牙利算法)很难应用于大语料上,因为它们具有很高复杂度。**即使对于最简单的贪婪算法,它们会使用最大加权$$L_{c_k,n_m}$$矩阵来贪婪地选择未分配对$$(c_k,n_m)$$,该矩阵是一个大的权重矩阵,需要事先计算和存储,这是不可接受的**。为了克服该问题,我们提出了一个segmented tree learning算法。 108 | 109 | 我们不会将items直接分配给leaf nodes,作为替代,**我们会自顶向下每隔d个levels会分配items**。给定投影函数$$\pi(\cdot)$$,我们将$$L_{c_k, \pi(c_k)}$$从level s到level d的部分权重,表示为: 110 | 111 | $$ 112 | L_{c_k, \pi(c_k)}^{s,d} = \sum\limits_{(u,c) \in A_k} \sum_{j=s}^d log \hat{p}(b_j(\pi(c_k)) | u; \theta, \pi) 113 | $$ 114 | 115 | 我们首先会根据投影函数$$\pi(\cdot)$$来发现一个分配(assignment)来最大化$$\sum_{i=1}^{\mid C \mid} L_{c_i, \pi(c_i)}^{1,d}$$,**该投影函数等价于分配所有items到level d的节点上**。对于一个具有最大level $$l_{max}$$的完整二叉树T,每个level d上的节点,会分配不超过$$2^{l_{max}-d}$$的items。这是一个最大匹配问题,可以使用一个贪婪算法进行有效求解,**因为如果d选得够好,对于每个item可能位置的数目会极大减小(比如:d=7, 数目为$$2^d=128$$)**。接着,每个item c对应在level d($$b_d(\pi(c)))$$)上的祖先节点保持不变,**我们接着相继最大化next d levels,递归直到每个item被分配到一个叶子节点后停止**。提出的算法在算法2中详细介绍。 116 | 117 | 118 | 119 | 算法2 120 | 121 | 算法2中的第5行,我们使用一个greedy算法,它使用再平衡策略(rebalance strategy)来求解这个子问题(sub-problem)。每个item $$c \in C_{_i}$$会首先将最大权重$$L_c^{l-d+1,l}$$被分配给在level l中的$$n_i$$子节点。**接着,为了保证每个子节点的分配不超过$$2^{l_{max}-l}$$个items,会使用一个rebalance过程**。为了提升tree learning的稳定性,以及促进整个框架的收敛,对于那些具有超过$$2^{l_{max}-l}$$items的节点,我们优先将在level l中具有相同的assignment的这些节点,保持使用前一轮迭代(比如:$$b_l(\pi'(c))==b_l(\pi_{old}(c)))$$)。被分配给该节点的其它items会以权重$$L_{\cdot,n}^{(l-d+1,l)}$$的降序进行排序,items的超出部分,会根据每个item权重$$L_{c,\cdot}^{(l-d+1,l)}$$的降序,被移到仍有富余空间的其它节点上。**算法2会帮助我们避免存储单个大的权重矩阵。另外,每个子任务可以并行运行,进一步提升效率**。 122 | 123 | ## 3.3 层次化用户偏好表示 124 | 125 | 如3.1节所示,TDM是一个层次化检索模型,用来从粗到细的方式层次化地生成候选items。**在检索时,会通过用户偏好预测模型M贯穿tree index执行一个自顶向下的(top-down)beam search**。因此,在每个level中的M任务是异构的(heterogeneous)。基于此,一个关于M的特定层输入(layer-specific input),必须提升推荐的accuracy。 126 | 127 | 一系列相关工作表明【9,19,22,35,37-39】,用户的历史行为在预测用户兴趣时扮演着重要角色。另外,由于在用户行为中的每个item是一个one-hot ID特征,在deep model输入的生成上,常见的方法是首先将每个item嵌入到一个连续的特征空间上。一个non-leaf node是一个在tree hierarchy中它的子节点的一个抽象。**给定一个用户行为序列$$c=\lbrace c_1, c_2, ..., c_m \rbrace$$,其中$$c_i$$是用户交互的第i个item,我们提出使用$$c^l = \lbrace b_l(\pi(c_1)), b_l(\pi(c_2)), \cdots, b_l(\pi(c_m)) \rbrace$$与target node、以及其它可能特征(比如:user profile)一起来生成M在layer l的input,来预测user-node偏好,如图1(a)所示**。在这种方式中,用户交互的items的祖先节点被当成抽象的用户行为使用。训练M时,在对应的layer上,我们使用该抽象来替换原始的user-behavior序列。总之,层次化用户偏好表示带给我们两个优点: 128 | 129 | - **层的独立性(layer independence)**:对于不同layers来说,在layers间共享item embeddings,会像用户偏好的预测模型那样,在训练M时会带来在一些噪声(noises),因为对于不同layers来说targets是不同的。解决该问题的一个显式方法是,对于每一layer,将一个item与一个独立的embedding相绑定来生成M的输入。然而,这会极大增加参数的数目,使得系统很难优化和应用。**我们提出的抽象用户行为会使用相应layer上的node embeddings来生成M的input,在训练时达到layer independence,无需增加参数的数目**。 130 | - **精准描述(Precise description)**:M会以层次化方式贯穿tree index来生成候选items。随着所检索的level的增加,在每一level上的候选节点会以从粗到细的方式描述最终的推荐items,直到达到leaf level。提出的层次化用户偏好表示(hierarchical user representations)会抓住检索过程的本质,并在相应layer的nodes上给出一个关于用户行为的精准描述,这可以提升用户偏好的预测,通过减少因太过详细或太过粗粒度描述而引入的混淆(confusion)。**例如,在upper layers中M的任务是粗粒度选择一个候选集,用户行为也会在训练和预测时在相同的upper layers上使用均匀的node embeddings进行粗粒度描述**。 131 | 132 | 133 | # 参考 134 | 135 | - 1.[https://arxiv.org/pdf/1902.07565.pdf](https://arxiv.org/pdf/1902.07565.pdf) 136 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Awesome Recommender Systems 2 | A curated list of awesome resources about Recommender Systems. 3 | 4 | 声明:本列表包含部分网络上收集的推荐,稍后补上相应来源。 5 | 6 | ### 技术演进 7 | - [推荐系统技术演进趋势:从召回到排序再到重排](https://zhuanlan.zhihu.com/p/100019681) - 2019 8 |
9 | 10 | ### 内容推荐 11 | - [Bag of Tricks for Efficient Text Classification](https://www.semanticscholar.org/paper/Bag-of-Tricks-for-Efficient-Text-Classification-Joulin-Grave/023cc7f9f3544436553df9548a7d0575bb309c2e) - Facebook 开源的文本处理工具 fastText 背后原理。可以训练词嵌入向量,文本多分类,效率和线性模型一样,效果和深度学习一样,值得拥有。 - 2016 12 | 13 | - [The Learning Behind Gmail Priority](https://www.semanticscholar.org/paper/The-Learning-Behind-Gmail-Priority-Aberdeen-Pacovsky/c32e8187d7a575432eee831294b5e2f67962d441) - 介绍了一种基于文本和行为给用户建模的思路,是信息流推荐的早期探索,Gmail 智能邮箱背后的原理。 - 2010 14 | 15 | - [Recommender Systems Handbook(第三章,第九章)](https://book.douban.com/subject/3695850/) - 这本书收录了推荐系统很多经典论文,话题涵盖非常广,第三章专门讲内容推荐的基本原理,第九章是一个具体的基于内容推荐系统的案例。 - 2010 16 | 17 | - [文本上的算法](https://github.com/yanxionglu/text_pdf?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io) - 介绍了文本挖掘中常用的算法,及基础概念。内容涉及概率论,信息论,文本分类,聚类,深度学习,推荐系统等。 - 2016 18 | 19 | - [LDA 数学八卦](http://www.victoriawy.com/wp-content/uploads/2017/12/LDA%E6%95%B0%E5%AD%A6%E5%85%AB%E5%8D%A6.pdf) - 由浅入深地讲解 LDA 原理,对于实际 LDA 工具的使用有非常大的帮助。 - 2013 20 |
21 | 22 | ### 近邻推荐 23 | - [Amazon.com recommendations: item-to-item collaborative filtering](https://www.semanticscholar.org/paper/Recommendations-Item-to-Item-Collaborative-Linden-Smith/4f3cc101a52c7601273d12769a7198f59519e8e6) - 介绍 Amazon 的推荐系统原理,主要是介绍 Item-Based 协同过滤算法。 - 2001 24 | 25 | - [Slope One Predictors for Online Rating-Based Collaborative Filtering](https://arxiv.org/pdf/cs/0702144.pdf) - Slope One 算法。 - 2007 26 | 27 | - [Item-Based Collaborative Filtering Recommendation Algorithms](http://files.grouplens.org/papers/www10_sarwar.pdf) - GroupLens 的研究团队对比了不同的 Item-to-Item 的推荐算法。 - 2001 28 | 29 | - [Collaborative Recommendations Using Item-to-Item Similarity Mappings](https://patents.google.com/patent/US6266649B1/en) - 是的,Amazon 申请了 Item-Based 算法的专利,所以如果在美上市企业,小心用这个算法。 - 1998 30 | 31 | - [Recommender Systems Handbook(第 4 章)](https://book.douban.com/subject/3695850/) - 第四章综述性地讲了近邻推荐,也就是基础协同过滤算法。 - 2010 32 |
33 | 34 | ### 矩阵分解 35 | - [Matrix Factorization and Collaborative Filtering](http://101.96.10.63/acsweb.ucsd.edu/~dklim/mf_presentation.pdf) - 从 PCA 这种传统的数据降维方法讲起,综述了矩阵分解和协同过滤算法。矩阵分解也是一种降维方法。 - 2013 36 | 37 | - [Factorization Meets the Neighborhood: a Multifaceted Collaborative Filtering Model](http://101.96.10.63/www.cs.rochester.edu/twiki/pub/Main/HarpSeminar/Factorization_Meets_the_Neighborhood-_a_Multifaceted_Collaborative_Filtering_Model.pdf) - 把矩阵分解和近邻模型融合在一起。 - 2008 38 | 39 | - [BPR- Bayesian Personalized Ranking from Implicit Feedback](https://arxiv.org/pdf/1205.2618.pdf) - 更关注推荐结果的排序好坏,而不是评分预测精度,那么 BPR 模型可能是首选,本篇是出处。 - 2012 40 | 41 | - [Collaborative Filtering for Implicit Feedback Datasets](http://yifanhu.net/PUB/cf.pdf) - 不同于通常矩阵分解处理的都是评分数据这样的显式反馈,本文介绍一种处理点击等隐式反馈数据的矩阵分解模型。 - 2008 42 | 43 | - [Matrix Factorization Techniques For Recommender Systems](https://datajobs.com/data-science-repo/Recommender-Systems-[Netflix].pdf) - 本文是大神 Yehuda Koren 对矩阵分解在推荐系统中的应用做的一个普及性介绍,值得一读。 - 2009 44 | 45 | - [The BellKor Solution to the Netflix Grand Prize](https://www.netflixprize.com/assets/GrandPrize2009_BPC_BellKor.pdf) - 也是一篇综述,或者说教程,针对 Netflix Prize 的。 - 2009 46 |
47 | 48 | ### 模型融合 49 | - [Adaptive Bound Optimization for Online Convex Optimization](https://arxiv.org/pdf/1002.4908.pdf) - FTRL 是 CTR 预估常用的优化算法,本文介绍 FTRL 算法原理。 - 2010 50 | 51 | - [在线最优化求解](https://github.com/wzhe06/Ad-papers/blob/master/Optimization%20Method/%E5%9C%A8%E7%BA%BF%E6%9C%80%E4%BC%98%E5%8C%96%E6%B1%82%E8%A7%A3(Online%20Optimization)-%E5%86%AF%E6%89%AC.pdf) - 是对 FTRL 的通俗版解说。 - 2014 52 | 53 | - [Ad Click Prediction: a View from the Trenches](https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/41159.pdf) - FTRL 工程实现解读。 - 2013 54 | 55 | - [Factorization Machines](https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf) - 提出 FM 模型的论文,FM 用于 CTR 预估。 - 2010 56 | 57 | - [Field-aware Factorization Machines for CTR Prediction](https://www.csie.ntu.edu.tw/~cjlin/papers/ffm.pdf) - FFM 模型,用于 CTR 预估。 - 2016 58 | 59 | - [Practical Lessons from Predicting Clicks on Ads at Facebook](http://quinonero.net/Publications/predicting-clicks-facebook.pdf) - 提出了 LR + GBDT 的 CTR 预估模型。 - 2014 60 | 61 | - [Wide & Deep Learning for Recommender Systems](https://arxiv.org/pdf/1606.07792.pdf) - 提出融合深度和宽度模型的Wide&Deep 模型,用于 CTR 预估。 - 2016 62 |
63 | 64 | ### Bandit 算法 65 | - [Introduction to Bandits: Algorithms and Theory](https://sites.google.com/site/banditstutorial/) - 介绍 bandit 算法概念,理论和算法。分两部分分别对应小的选项候选集和大的选项候选集。 - 2011 66 |
67 | 68 | ### 深度学习 69 | - [Deep Neural Networks for YouTube Recommendations](https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/45530.pdf) - 介绍 YouTube 视频推荐系统在深度神经网络上的尝试。能从中看到 wide&deep 模型的影子。 - 2016 70 |
71 | 72 | ### 其他实用算法 73 | - [Detecting Near-Duplicates for Web Crawling](http://www2007.cpsc.ucalgary.ca/papers/paper215.pdf) - 在这篇论文中提出了 simhash 算法,用于大规模网页去重。 - 2007 74 |
75 | 76 | ### 常见架构 77 | - [Activity Feeds Architecture](https://www.slideshare.net/danmckinley/etsy-activity-feeds-architecture) - 本文非常详细地介绍了社交动态信息流的架构设计细节。 - 2011 78 |
79 | 80 | ### 关键模块 81 | - [Overlapping Experiment Infrastructure- More, Better, Faster Experimentation](https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/36500.pdf) - ABTest 实验平台的扛鼎之作,Google 出品,值得拥有。 - 2010 82 |
83 | 84 | ### 效果保证 85 | - [Tutorial on Robustness of Recommender Systems](https://www.slideshare.net/neilhurley/tutorial-on-robustness-of-recommender-systems) - 本文非常详细讨论了对推荐系统的攻击和防护,并有实验模拟。 - 2011 86 |
87 | 88 | ### 冷启动 89 |
90 | 91 | ### 特征工程 92 |
93 | 94 | ### Embedding 95 | - [EMBEDDING 在大厂推荐场景中的工程化实践](https://lumingdong.cn/engineering-practice-of-embedding-in-recommendation-scenario.html) - 2019 96 | - [万物皆Embedding,从经典的word2vec到深度学习基本操作item2vec](https://zhuanlan.zhihu.com/p/53194407) - 2019 97 | - [Embedding从入门到专家必读的十篇论文](https://zhuanlan.zhihu.com/p/58805184) - 2019 98 | - [深度学习中不得不学的Graph Embedding方法](https://zhuanlan.zhihu.com/p/64200072) - 2019 99 | - [从KDD 2018 Best Paper看Airbnb实时搜索排序中的Embedding技巧](https://zhuanlan.zhihu.com/p/55149901) - 2019 100 | - [Airbnb如何解决Embedding的数据稀疏问题?](https://zhuanlan.zhihu.com/p/57313656) - 2019 101 |
102 | 103 | ### 多目标 104 |
105 | 106 | ### 强化学习 107 |
108 | 109 | ### 离线指标 110 |
111 | 112 | ### 线上评估 113 |
114 | 115 | ### Serving 116 |
117 | 118 | ## 大厂实战 119 | ## Netflix 120 | - [Netflix大溃败:放弃算法崇拜,向好莱坞低头](https://mp.weixin.qq.com/s/1Jdb-8IdmnZmwofObhYanA) - 2018 121 | - [你看到哪版电影海报,由算法决定:揭秘Netflix个性化推荐系统](https://mp.weixin.qq.com/s/lZ4FOOVIxsdKvfW45CYCnA) - 2017 122 | - [Netflix与推荐系统](https://cloud.tencent.com/developer/article/1088952) - 2016 123 | 124 | ## Hulu 125 | - [干货:从相关性到RNN,一家线上“租碟店”的视频推荐算法演进 | 公开课实录](https://mp.weixin.qq.com/s/KCEcgeiLfI5mKgFdo_Ri6Q) - 2018 126 | - [公开课 | 看了10集《老友记》就被系统推荐了10季,Hulu如何用深度学习避免视频推荐的过拟合](https://mp.weixin.qq.com/s/4KbhzGPF9Jj6ylhKx86szw) - 2018 127 | 128 | ## YouTube 129 | - [反思 Youtube 算法:个性化内容推荐能毁掉你的人格](https://36kr.com/p/5118920.html) - 2018 130 | - [4篇YouTube推荐系统论文, 一起来看看别人家的孩子](https://medium.com/@yaoyaowd/4%E7%AF%87youtube%E6%8E%A8%E8%8D%90%E7%B3%BB%E7%BB%9F%E8%AE%BA%E6%96%87-%E4%B8%80%E8%B5%B7%E6%9D%A5%E7%9C%8B%E7%9C%8B%E5%88%AB%E4%BA%BA%E5%AE%B6%E7%9A%84%E5%AD%A9%E5%AD%90-b91279e03f83) - 2017 131 | - [用DNN构建推荐系统-Deep Neural Networks for YouTube Recommendations论文精读](https://cloud.tencent.com/developer/article/1163931) - 2017 132 | - [原来YouTube推荐系统的内幕是这样……](https://juejin.im/post/59a93438518825238b251cc2) - 2017 133 | - [Youtube 短视频推荐系统变迁:从机器学习到深度学习](https://zhuanlan.zhihu.com/p/28244445) - 2017 134 | 135 | ## Google 136 | - [谷歌推出TF-Ranking:用于排序算法的可扩展TensorFlow库](https://mp.weixin.qq.com/s/xg4yFIAqMe0bOEM8RRcWpQ) - 2018 137 | 138 | ## Microsoft 139 | - [如何将知识图谱特征学习应用到推荐系统?](https://www.msra.cn/zh-cn/news/features/embedding-knowledge-graph-in-recommendation-system-ii) - 2018 140 | 141 | ## Amazon 142 | - [重读经典 | 亚马逊“一键下单”的背后——个性化推荐系统的发展历程](https://cloud.tencent.com/developer/article/1109208) - 2018 143 | 144 | 145 | ## Kaggle 146 | - [Kaggle大神带你上榜单Top2%:点击预测大赛纪实(上)](https://mp.weixin.qq.com/s/Xkt5c11wtxJgIvHC3p9wxA) - 2017 147 | - [Kaggle大神带你上榜单Top2%:点击预测大赛纪实(下)](https://mp.weixin.qq.com/s/5TcykXfFw97mT_aR_ZDOkA) - 2017 148 | 149 | ## 美团 150 | - [美团BERT的探索和实践](https://tech.meituan.com/2019/11/14/nlp-bert-practice.html) - 2019 151 | - [独家揭秘!2.5亿用户的美团智能推荐平台是如何构建的?](https://mp.weixin.qq.com/s?__biz=MzU1NDA4NjU2MA==&mid=2247492434&idx=1&sn=99b360622511a185594e578182c3feab&scene=0#wechat_redirect) - 2018 152 | - [深度学习在美团搜索广告排序的应用实践](https://tech.meituan.com/searchads_dnn.html) - 2018 153 | - [美团“猜你喜欢”深度学习排序模型实践](https://tech.meituan.com/recommend_dnn.html) - 2018 154 | - [深度学习在美团推荐平台排序中的运用](https://tech.meituan.com/dl.html) - 2017 155 | - [旅游推荐系统的演进](https://tech.meituan.com/travel_recsys.html) - 2017 156 | - [美团O2O排序解决方案——线上篇](https://tech.meituan.com/meituan_search_rank.html) - 2015 157 | - [美团O2O排序解决方案——线下篇](https://tech.meituan.com/rerank_solution_offline.html) - 2015 158 | - [美团推荐算法实践](https://tech.meituan.com/mt_recommend_practice.html) - 2015 159 | 160 | 161 | ## 今日头条 162 | - [干货丨3分钟了解今日头条推荐算法原理(附视频+PPT)](https://mp.weixin.qq.com/s/_qtxPizf9LsXXYNYhhsvxA) - 2018 163 | - [技术帖:解析今日头条公开的推荐算法](https://cloud.tencent.com/developer/article/1106562) - 2018 164 | - [深度解密今日头条的个性化资讯推荐技术](https://cloud.tencent.com/developer/article/1042680) - 2017 165 | 166 | ## 抖音 167 | - [抖音推荐系统冷启动](https://juejin.im/post/5b796b0b6fb9a019f47d0862) - 2018 168 | 169 | ## 微博 170 | - [微博推荐系统架构揭秘:基于机器学习的个性化Push应用实践](https://cloud.tencent.com/developer/news/342140) - 2018 171 | - [机器学习在热门微博推荐系统的应用](https://cloud.tencent.com/developer/article/1143169) - 2018 172 | - [微博推荐算法如何设计](https://cloud.tencent.com/developer/article/1058317) - 2015 173 | 174 | ## 爱奇艺 175 | - [爱奇艺个性化推荐排序实践](https://mp.weixin.qq.com/s?__biz=MzI0MjczMjM2NA==&mid=2247483872&idx=1&sn=db0fbb2bec0d4e68593f1b9bfc20a8b5) - 2017 176 | 177 | ## 搜狗 178 | - [搜狗深度学习技术在广告推荐领域的应用](https://cloud.tencent.com/developer/article/1083548) - 2018 179 | 180 | ## 优酷 181 | - [优酷视频基于用户兴趣个性化推荐的挑战和实践](https://www.infoq.cn/article/youku-recommendation-practice) - 2018 182 | - [优酷视频精准推荐系统实践](https://myslide.cn/slides/248?vertical=1) - 2016 183 | 184 | ## 京东 185 | - [京东个性化推荐系统实战(上)](https://cloud.tencent.com/developer/article/1080673) - 2018 186 | - [京东个性化推荐系统实战(下)](https://cloud.tencent.com/developer/article/1080674) - 2018 187 | - [深解京东个性化推荐系统演进史](http://www.woshipm.com/pd/882233.html) - 2017 188 | - [京东推荐系统中的机器学习与大规模线上实验](https://cloud.tencent.com/developer/article/1083894) - 2017 189 | - [京东推荐系统实践](https://myslide.cn/slides/9001?vertical=1) - 2015 190 | 191 | ## 阿里巴巴 192 | - [阿里将 Transformer 用于淘宝电商推荐,效果优于 DIN 和谷歌 WDL](https://www.infoq.cn/article/OJvS7h8JXvD4XCW*qldw) - 2019 193 | - [【阿里算法天才盖坤】解读阿里深度学习实践,CTR 预估、MLR 模型、兴趣分布网络等](https://mp.weixin.qq.com/s/9xw-FwWEK9VI2wNzc8EhPA) - 2018 194 | - [阿里妈妈首次公开新一代智能广告检索模型,重新定义传统搜索框架](https://mp.weixin.qq.com/s/TrWwp-DBTrKqIT_Pfy_o5w) - 2018 195 | - [论文Express | 淘宝广告是怎么优化的?阿里团队实时竞价系统策略](https://mp.weixin.qq.com/s/Tvz9s_O4RQcaxQ5u_c8brw) - 2018 196 | - [个性化app推荐技术在手淘的全面应用](https://yq.aliyun.com/articles/603855?spm=a2c4e.11154873.tagmain.44.2f651257TuWQJG#) - 2018 197 | - [深度丨110亿美金还不够,阿里使用这种AI手段创造更多广告收入(附PPT)丨CCF-GAIR 2017](https://www.leiphone.com/news/201707/t0AT4sIgyWS2QWVU.html) - 2017 198 | - [千亿特征流式学习在大规模推荐排序场景的应用](https://yq.aliyun.com/articles/280235) - 2017 199 | 200 | ## 腾讯 201 | - [深度技术解析,为什么说QQ音乐搜索体验做到了极致?](https://cloud.tencent.com/developer/article/1046806) - 2017 202 | - [百亿级通用推荐系统实践](https://myslide.cn/slides/988?vertical=1) - 2016 203 | 204 | ## 美图 205 | - [干货 | 美图个性化推荐的实践与探索](https://cloud.tencent.com/developer/article/1342091) - 2018 206 | 207 | ## 携程 208 | - [干货 | 携程实时用户行为系统实践](https://cloud.tencent.com/developer/article/1063216) - 2017 209 | 210 | ## 饿了么 211 | - [个性化推荐沙龙 | 饿了么推荐系统的从0到1(含视频)](https://cloud.tencent.com/developer/article/1063100) - 2017 212 | 213 | ## 58 214 | - [58同城推荐系统架构设计与实现](https://cloud.tencent.com/developer/article/1048088) - 2016 215 | - [从0开始做互联网推荐-以58转转为例](https://cloud.tencent.com/developer/article/1047908) - 2016 216 | 217 | ## 搜狐 218 | - [搜狐视频个性化推荐架构设计和实践](https://myslide.cn/slides/4902?vertical=1) - 2016 219 | 220 | ## 百度 221 | - [百度大规模推荐系统实践](https://myslide.cn/slides/3001?vertical=1) - 2016 222 | 223 | ## 知乎 224 | - [进击的下一代推荐系统:多目标学习如何让知乎用户互动率提升 100%?](https://www.infoq.cn/article/hO8ZlIwDVsQmE1-V5oJ3) - 2019 225 | 226 | ## 参考来源: 227 | - [推荐系统三十六式](https://time.geekbang.org/column/article/7204) 228 | -------------------------------------------------------------------------------- /tdm.md: -------------------------------------------------------------------------------- 1 | 原文:[http://d0evi1.com/tdm/](http://d0evi1.com/tdm/) 2 | 阿里在KDD 2018上开放了它们的方法:《Learning Tree-based Deep Model for Recommender Systems》, 我们来看下: 3 | 4 | # 介绍 5 | 6 | 在推荐系统设计中,为每个用户从整个语料(corpus)集中预测最好的候选集合,存在许多挑战。在海量corpus的系统中,一些推荐算法会失败。与corpus size成线性预测复杂度关系是不可接受的。部署这样的大规模推荐系统,预测每个用户所需要的计算量是受限的。除了精准度外,在用户体验上也应考虑推荐items的新颖度(novelty)。推荐结果中如果包含许多与用户的历史行为的同质items是不可接受的。 7 | 8 | 在处理海量corpus时,为了减少计算量,memory-based的CF方法在工业界常被广泛使用。作为CF家族的代表方法,item-based CF可以从非常大的corpus进行推荐,只需要很少的计算量,具体决取于预计算的item pairs间的相似度,以及使用用户历史行为作为触发器(triggers)来召回多个相似items。**然而,这限制了候选集的范围,例如,只有与triggers相似的items可以被推荐**。这阻止了推荐系统跳出它们的历史行为来探索潜在的其它用户兴趣,限制了召回结果的accuracy。实际上,推荐的新颖性(novelty)也是很重要的。**另一个减小计算量的方法是,进行粗粒度推荐(coarsegrained recommendation)**。例如,系统为用户推荐少量的item类目,并根据它选择所有相应的items,接着进行一个ranking stage。然而,对于大语料,计算问题仍然没解决。如果类目数很大,类目推荐本身也会遇到计算瓶颈。如果不这样做,一些类目将不可避免地包含过多items,使得后续的ranking计算行不通。另外,使用的类目通常不是为推荐问题专门设计的,它也会对推荐的accuracy有害。 9 | 10 | 在推荐系统的相关文献中,model-based的方法是一个很活跃的话题。像矩阵分解(MF)这样的模型,尝试将pairwise user-item偏好分解成user factors和item factors,接着为每个用户推荐它最喜欢的items。因子分解机(FM)进一步提出了一个统一模型,对于任意类型的输入数据,可以模仿不同的因子分解模型。在一些真实场景中,没有显式偏好,只有隐式用户反馈(例如:像点击 or 购买 这样的用户行为),Bayesian personalized ranking【29】给出了一个求解思路,它会将三元组中的偏好按局部顺序进行公式化,并将它应用到MF模型中。工业界,YouTube使用DNN来学习user embedding和item embeddings,其中,两种类型的embeddings会分别由其相对应的特征进行生成。**在上述所有类型的方法中,user-item pair的偏好可以被公式化成,user vector表示与item vector表示间的内积(inner product)**。预测阶段等同于检索用户向量在内积空间中的最近邻。对于向量搜索问题,像hashing或quantization[18]用于近似kNN搜索来确保检索的高效性。 11 | 12 | 然而,在user vector representations和item vector representations间的内积交互形式,严重限制了模型的能力。**存在许多类型的其它更具表现力的交互形式,例如,用户历史行为和候选items间的cross-product特征在CTR预估上广泛被使用**。最近的工作【13】提出了一种neural CF方法,它使用一个神经网络来替代内积,被用于建模user和item向量表示间的交互。该工作的试验结果表明,一个多层前馈神经网络,比固定内积方法的效果要好。DIN[34]指出,用户兴趣是分散的,一种基于attention机制的网络结构可以根据不同候选items生成不同的user vectors。除了上述工作外,其它像product NN[27]的方法也表明高级NN的效果。**然而,这些类型的模型与user vector和item vector间的内积方法(利用高效的kNN搜索)不相一致,在大规模推荐系统中,它们不能被用于召回候选集。为了克服计算屏障,在大规模推荐中使用高级NN是个问题**。 13 | 14 | 为了解决上述挑战,我们提出了一个新的TDM(tree-based 15 | deep recommendation model). 树和基于树的方法在多分类问题中被广泛研究,其中,tree通常被用于划分样本(sample)/标签(label)空间,来减小计算代价。然而,研究者们涉足于推荐系统环境中使用树结构做为索引进行检索。实际上,层次化结构(hierarchical structure)的信息存在于许多领域。例如,在电商中,iPhone是细粒度item,而smartphone是粗粒度概念,iPhone属于smartphone。**TDM方法会使用信息的层级,将推荐问题转化成一系列的层次化分类问题(hierarchical classification problems)**。从简到难解决该问题,TDM可以同时提升accuracy和efficiency。该paper的主要贡献如下: 16 | 17 | - TDM是第一个这样的方法,使得在大规模语料中生成推荐的任意高级模型成为可能。受益于层次化树搜索,TDM的计算量只与corpus size成log关系。 18 | - TDM可以从大型数料中发现更精准的显著并有效的推荐结果,由于整个语料是探索式的,更有效的深度模型也可以帮助发现潜在兴趣。 19 | - 除了更高级的模型外,TDM也通过层次化搜索来提升推荐accuracy,它可以将一个大问题划分成更小的问题分而治之。 20 | - 作为索引的一种,为了更高效地检索,树结构可以朝着items和concepts的最优层次结构被学到,它可以帮助模型训练。我们使用一个tree learning方法,它可以对神经网络和树结构进行joint training。 21 | - 我们在两个大规模数据集上做了大量实验,结果展示TDM的效果要比现有方法好很多。 22 | 23 | 值得一提的是,tree-based方法也在语言模型中使用(hirearchical softmax),但它与TDM在思想和公式上都不同。在对下一个词的预测问题上,常用的softmax必须计算归一化项(normalization term)来获取任意单个词的概率,它非常耗时。Hierarchical softmax使用tree结构,下一个词的概率就被转换成沿着该tree path的节点概率乘积。这样的公式将下一个词概率的计算复杂度减小到关于语料size的log级别。**然而,在推荐问题上,为这些最喜爱items搜索整个语料的目标,是一个检索问题**。在hierarchical softmax tree中,父节点的最优化不能保证:最优的低级别节点在它们的子节点上(descendants),并且所有items仍需要被转换成发现最优解。为了解决该检索问题,我们提出了一个类似最大堆的树公式(max-heap like tree),并引入了DNN来建模该树,它为大规模推荐提供了一个有效的方法。以下部分展示了公式的不同之处,它在性能上的优越性。另外,hierarchical softmax采用了单层hidden layer网络来解决一个特定的NLP问题,而我们提出的TDM则实际上可使用任意网络结构。 24 | 25 | 提出的tree-based模型是一个通用解法,适用于所有类型的在线内容提供商。 26 | 27 | # 2.系统架构 28 | 29 | 30 | 31 | 图1 Taobao展示广告(display advertising)推荐系统的系统架构 32 | 33 | 在本节,图1介绍了Taobao 展示广告推荐系统。在接受到一个用户的PV请求时,系统使用用户特征、上下文特征、以及item特征作为输入,会在matching server中从整个语料中(上百万)来生成一个相对较小的候选集合(通常百级别)。**tree-based推荐模型在该stage发挥作用,并将候选集的size缩减了好多阶**。 34 | 35 | 有了数百个候选items,实时预测server会使用更昂贵但也更耗时的模型[11,34]来预测像CTR或转化率之类的指标。在通过策略排完序后,一些items会最终曝光给用户。 36 | 37 | 如上所述,提出的推荐模型的目标是,构建一个含数百个items的候选集。该stage是必须的,也很难。用户在生成的候选上是否感兴趣,给出了曝光质量的一个上界。然而,从整个语料中有效抽取候选是个难题。 38 | 39 | # 3.tree-based Deep模型 40 | 41 | 在本部分,我们首先介绍在我们的tree-based模型中所使用的树结构。然后,介绍hierarchical softmax来展示为什么该公式不适合推荐。最后,我们给出了一个新的类max-heap tree公式,并展示了如何训练该tree-based模型。接着,引入DNN结构。最后,我们展示了如何构建和学习在tree-based模型中构建和学习该tree。 42 | 43 | 44 | 45 | 图2 tree-based deep模型架构。用户行为根据timestamp被划分成不同的时间窗口。在每个时间窗口中,item embeddings被平均加权,权重来自activation units。每个时间窗口的output沿着候选节点的embedding,被拼接成神经网络的输入。在经过三个带PReLU activation和batch normalization的fully-connected layers之后,使用一个二分类softmax来输入probability:用户是否对候选节点感兴趣。每个item和它对应的叶子节点共享相同的embedding。所有embeddings都是随机初始化的。 46 | 47 | ## 3.1 推荐所用树 48 | 49 | 一棵推荐树(recommendation tree)由一个包含N个节点的集合构成,其中$$N=\lbrace n_1, n_2, ..., n_{\mid N \mid}\rbrace$$,表示$$\mid N \mid$$个孤立的非叶子节点或叶子节点。在N中的每个节点,除了根节点外,具有一个父节点、以及特定数目的子节点。特别的,在语料C中的每个item $$c_i$$,仅仅只对应于树中的一个叶子节点,这些非叶子节点是粗粒度概率。不失一般性,我们假设节点$$n_1$$是根节点。一个关于树的示例如图2右下角所示,在其中,每个圆表示一个节点,节点的数字是在树中的索引。**该树总共具有8个叶子节点,每个都对应于语料中的一个item**。值得一提的是,给定的示例是一个完全二叉树,我们不会在我们的模型中强制完全二叉。 50 | 51 | 52 | 53 | 图2右下角 54 | 55 | ## 3.2 相关工作 56 | 57 | 有了树结构,我们首先引入hierachical softmax来帮助区分TDM。在hierachical softmax中,树中的每个叶子节点n,从根节点出发到该节点具有唯一编码。例如,如果我们假定:左分枝为1,右分枝为0, 那么图2中树$$n_9$$的编码为110, $$n_{15}$$的编码为000. **注意,$$b_j(n)$$指的是节点n在第j层上的编码**。在hierachical softmax的公式中,下个词的概率通过上下文给定: 58 | 59 | $$ 60 | p(n | context) = \prod\limits_{j=1}^{w} P(b=b_j(n) | l_j(n), context) 61 | $$ 62 | 63 | ...(1) 64 | 65 | 其中: 66 | 67 | - w:指的是叶子节点n的编码 68 | - $$l_j(n)$$:是在节点n在第j层的父节点 69 | 70 | 通过上述的概率计算方式,hierarchical softmax可以避免softmax中的归一化项(语料中每个词都要遍历一次),从而解决概率计算问题。然而,**为了发现最可能的叶子,该模型仍会遍历整个语料。从上到下沿着树路径(tree path)遍历每个层中最可能的节点,不能保证成功检索到最优的叶子**。因此,hierarchical softmax的公式不适合大规模检索问题。另外,根据公式1, 树中的每个叶子节点以二分类的方式训练,来在两个子节点间做区分。**但是如果两个节点是树中的邻居,它们很可能很相似。在推荐场景中,很可能该用户对两个子节点都感兴趣**。hierarchical softmax主要会在最优解和次优解上建模,从全局上看会丢掉识别能力。如果使用贪婪定向搜索(greedy beam search)来检索这些最可能的叶子节点,一旦在树的上层做出坏的决策,模型在发现更好结果上会失败。YouTube的工作[7]也报告了他们已经尝试用hierachical softmax来学习user embeddings和item embeddings,**而它比sampled-softmax[16]的方式效果要差**。 71 | 72 | hierachical softmax的公式不适合于大规模推荐,我们提出了一种新的树模型。 73 | 74 | ## 3.3 Tree-based模型公式 75 | 76 | 为了解决top-k 最喜欢items检索的效率问题,我们提出了一个最大堆树(max-heap like tree)的概率公式。**最大堆树是一个树结构。其中在第j层中的非叶子节点n,对于每个用户u来说,满足以下公式**: 77 | 78 | $$ 79 | P^{(j)} (n | u) = \frac{\underset{n_c \in \lbrace 第j+1层的n个子节点 \rbrace}{max} P^{(j+1)}(n_c | u)} {\alpha^{(j)}} 80 | $$ 81 | 82 | ...(2) 83 | 84 | 其中: 85 | 86 | - $$P^{(j)}(n \mid u)$$:是第j层上,用户u对节点n感兴趣的真实概率(ground truth probability)。 87 | - $$\alpha^{(j)}$$:是第j层指定layer的归一化项,用来确保在level上的概率和等于1。 88 | 89 | **等式(2)表明,一个父节点的真实偏好等于它的子节点的最大偏好,除以归一化项**。注意,我们对该概率做细微修改,让u表示一个特定的用户状态(user state)。换句话说,一旦该用户有新行为,会从一个特定用户状态u转移到另一个状态u'。 90 | 91 | **我们的目标是,寻找具有最大偏好概率(largest preference probabilitiy)的k个叶子节点**。假设,我们具有在树中每个节点n的真实概率$$P^{(j)}(n \mid u)$$,我们可以使用layer-wise的方式来检索k个节点的最大偏好概率,只有每一层的top k的子节点需要被探索。在这种方式下,top k个叶子节点可以被最终检索到。实际上,**我们不需要知道在上述过程中每棵树节点的实际真实概率。我们需要知道的是每一层的概率顺序,来帮助发现在该层级上的top k个节点**。基于这个观察,我们使用用户的隐式反馈数据和神经网络来训练每个层级(level)的识别器(discriminater),它可以告诉偏好概率的顺序。 92 | 93 | 假设用户u具有一个与叶子节点$$n_d$$的交互(interaction),即,$$n_d$$是一个u的正样本节点。这意味着: 94 | 95 | $$ 96 | P^{(m)}(n_d \mid u) > p^{(m)}(n_t \mid u) 97 | $$ 98 | 99 | 其中:m是叶子层级,$$n_t$$是任意其它叶子节点。 100 | 101 | 在任意层级j中,$$l_j(n_d)$$表示在级别j上的$$n_d$$的父节点。根据等式(2)的公式,我们假设: 102 | 103 | $$ 104 | P^{(j)}(l_j(n_d) \mid u) > P^{(j)}(n_q \mid u) 105 | $$ 106 | 107 | 其中:$$n_q$$是除了$$l_j(n_d)$$外在层级j上的任意节点。 108 | 109 | 在上述分析的基础中,我们可以使用negative sampling来训练每个层级的**顺序判别器(order discriminator)**。细节上,与u有交互的叶子节点,它的父节点为u构成了在每个层级中的正样本集合。在每个层级上,随机选择若干负样本(除去正样本),构建了负样本集合。在图2中,绿色和红色节点给出了抽样示例。**假设,给定一个用户和它的状态,目标节点是$$n_{13}$$。接着,$$n_{13}$$的父节点是正样本,这些在每个层级上随机抽取的红色节点,是负样本。这些样本接着被feed给二分类概率模型来获取层级(levels)上的顺序判别器(order discriminators)**。我们使用一个全局DNN二分类模型,为所有层级使用不同输入来训练顺序判别器。可以使用高级的神经网络来提升模型能力。 110 | 111 | 假设$$y_u^+$$和$$y_u^-$$是关于u的正负样本集合。似然函数为: 112 | 113 | $$ 114 | \prod\limits_u (\prod\limits_{u \in y_u^+} P(\hat{y}_u(n) = 1 |n, u) \prod_{n \in y_u^-} P(\hat{y}_u(n)=0 | n, u)) 115 | $$ 116 | 117 | ...(3) 118 | 119 | 其中: 120 | 121 | - $$\hat{y}_u(n)$$是给定u的节点n的预测label。 122 | - $$P(\hat{y}_u(n) \mid n, u)$$是二分类概率模型的输出(它采用用户状态u以及抽样节点n作为输入)。 123 | 124 | 相应的loss函数为: 125 | 126 | $$ 127 | -\sum\limits_u \sum\limits_{n \in y_u^+ \cup y_u^-} y_u(n) log P(\hat{y}_u(n) = 1 | n,u) + (1 - y_u(n)) log P(\hat{y}_u(n) = 0 | n,u) 128 | $$ 129 | 130 | ...(4) 131 | 132 | 其中:$$y_u(n)$$是给定u的节点n的ground truth label。3.4节将讲述如何根据loss函数来训练模型。 133 | 134 | **注意,提出的抽样方法与hierarchical softmax相当不同**。对比在hierarchical softmax中使用的方法(它会让模型混淆最优和次优结果),我们的方法会为每个正节点的同层级随机选择负样本。**这种方法让每一层的判别器是一个内部层级全局判别器(intra-level global)**。每个层级的全局判别器(global discriminator)可以更独立的做出精准决策,不需要依赖于上层决策的好坏。全局判别能力对于hierarchical推荐方法非常重要。它可以确保:即使模型做出坏的决策,让低质量节点会漏进到上层中的候选集,通过该模型在下层也能选中那些相对更好的节点,而非非常差的节点。 135 | 136 | 137 | 138 | 算法1 139 | 140 | 给定一棵推荐树、以及一个最优模型,详细的hierarchical预测算法在算法1中描述。检索过程是layer-wise和top-down的。假设,期望的候选item数是k。对于语料C,它具有size=$$\mid C \mid$$,在最多$$2 * k * log \mid C \mid$$个节点上遍历,可以获取在一个完全二叉树上最终的推荐集合。节点数需要在一个关于log(corpus size)级别上遍历,这样可以做出高级的二分概率模型。 141 | 142 | 我们提出的TDM方法不仅减少了预测时的计算量,也潜在地提升了推荐质量(对比起在所有叶子节点上的brute-force search)。**由于corpus size可能很大,如果没有这棵树,训练一个模型来直接发现最优items是一个很难的问题。使用树的层次化(tree hierarchy),大规模推荐问题可以被划分成许多更小的问题。在树的高层中只存在很少节点,判别问题更容易些**。由高层上做出的决策可以重新定义候选集,它可以帮助更低层级做出更好的决策。第5.4节中的实验结果,将展示提出的hierarchical retrieval方法的效果要好于brute-force search。 143 | 144 | ## 3.4 Deep模型 145 | 146 | 下面,我们引入deep模型。整个模型如图2所示。受ctr工作的启发[34],我们为树中的每个节点学习低维embeddings,并使用attention模块来为相关行为进行软搜索(softly searching)以求更用的user representation。为了利用包含timestamp信息的用户行为,我们设计了block-wise input layer来区别在不同时间窗口的行为。历史行为可以被划分成沿timeline的不同时间窗,在每个时间窗口中的item embeddings是平均加权的。Attention模块和下面介绍的网络可以极大增强模型能力,同时可以在不能够以内积形式表示的候选集上做出用户偏好。 147 | 148 | 树节点的embeddings和树结构本身是模型的一部分。为了最小化公式(4)的Loss,抽样节点和相应的特征可以被用于训练该网络。注意,我们只在图2中出于简洁性,展示了用户行为特征的使用,而其它像user profile的features或contextual feature,可以被使用,并无大碍。 149 | 150 | ## 3.5 树的构建和学习 151 | 152 | 推荐树是tree-based deep推荐模型的一个基础部件。不同于multiclass和multi-label分类任务,其中tree被用于划分样本或labels,**我们的推荐树会对items进行索引以方便检索**。在hierarchical softmax中,词的层次结构可以根据WordNet的专家知识构建。在推荐场景,并不是每个语料可以提供特有的专家知识。一个直觉上的选择是,使用hierarchical聚类方法,基于数据集中item共现或相似度来构建树。但聚类树可能相当不均衡,不利于训练和检索。给定pairwise item similarity,paper[2]的算法给出了一种方法来通过谱聚类将items递归分割成子集。然而,对于大规模语料来说谱聚类的扩展性不够(复杂度随corpus size成三次方增长)。在本节中,我们主要关注合理和可行的树构建和学习方法。 153 | 154 | **树的初始化**。由于我们假设该树表示了用户兴趣的层次结构化(hierarchical)信息,很自然地以在相近位置组织相似items的方式来构建树。假设,在许多领域中类目信息是广泛提供的,我们直觉上提出一个方法来利用item的类目信息来构建初始的树。不失一般性,我们在本节中使用二叉树。首先,我们会对所有类目随机排序,以一个intra-category的随机顺序将属于相同类目的items放置在一起。如果一个item属于多个类目,出于唯一性,item被随机分配给其中之一。这种方式下,我们给出了一个ranked items的列表。第二,这些ranked items被递归均分为两个相同的部分,直到当前集合有且仅包含一个item,它可以自顶向底构建一个近似完全二叉树。上述类型的category-based初始化,可以比完全随机树获取更好的hierarchy。 155 | 156 | **树的学习**。作为模型的一部分,每棵叶子节点的embedding可以在模型训练之后被学习得到。**接着,我们使用学到的叶子节点的embedding向量来聚类一棵新的树**。考虑到corpus size,我们使用k-means聚类算法。在每个step,items会根据它们的embedding vectors被聚类成两个子集。注意,两个子集会被调整成相等以得到一个更平衡的树。当只剩下一个item时,递归过程停止,结果产生一棵二叉树。在我们的实验中,使用单台机器,当语料size为400w时,它会花费一个小时来构建这样的一个聚类树。第5节的实验结果表明所给树学习算法有效率。 157 | 158 | # 4.online serving 159 | 160 | 图3展示了提出方法的online serving系统。Input feature assembling和item retrieval被划分成两个异步的stages。每个用户行为(包含点击、购买以及加入购物车),会触发realtime feature server组装新的input features。一旦接收到PV请求时,user targeting server会使用预组装的features来从该树中检索候选。**如算法1所述,检索是layer-wise的,训练的神经网络被用于计算:对于给定input features,一个节点是否被喜欢的概率**。 161 | 162 | 163 | 164 | 图3 165 | 166 | # 5.实验研究 167 | 168 | 本部分会研究tree-based模型的效果。实验结果在MovieLens-20M和Taobao advertising dataset(称为UserBehavior数据集)。 169 | 170 | - MovieLens-20M: 包含了user-movie评分数据,带有timestamps。我们会处理隐式反馈问题,评分被二值化:4分以上为1. 另外,只有观看了至少10部电影的用户才会被保留。为了创建训练集、测试集、验证集,我们随机抽样了1000个用户做测试集,另1000用户做验证集,其余用户用于训练集。对于测试集和验证集,**沿timeline的前一半user-movie观看记录被看成是已知行为,用于预测后一半**。 171 | - UserBehavior: 该数据集是taobao用户行为数据集的子集。我们随机选取了100w具有点击、购买、加入购物车、喜欢收藏的行为,在2017年11.25-12.03间。数据的组织与MovieLens非常相似,例如,一个user-item行为,包含了user ID, item ID, item category ID, 行为类型和timestamp。和MovieLens-20类似,只有至少有10个行为的用户会保留。10000用户会被机选中做为测试集,另一随机选中的10000用户是验证集。Item categories从taobao当前的商品类目的最底层类目得到。表1是两个数据集的主要统计: 172 | 173 | 174 | 175 | 表1 176 | 177 | # 5.2 Metrics和比较 178 | 179 | 为了评估不同方法效果,我们使用Precision@M, Recall@M和F-Measure@M。 180 | 181 | - FM:由xLean项目提供的FM 182 | - BPR-MF: 由[10]提供的BPR-MF 183 | - Item-CF: Item-based CF,由Alibaba自己实现 184 | - Youtube product-DNN: Youtube的方法。训练时使用Sampled-softmax,在Alibaba深度学习平台上实现。预测时在内积空间中采用Exact kNN search。 185 | - TDM attention-DNN(tree-based模型,使用attention网络),如图2所示。树的初始化由3.5节所示,在实验期间保持不变。实现在[github上](https://github.com/alibaba/x-deeplearning/tree/master/xdl-algorithm-solution/TDM)。 186 | 187 | 对于FM, BPR-MF和item-CF,我们会基于验证集调参,例如:在FM和BPR-MF的因子数和迭代数,在item-CF中的邻居数。FM和BPR-MF需要用户在测试集和验证集上也具有在训练集中的反馈。因些,我们会根据timeline添加在测试集和验证集中前一半的user-item交互,到训练集中。对于Youtube product-DNN和TDM attention-DNN,节点的embeddings的维度设置为25, 因为在我们的实验中一个更高维度并不会带来很大的效果提升。hidden unit数目分别设置为128, 64, 64. 根据timestamp,用户行为被划分成10个time windows。在Youtube product-DNN和TDM attention-DNN中,对于每个隐式反馈,我们为MovieLens-20M随机选择100个负样本, 为UserBehavior随机选择600个负样本。注意,TDM的负样本数据是所有层的求和。我们会为接近叶子的层级抽样更多的负样本。 188 | 189 | ## 5.3 结果比较 190 | 191 | 结果如表2所示: 192 | 193 | 194 | 195 | 表2 196 | 197 | 为了验证新颖性(novelty),一种常用的方法是:过滤掉在推荐集中的交互项【8,20】,例如,只有这些新的items可以被最后推荐。因而,在一个完全新的结果集上比较accuracy更重要。在该实验中,结果集的size可以被补足到M,如果在过滤后size小于M。在过滤完交互items后,表2的底部展示了TDM的attention-DNN效果要好于所有baseline一大截。 198 | 199 | 为了进一步评估不同方法的能力,我们通过将这些交互类目从结果中排除做实验。每个方法可以补足以满足size需求。确实,category-level novelty在Taobao推荐系统中是最重要的新颖性(novelty)指标。我们希望减小与用户交互项的推荐数目。由于MovieLens-20M只有20个类目,该实验只包含了UserBehavior数据集,结果如表3所示。以recall指标为例,我们观察到item-CF的recall只有1.06%,由于它的推荐结果可以有一半跳出用户的历史行为。Youtube product-DNN对比item-CF会获取更好的结果,由于它从整个语料探索用户的潜在兴趣。而TDM attention-DNN在recall上的效果比Youtube的inner product方式要好34.3%。这种巨大的提升对于推荐系统来说非常有意义,它证明了更高级的模型对于推荐问题来说有巨大的不同。 200 | 201 | 202 | 203 | 表3 204 | 205 | ## 5.4 经验分析 206 | 207 | TDM的变种。为了自身比较,也评估了一些变种: 208 | 209 | - TDM product-DNN: 210 | - TDM DNN: 211 | - TDM attention-DNN-HS: 212 | 213 | 实验结果如表2中虚线以下所示。TDM attention-DNN到TDM DNN的比较,在UserBehavior数据集上有10% recall提升,attention模块会有明显的提升。TDM product-DNN效果比TDM DNN、TDM attention-DNN要差,因为inner product的方法比神经网络的交互形式要差些。这些结果表明:在TDM中引入的高级模型可以极大提升推荐的效果。注意,对比起TDM attention-DNN,TDM attention-DNN-HS会获取更差的结果。因为hierarchical softmax的公式不能很好适应推荐问题。 214 | 215 | **树的角色**。Tree是TDM的关键组件。它不仅扮演着检索时的索引角色,也会以从粗到细的层级结构形式来建模语料。第3.3节中提到的,直接做出细粒度推荐要比以层级结构方式更难。我们通过实验证明了这个观点。图4展示了layer-wise Recall@200的hierarchical tree search(算法1)和brute-force search。该实验在UserBehavior数据集上使用TDM product-DNN模型,因为它是唯一可以采用brute-force search的变种。在高层级上(8-9),burte-force search的效果只比tree search要稍微好一点点,因为节点数很小。一旦在一个层级上的节点数增长了,对比起burte-force, search,tree search会获取更好的recall结果,因为tree search可以排除那些在高层级上的低质量结果,它可以减少在低层级上的问题的难度。该结果表明,在树结果中包含的hierarchy信息,可以帮助提升推荐的准确性。 216 | 217 | 218 | 219 | 图4 220 | 221 | **tree learning**。在3.5节中,我们提出了树的初始化和学习算法。表4给出了在initial tree和learnt tree间的比较结果。从结果看,我们可以发现,使用learnt tree结构的训练模型可以极大提升intial tree。例如,learnt tree的recall指标从4.15%到4.82%,对比起在过滤交互类目的实验中的initial tree,它使用Youtube product-DNN: 3.09%, item-CF: 1.06%。为了进一步比较这两个tree,我们展示了TDM attention-DNN的test loss和recall曲线,训练迭代如图5所示。从图5(a)中,我们可以看到learnt tree结构的test loss变小。图5(a)和5(b)表明,模型会收敛到较好的结果。上述结果表明,tree-learning算法可以提升items的hierarchy,从而进一步提升训练和预测。 222 | 223 | 224 | 225 | 图5 226 | 227 | ## 5.5 Online效果 228 | 229 | 我们在taobao效果广告平台的真实流量上评估了提出的TDM的方法。实验在taobao app主页上的猜你喜欢(Guess What You Like)中进行实验。用于评估效果的两个指标是:CTR和RPM(每1000的回报率)。详细如下: 230 | 231 | $$ 232 | CTR=\frac{# of clicks}{# of impressions}, RPM = \frac{广告收入}{曝光数} * 1000 233 | $$ 234 | 235 | ...(8) 236 | 237 | 在我们的广告系统中,广告主会对一些给定的ad clusters竞价。有将近1400w的clusters,每个ad cluster包含了上百或上千条相似的ads。该验验以ad cluster的粒度开展,以保持与现有系统的一致。比较方法有:LR作为baseline。由于系统中有许多stages,部署TDM online方法是一个巨大的项目,涉及到整个系统。我们完成了第一个TDM DNN版本,并评估了online流量。每个分桶具有5%的在线流量。值得一提的是,有许多在线同时运行推荐的方法。他们从不同的视角,产生的结果进行合并进入到下一stages。TDM只会替换它们中最有效的,保持其它模块不变。带有TDM的测试分桶的平均metric提升率,如表5所示。 238 | 239 | 如表5所示,TDM方法的CTR提升了2.1%。这项提升表明提出的方法可以为用户召回更多精准的结果。另一方法,RPM的metric增加了6.4%,这意味着TDM的方法也可以为taobao广告平台带来更多回报。 240 | 241 | **预测效果**。TDM使得,在大规模推荐中与user和items交叉高级神经网络变得可行,它打开了一个全新视角。值得一提的是,尽管高级神经网络在inferring时需要更多的计算,但整个预测过程的复杂度不会大于$$O(k * log \mid C \mid * t)$$,其中,k是所需结果的size,$$\mid C \mid$$是corpus size,t是网络中单个feed-forward pass的复杂度。该复杂度的上界在当前CPU/GPU硬件环境下是可接受的,在单个检索中,用户侧特征可以跨不同的节点共享,一些计算可以根据模型设计被共享。在Taobao展示广告系统中,它实际上会采用TDM DNN模型,平均一次推荐需要6ms。这样的运行时间比接下来的ctr预测模型要短,不会是系统瓶颈。 242 | 243 | # 6.结论 244 | 245 | 246 | 247 | # 参考 248 | 249 | - 1.[https://arxiv.org/pdf/1801.02294.pdf](https://arxiv.org/pdf/1801.02294.pdf) 250 | --------------------------------------------------------------------------------