阿里在KDD 2018上开放了它们的方法:《Learning Tree-based Deep Model for Recommender Systems》, 我们来看下:

注:tdm的paper最好结合代码去理解。

介绍

在推荐系统设计中,为每个用户从整个语料(corpus)集中预测最好的候选集合,存在许多挑战。在海量corpus的系统中,一些推荐算法会失败。与corpus size成线性预测复杂度关系是不可接受的。部署这样的大规模推荐系统,预测每个用户所需要的计算量是受限的。除了精准度外,在用户体验上也应考虑推荐items的新颖度(novelty)。推荐结果中如果包含许多与用户的历史行为的同质items是不可接受的。

在处理海量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有害。

在推荐系统的相关文献中,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搜索来确保检索的高效性。

然而,在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是个问题

为了解决上述挑战,我们提出了一个新的TDM(tree-based deep recommendation model). 树和基于树的方法在多分类问题中被广泛研究,其中,tree通常被用于划分样本(sample)/标签(label)空间,来减小计算代价。然而,研究者们涉足于推荐系统环境中使用树结构做为索引进行检索。实际上,层次化结构(hierarchical structure)的信息存在于许多领域。例如,在电商中,iPhone是细粒度item,而smartphone是粗粒度概念,iPhone属于smartphone。TDM方法会使用信息的层级,将推荐问题转化成一系列的层次化分类问题(hierarchical classification problems)。从简到难解决该问题,TDM可以同时提升accuracy和efficiency。该paper的主要贡献如下:

  • TDM是第一个这样的方法,使得在大规模语料中生成推荐的任意高级模型成为可能。受益于层次化树搜索,TDM的计算量只与corpus size成log关系。
  • TDM可以从大型数料中发现更精准的显著并有效的推荐结果,由于整个语料是探索式的,更有效的深度模型也可以帮助发现潜在兴趣。
  • 除了更高级的模型外,TDM也通过层次化搜索来提升推荐accuracy,它可以将一个大问题划分成更小的问题分而治之。
  • 作为索引的一种,为了更高效地检索,树结构可以朝着items和concepts的最优层次结构被学到,它可以帮助模型训练。我们使用一个tree learning方法,它可以对神经网络和树结构进行joint training。
  • 我们在两个大规模数据集上做了大量实验,结果展示TDM的效果要比现有方法好很多。

值得一提的是,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则实际上可使用任意网络结构。

提出的tree-based模型是一个通用解法,适用于所有类型的在线内容提供商。

2.系统架构

图1 Taobao展示广告(display advertising)推荐系统的系统架构

在本节,图1介绍了Taobao 展示广告推荐系统。在接受到一个用户的PV请求时,系统使用用户特征、上下文特征、以及item特征作为输入,会在matching server中从整个语料中(上百万)来生成一个相对较小的候选集合(通常百级别)。tree-based推荐模型在该stage发挥作用,并将候选集的size缩减了好多阶

有了数百个候选items,实时预测server会使用更昂贵但也更耗时的模型[11,34]来预测像CTR或转化率之类的指标。在通过策略排完序后,一些items会最终曝光给用户。

如上所述,提出的推荐模型的目标是,构建一个含数百个items的候选集。该stage是必须的,也很难。用户在生成的候选上是否感兴趣,给出了曝光质量的一个上界。然而,从整个语料中有效抽取候选是个难题。

3.tree-based Deep模型

在本部分,我们首先介绍在我们的tree-based模型中所使用的树结构。然后,介绍hierarchical softmax来展示为什么该公式不适合推荐。最后,我们给出了一个新的类max-heap tree公式,并展示了如何训练该tree-based模型。接着,引入DNN结构。最后,我们展示了如何构建和学习在tree-based模型中构建和学习该tree。

图2 tree-based deep模型架构。用户行为根据timestamp被划分成不同的时间窗口。在每个时间窗口中,item embeddings被平均加权,权重来自activation units。每个时间窗口的output沿着候选节点的embedding,被拼接成神经网络的输入。在经过三个带PReLU activation和batch normalization的fully-connected layers之后,使用一个二分类softmax来输入probability:用户是否对候选节点感兴趣。每个item和它对应的叶子节点共享相同的embedding。所有embeddings都是随机初始化的。

3.1 推荐所用树

一棵推荐树(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。值得一提的是,给定的示例是一个完全二叉树,我们不会在我们的模型中强制完全二叉。

图2右下角

3.2 相关工作

有了树结构,我们首先引入hierachical softmax来帮助区分TDM。在hierachical softmax中,树中的每个叶子节点n,从根节点出发到该节点具有唯一编码。例如,如果我们假定:左分枝为1,右分枝为0, 那么图2中树\(n_9\)的编码为110, \(n_{15}\)的编码为000。在hierachical softmax的公式中,下个词的概率通过上下文给定:

\[p(n | context) = \prod\limits_{j=1}^{w} P(b=b_j(n) | l_j(n), context)\]

…(1)

其中:

  • \(b_j(n)\)指的是节点n在第j层上的编码
  • w:指的是叶子节点n的编码
  • \(l_j(n)\):是在节点n在第j层的父节点

通过上述的概率计算方式,hierarchical softmax可以避免softmax中的归一化项(语料中每个词都要遍历一次),从而解决概率计算问题。然而,为了发现最可能的叶子,该模型仍会遍历整个语料。从上到下沿着树路径(tree path)遍历每个层中最可能的节点,不能保证成功检索到最优的叶子。因此,hierarchical softmax的公式不适合大规模检索问题。另外,根据公式1, 树中的每个叶子节点以二分类的方式训练,来在两个子节点间做区分。但是如果两个节点是树中的邻居,它们很可能很相似。在推荐场景中,很可能该用户对两个子节点都感兴趣。hierarchical softmax主要会在最优解和次优解上建模,从全局上看会丢掉识别能力。如果使用贪婪定向搜索(greedy beam search)来检索这些最可能的叶子节点,一旦在树的上层做出坏的决策,模型在发现更好结果上会失败。YouTube的工作[7]也报告了他们已经尝试用hierachical softmax来学习user embeddings和item embeddings,而它比sampled-softmax[16]的方式效果要差

hierachical softmax的公式不适合于大规模推荐,我们提出了一种新的树模型。

3.3 Tree-based模型公式

为了解决top-k 最喜欢items检索的效率问题,我们提出了一个最大堆树(max-heap like tree)的概率公式。最大堆树是一个树结构。其中在第j层中的非叶子节点n,对于每个用户u来说,满足以下公式

\[P^{(j)} (n | u) = \frac{\underset{n_c \in \lbrace 第j+1层的n个子节点 \rbrace}{max} P^{(j+1)}(n_c | u)} {\alpha^{(j)}}\]

…(2)

其中:

  • \(P^{(j)}(n \mid u)\):是第j层上,用户u对节点n感兴趣的真实概率(ground truth probability)。
  • \(\alpha^{(j)}\):是第j层指定layer的归一化项,用来确保在level上的概率和等于1。

等式(2)表明,一个父节点的真实偏好等于它的子节点的最大偏好,除以归一化项。注意,我们对该概率做细微修改,让u表示一个特定的用户状态(user state)。换句话说,一旦该用户有新行为,会从一个特定用户状态u转移到另一个状态u’。

我们的目标是,寻找具有最大偏好概率(largest preference probabilitiy)的k个叶子节点。假设,我们具有在树中每个节点n的真实概率\(P^{(j)}(n \mid u)\),我们可以使用layer-wise的方式来检索k个节点的最大偏好概率,只有每一层的top k的子节点需要被探索。在这种方式下,top k个叶子节点可以被最终检索到。实际上,我们不需要知道在上述过程中每棵树节点的实际真实概率。我们需要知道的是每一层的概率顺序,来帮助发现在该层级上的top k个节点。基于这个观察,我们使用用户的隐式反馈数据和神经网络来训练每个层级(level)的识别器(discriminater),它可以告诉偏好概率的顺序。

假设用户u具有一个与叶子节点\(n_d\)的交互(interaction),即,。这意味着:

\[P^{(m)}(n_d \mid u) > p^{(m)}(n_t \mid u)\]

其中:

  • \(n_d\)是一个u的正样本节点
  • m是叶子层级
  • \(n_t\)是同层级任意其它叶子节点

在任意层级j上,根据等式(2)的公式,我们假设:

\[P^{(j)}(l_j(n_d) \mid u) > P^{(j)}(n_q \mid u)\]

其中:

  • \(l_j(n_d)\)表示在级别j上的\(n_d\)的父节点
  • \(n_q\): 在层级j上,除了\(l_j(n_d)\)外的任意节点

在上述分析的基础中,我们可以使用negative sampling来训练每个层级的顺序判别器(order discriminator)。细节上,与u有交互的叶子节点,它的父节点为u构成了在每个层级中的正样本集合。在每个层级上,随机选择若干负样本(除去正样本),构建了负样本集合。在图2中,绿色和红色节点给出了抽样示例。假设,给定一个用户和它的状态,目标节点是\(n_{13}\)。接着,\(n_{13}\)的父节点是正样本,这些在每个层级上随机抽取的红色节点,是负样本。这些样本接着被feed给二分类概率模型来获取层级(levels)上的顺序判别器(order discriminators)。我们使用一个全局DNN二分类模型,为所有层级使用不同输入来训练顺序判别器。可以使用高级的神经网络来提升模型能力。

假设\(y_u^+\)和\(y_u^-\)是关于u的正负样本集合。似然函数为:

\[\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))\]

…(3)

其中:

  • \(\hat{y}_u(n)\)是给定u的节点n的预测label。
  • \(P(\hat{y}_u(n) \mid n, u)\)是二分类概率模型的输出(它采用用户状态u以及抽样节点n作为输入)。

相应的loss函数为:

\[-\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)\]

…(4)

其中:\(y_u(n)\)是给定u的节点n的ground truth label。3.4节将讲述如何根据loss函数来训练模型。

注意,提出的抽样方法与hierarchical softmax相当不同。对比在hierarchical softmax中使用的方法(它会让模型混淆最优和次优结果),我们的方法会为每个正节点的同层级随机选择负样本。这种方法让每一层的判别器是一个内部层级全局判别器(intra-level global)。每个层级的全局判别器(global discriminator)可以更独立的做出精准决策,不需要依赖于上层决策的好坏。全局判别能力对于hierarchical推荐方法非常重要。它可以确保:即使模型做出坏的决策,让低质量节点会漏进到上层中的候选集,通过该模型在下层也能选中那些相对更好的节点,而非非常差的节点

算法1

给定一棵推荐树、以及一个最优模型,详细的hierarchical预测算法在算法1中描述。检索过程是layer-wise和top-down的。假设,期望的候选item数是k。对于语料C,它具有size=\(\mid C \mid\),在最多\(2 * k * log \mid C \mid\)个节点上遍历,可以获取在一个完全二叉树上最终的推荐集合。节点数需要在一个关于log(corpus size)级别上遍历,这样可以做出高级的二分概率模型。

我们提出的TDM方法不仅减少了预测时的计算量,也潜在地提升了推荐质量(对比起在所有叶子节点上的brute-force search)。由于corpus size可能很大,如果没有这棵树,训练一个模型来直接发现最优items是一个很难的问题。使用树的层次化(tree hierarchy),大规模推荐问题可以被划分成许多更小的问题。在树的高层中只存在很少节点,判别问题更容易些。由高层上做出的决策可以重新定义候选集,它可以帮助更低层级做出更好的决策。第5.4节中的实验结果,将展示提出的hierarchical retrieval方法的效果要好于brute-force search。

3.4 Deep模型

下面,我们引入deep模型。整个模型如图2所示。受ctr工作的启发[34],我们为树中的每个节点学习低维embeddings,并使用attention模块来为相关行为进行软搜索(softly searching)以求更用的user representation。为了利用包含timestamp信息的用户行为,我们设计了block-wise input layer来区别在不同时间窗口的行为。历史行为可以被划分成沿timeline的不同时间窗,在每个时间窗口中的item embeddings是平均加权的。Attention模块和下面介绍的网络可以极大增强模型能力,同时可以在不能够以内积形式表示的候选集上做出用户偏好。

树节点的embeddings和树结构本身是模型的一部分。为了最小化公式(4)的Loss,抽样节点和相应的特征可以被用于训练该网络。注意,我们只在图2中出于简洁性,展示了用户行为特征的使用,而其它像user profile的features或contextual feature,可以被使用,并无大碍。

3.5 树的构建和学习

推荐树是tree-based deep推荐模型的一个基础部件。不同于multiclass和multi-label分类任务,其中tree被用于划分样本或labels,我们的推荐树会对items进行索引以方便检索。在hierarchical softmax中,词的层次结构可以根据WordNet的专家知识构建。在推荐场景,并不是每个语料可以提供特有的专家知识。一个直觉上的选择是:使用hierarchical聚类方法,基于数据集中item共现或相似度来构建树。但聚类树可能相当不均衡,不利于训练和检索。给定pairwise item similarity,paper[2]的算法给出了一种方法来通过谱聚类将items递归分割成子集。然而,对于大规模语料来说谱聚类的扩展性不够(复杂度随corpus size成三次方增长)。在本节中,我们主要关注合理和可行的树构建和学习方法。

树的初始化。由于我们假设该树表示了用户兴趣的层次结构化(hierarchical)信息,很自然地以在相近位置组织相似items的方式来构建树。假设,在许多领域中类目信息是广泛提供的,我们直觉上提出一个方法来利用item的类目信息来构建初始的树。不失一般性,我们在本节中使用二叉树。

  • 首先,我们会对所有类目随机排序,以一个intra-category的随机顺序将属于相同类目的items放置在一起。如果一个item属于多个类目,出于唯一性,item被随机分配给其中之一。这种方式下,我们给出了一个ranked items的列表。
  • 第二,这些ranked items被递归均分为两个相同的部分,直到当前集合有且仅包含一个item,它可以自顶向底构建一个近似完全二叉树。上述类型的category-based初始化,可以比完全随机树获取更好的hierarchy。

树的学习。作为模型的一部分,每棵叶子节点的embedding可以在模型训练之后被学习得到。接着,我们使用学到的叶子节点的embedding向量来聚类一棵新的树。考虑到corpus size,我们使用k-means聚类算法。在每个step,items会根据它们的embedding vectors被聚类成两个子集。注意,两个子集会被调整成相等以得到一个更平衡的树。当只剩下一个item时,递归过程停止,结果产生一棵二叉树。在我们的实验中,使用单台机器,当语料size为400w时,它会花费一个小时来构建这样的一个聚类树。第5节的实验结果表明所给树学习算法有效率。

4.online serving

图3展示了提出方法的online serving系统。Input feature assembling和item retrieval被划分成两个异步的stages。每个用户行为(包含点击、购买以及加入购物车),会触发realtime feature server组装新的input features。一旦接收到PV请求时,user targeting server会使用预组装的features来从该树中检索候选。如算法1所述,检索是layer-wise的,训练的神经网络被用于计算:对于给定input features,一个节点是否被喜欢的概率

图3

5.实验研究

本部分会研究tree-based模型的效果。实验结果在MovieLens-20M和Taobao advertising dataset(称为UserBehavior数据集)。

  • MovieLens-20M: 包含了user-movie评分数据,带有timestamps。我们会处理隐式反馈问题,评分被二值化:4分以上为1. 另外,只有观看了至少10部电影的用户才会被保留。为了创建训练集、测试集、验证集,我们随机抽样了1000个用户做测试集,另1000用户做验证集,其余用户用于训练集。对于测试集和验证集,沿timeline的前一半user-movie观看记录被看成是已知行为,用于预测后一半
  • 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是两个数据集的主要统计:

表1

5.2 Metrics和比较

为了评估不同方法效果,我们使用Precision@M, Recall@M和F-Measure@M。

  • FM:由xLean项目提供的FM
  • BPR-MF: 由[10]提供的BPR-MF
  • Item-CF: Item-based CF,由Alibaba自己实现
  • Youtube product-DNN: Youtube的方法。训练时使用Sampled-softmax,在Alibaba深度学习平台上实现。预测时在内积空间中采用Exact kNN search。
  • TDM attention-DNN(tree-based模型,使用attention网络),如图2所示。树的初始化由3.5节所示,在实验期间保持不变。实现在github上

对于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的负样本数据是所有层的求和。我们会为接近叶子的层级抽样更多的负样本。

5.3 结果比较

结果如表2所示:

表2

为了验证新颖性(novelty),一种常用的方法是:过滤掉在推荐集中的交互项【8,20】,例如,只有这些新的items可以被最后推荐。因而,在一个完全新的结果集上比较accuracy更重要。在该实验中,结果集的size可以被补足到M,如果在过滤后size小于M。在过滤完交互items后,表2的底部展示了TDM的attention-DNN效果要好于所有baseline一大截。

为了进一步评估不同方法的能力,我们通过将这些交互类目从结果中排除做实验。每个方法可以补足以满足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%。这种巨大的提升对于推荐系统来说非常有意义,它证明了更高级的模型对于推荐问题来说有巨大的不同。

表3

5.4 经验分析

TDM的变种。为了自身比较,也评估了一些变种:

  • TDM product-DNN: 为了找出高级神经网络是否可以受益于TDM,我们测试了TDM product-DNN。TDM product-DNN使用与Youtube product-DNN相似的inner product方式。特别的,在图2中的attention模块会被移除,node embedding term也被从网络输入中被移除。node embedding和第三个fc layers的output(without PReLU和BN)的inner product会使用一个sigmoid activation来构成新的二分类器.
  • TDM DNN: 为了进一步验证由TDM attention-DNN的attention module带来的提升,我们会测试TDM DNN变种,它只会移除activation unit,例如:在图2中所有items的weights。
  • TDM attention-DNN-HS: 正如第3节提到的,hirearchical softmax方法并不适合推荐。我们会测试TDM attention-DNN-HS变种,例如,使用positive nodes的邻居作为negative samples,来替代随机选择的样本。相应的,在算法1的检索中,ranking indicator会发生变化:从单个node的\(P(\hat{y}_u(n)=1 \mid n,u)\)变为 \(\prod_{n' \in n's \ ancestors P(\hat{y}_u(n') = 1 \mid n', u)}\)。Attention-DNN被当成网络结构进行使用.

实验结果如表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的公式不能很好适应推荐问题。

树的角色。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信息,可以帮助提升推荐的准确性。

图4

1.png

表4

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,从而进一步提升训练和预测。

图5

5.5 Online效果

我们在taobao效果广告平台的真实流量上评估了提出的TDM的方法。实验在taobao app主页上的猜你喜欢(Guess What You Like)中进行实验。用于评估效果的两个指标是:CTR和RPM(每1000的回报率)。详细如下:

\[CTR=\frac{\# of clicks}{\# of impressions}, \\ RPM = \frac{广告收入}{曝光数} * 1000\]

…(8)

在我们的广告系统中,广告主会对一些给定的ad clusters竞价。有将近1400w的clusters,每个ad cluster包含了上百或上千条相似的ads。该验验以ad cluster的粒度开展,以保持与现有系统的一致。比较方法有:LR作为baseline。由于系统中有许多stages,部署TDM online方法是一个巨大的项目,涉及到整个系统。我们完成了第一个TDM DNN版本,并评估了online流量。每个分桶具有5%的在线流量。值得一提的是,有许多在线同时运行推荐的方法。他们从不同的视角,产生的结果进行合并进入到下一stages。TDM只会替换它们中最有效的,保持其它模块不变。带有TDM的测试分桶的平均metric提升率,如表5所示。

如表5所示,TDM方法的CTR提升了2.1%。这项提升表明提出的方法可以为用户召回更多精准的结果。另一方法,RPM的metric增加了6.4%,这意味着TDM的方法也可以为taobao广告平台带来更多回报。

预测效果。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预测模型要短,不会是系统瓶颈。

6.结论

参考

阿里盒马团队在KDD 2018上开放了它们的方法:《Learning and Transferring IDs Representation in E-commerce》, 这个方法也很简单,我们来看下paper的主要内容部分:

3.4 联合嵌入Attribute IDs

通过探索在item ID和它的attribute IDs间的结构连接,我们提出了一个hirerarchical embedding模型来联合学习item ID和attribute IDs的低维表示。模型结构如图4所示,其中item ID是核心的交互单元,它与attibute IDs间通过虚线连接。

1.png

图4

首先,item IDs的共现也隐含了对应attribute IDs间的共现,它通过图4的实心键头表示。假设存在K个类型的IDs,并使 \(ID_s(item_i) = [id_1(item_i), \cdots, id_k(item_i), \cdots, id_K(item_i)]\),其中\(id_1(item_i)\)等于\(item_i\)的item ID,\(id_2(item_i)\)是product ID,\(id_3(item_i)\)是store ID等。我们学习目标替换成:

\[P(ID_s(item_j) | ID_s(item_i)) \\ = \sigma(\sum\limits_{k=1}^K (w_{jk} e_{jk}')^T (w_{ik} e_{ik})) \\ = \prod\limits_{s=1}^S \sigma(-\sum_{k=1}^K (w_{sk} e_{sk}')^T (w_{ik} e_{ik}))\]

…(7)

其中,\(e_{\cdot k}' \in E_k'(\subset R^{m_k \times D_k})\)以及\(e_{\cdot k} \in E_k(\subset R^{m_k \times D_k})\)。\(E_k'\)和\(E_k\)是分别对应于类型(type)为k的context和target representations。对于类型k,\(m_k\)是它的embedding vectors的维度,\(D_k\)是它的字典size。注意,不同类型的IDs可以被嵌入到不同的维度上。标量\(w_{ik}\)是\(id_k(item_i)\)的权重。假设每个item的贡献与\(id_k(item_i)\)相等,\(id_k(item_i)\)包含了\(V_{ik}\)个不同的items,\(w_{ik}\)与\(V_{ik}\)成反比是合理的。更正式的,我们有:

\[I(x)= \begin{cases} 0, & \text{x is False} \\ 1, & \text{x is True} \end{cases}\]

…(8)

\[V_{ik} = \sum\limits_{j=1}^D I(id_k(item_i) = id_k(item_j))\]

…(9)

\[w_{ik} = \frac{1}{V_{ik}} (k=1, \cdots, K)\]

…(10)

例如,\(w_{i1}=1\)表示每个\(id_1(item_i)\)刚好包含了一个item;而\(w_{i2} = \frac{1}{10}\)表示:product ID\((item_i)\)包含了10个不同的items

第二,item ID和attribute IDs间的结构连接意味着限制(constraints),例如:两个item IDs的向量应更接近,不仅是对于它们的共现,而且对于它们共享相同的product ID, store ID, brand ID或cate-level1 ID等。相反的,attribute IDs等价于包含在对应item IDs内的信息。以store ID为例,对于一个指定store ID的embedding vector,它可以看成是应该商店所售卖的所有item IDs的合适的总结(summary)。 相应的,我们定义了:

\[p(item_i | ID_s(item_i)) = \sigma(\sum\limits_{k=2}^K w_{ik} e_{i1}^T M_k e_{ik})\]

…(11)

其中,\(M_k \subset R^{m_1 \times m_k} (k=2, \cdots, K)\)是一个转移矩阵,它会将embedding vector \(e_{i1}\)转称到相同维度的embedding vector \(e_{ik}\)上。接着,我们最大化下面的平均log概率:

\[J = \frac{1}{N} \sum\limits_{n=1}^N ( \sum\limits_{-C \leq j \leq C}^{1 \leq n+j \leq N, j \neq 0} log p(ID_s(item_{n+j}) | ID_s(item_n)) \\ + \alpha log p(item_n | ID_s(item_n)) - \beta \sum_{k=1}^K \| M_k \|_2)\]

…(12)

其中,\(\alpha\)是介于IDs间的约束强度,\(\beta\)是在转移矩阵上的L2正则的强度。

我们的方法可以将item ID和它的attrbute IDs嵌入到一个语义空间中,它很有用。item ID的属性和它的attrbute IDs对于一个相对长的时间来说是稳定的,该jointly embedding model和学到的表示会每周更新一次。

3.5 Embedding User IDs

用户偏好受item IDs交互序列的影响,通过对交互的item IDs的embedding vectors做聚合来表示user IDs是合理的。有许多方法来聚合item embedding vectors,比如:Average, RNN等[26],本paper中使用的是平均方式(Average)。

由于Hema中的用户偏好变化很快,user IDs的embedding vectors也应进行频繁更新(比如:按天更新),来快速响应最新的偏好。不同于RNN模型,它需要训练过程并且计算开销很大,Average可以在很短的时间内学习和更新表示。

对于用户\(u \in U\),假设\(S_u = [item_1, \cdots, item_t, \cdots, item_T]\)表示交互序列,其中最近的T个item IDs以逆时序的方式排列。我们为用户u构建了embedding vector:

\[Embedding(u) = \frac{1}{T} \sum\limits_{t=1}^{T} e_t\]

其中,\(e_t\)是\(item_t\)的embedding vector。

3.6 模型学习

对该jointly embedding model进行优化等同于最大化(12)的log似然,它与log-uniform negative-sampling相近。为了解决该最优化问题,我们首先使用“Xavier” initialzation来初始化所有可训练参数。接着使用SGD算法和shuffled mini-batches到J上。参数的更新通过BP+Adam rule来完成。为了加速并行操作,在NVIDIA-GPU+tensorflow上训练。

模型的超参数设置如下:context window C=4; negative samples数 S=2; embedding dimensions为 \([m_1, m_2, m_3, m_4, m_5, m_6, m_7] = [100, 100, 10, 20, 10, 10, 20]\);constraints强度\(\alpha=1.0\);L2 reg强度 \(\beta=0.01\);batch size=128, 训练5个epochs。

#

参考

netflix在《The Netflix Recommender System: Algorithms, Business Value, and Innovation》中,提到了一个指标:ECS(EFFECTIVE CATALOG SIZE)。我们来看下它的实现:

EFFECTIVE CATALOG SIZE

假设我们在视频库(catalog)中具有N个items,它们根据在线观看时长(hours streamed)从最流行到最不流行进行排序,表示成\(v_1, \cdots, v_N\)。假设 vector \(p=[p_1, \cdots, p_N]\)表示概率质量函数( probability mass function (p.m.f.)),对应于来自在catalog中按流行度排序的视频的时间流的share,也就是说,\(p_i\)是所有(hours streamed)的share,它来自于第i个最流行的流视频 \(v_i\)。注意,对于\(i=1, \cdots, N-1\)以及\(\sum_{i=1}^N p_i=1\)来说,\(p_i \geq p_{i+1}\)。我们寻找这样一个metric:它是关于p作为参数、输出在范围[1, N]内的一个函数,在某种程度上告诉我们,需要有多少视频来解释一个典型的hour streamed。如果最流行视频\(v_1\)占据着大多数hours streamed,该metric应返回一个略高于1的值;如果catalog中的所有视频具有相同的流量,则返回一个N值。这样的一个metric称为effective catalog size(ECS),它的定义如下:

\[ECS(p) = 2(\sum\limits_{i=1}^N p_i i) - 1\]

…(1)

等式(1)会简单计算在p.m.f. p下视频索引(video index)的平均,并将它重新缩放(rescale)到合理区间上。很容易确认,对于所有的i,当\(p_1=1\)时,ECS具有一个最小值1;当\(p_i = 1/N\)时具有一个最大值N。

ECS可以被应用到任意p.m.f.上。我们可以计算一个索引(refenerce)开始,对于该p.m.f的ECS只会考虑最流行的k个视频的hours,随着我们从1到N递增k。特别的,我们定义了\(p(k) = \alpha [p_1, \cdots, p_k]\),其中,\(\alpha = 1/(\sum\limits_{i=1}^k p_i)\)是一个归一化常数,并绘制了ECS(p(k))来区分不同的k,得到如图4所示的黑线。该线位于identity line(没显示)之下,因为并不是所有视频都具有相同的流行度。在同一图中的红线是使用ECS等式到一个不同的p.m.f q(k)上的结果,k从1到N。p.m.f. q(k)是来自每个关于k的PVR rank的share of hours,或者来自top k PVR ranks的所有streamed hours之外的。为了形成q(k),对于我们的每个会员(members),我们采用k个最高ranked PVR videos,来寻找由这些member-video pairs生成的所有streaming hours,并定义了它的第i个entry作为这些来自PVR rank i的streaming hours的share。注意,尽管对于每个member q(k)和p(k)一样只包含了k个videos,跨members的一个抽样,更多videos(可能为N)会出现,因为PVR是个性化的。PVR rank对应于跨所有播放(plays)的中位数rank(median rank),effective catalog size是4倍于unpresonalized effective catalog size。

#

effective catalog size(ECS)是一个这样的metric,它描述在我们的catalog中,跨items的扩展观看(spread viewing)的程度。如果大多数viewing来自于单个视频,它会接近于1。如果所有视频会生成相同量的viewing,ECS会接近于在catalog中的视频数。否则,它介于两者之间。ECS的描述见上一节。

如果没有个性化,所有用户(members)会接收到相同的视频推荐。图4左侧的黑线表明,没有个性化的ECS是如何随着数据中视频数的增长而增长的,从最流行的视频开始,随着x轴向右移动添加下一个流行(next popular)的视频。另一方面,相同图中的红色,展示了ECS是如何增长的,它是一个关于用来进个性化的PVR ranks数目的函数(而非一个关于包含视频数的函数)。尽管是否进行个性化的catalog exploration的量不同之处很显著,但它还不够令人信服。毕竟,我们可以通过对每个session提供完全随机的推荐来进行扩展观看(spread viewing)。

更重要的,个性化允许我们极大增加推荐的成功率。达到该目标的一个metric是take-rate:产生一个播放所提供的推荐比例。图4右侧展示了take-rate,一个是关于视频流行度的函数,另一个是video PVR rank的函数。我们从推荐中获得的在take-rate上的提升是大幅度的。但是,更重要的是,当推荐被正确生产和使用时,会产生在产品(比如:streaming hours)上整体engagement上的大幅提升,以及更低的订阅取消率。

图片名称

图4

参考

yahoo在《Ad Serving Using a Compact Allocation Plan》提了:

摘要

大部分在线展示广告通过保证合同(guaranteed contracts)进行售卖:一个publisher会保证advertiser一部分特定数目的用户,。

参考

关于ALE (Arcade Learning Environment)的介绍来自于Marlos C. Machado发表的paper:《Revisiting the Arcade Learning Environment: Evaluation Protocols and Open Problems for General Agents》

1.介绍

ALE (电玩学习环境:Arcade Learning Environment): ALE提供了一个关于Atari 2600游戏的数百个游戏环境的接口,这些游戏每个都是不同的、很有趣。ALE提供了对reinforcement learning, model learning, model-based planning, imitation learning, transfer learning, 和 intrinsic motivation的研究挑战。更重要的是,它为这些问题提供了一个严格的testbed来评估和比较方法。我们使用AI技术(reinforcement learning/learning)通过开发和测试domain-independent agents来展示ALE。我们也提供了一个evaluation技术,在超过55个不同游戏上有结果。

#

略…

接口

ALE在Stella(一个开源的Atari 2600模拟器)上构建。它允许用户通过接收joystick动作、发送screen/RAM信息、并模拟平台的方式来与Atari 2600交互。ALE提供了一个游戏处理层(game-handling layer),它通过标记累积得分、以及游戏是否已经结束,可以将每个游戏转化成一个标准的增强学习问题。缺省的,每个observation包含了单个游戏屏幕(game screen: frame):一个关于7bit像素的2D数组,160 pixels宽 x 210 pixels高。action space包含了18个离散(discrete)的actions,它们通过操纵杆控制器(joystick controller)来定义。game-handling layer也指定了需要玩一个特定游戏的关于actions的最小集合。当运行时,该仿真器会每秒生成60帧,最高速度的仿真可以达到每秒6000帧。在每个time-step上的reward通过game basis来定义,通常通过在帧之间的得分(score/points)的不同来指定。一个episode会在reset命令后的第一帧(frame)处开始,当游戏结束时终止。game-handling layer也提供了在预定义帧数后终止episode的能力。user因此可以通过单个公共接口来访问数十个游戏,并可以很简单地增加新游戏。

图1 18个action

ALE也提供了保存(save)和恢复(restore)仿真器的状态(state)的功能。当发出一个save-state命令时,ALE会保存关于当前游戏所有相关数据,包括RAM、寄存器(registers)、地址计数器(address counters)的内容。restore-state命令会resets该游戏到之前saved state时的状态。这允许ALE作为一个生成模型来研究主题:planning、model-based RL。

图2 load/save

3.Benchmark结果

Planning 和 reinforcement learning是可以在ALE framework中研究的两个主要AI问题。在benchmark results中我们的目标是两者:第一,这些结果提供了一个对于传统技术的baseline performance,并确立了一个与更高级方法的比较点。第二,这些结果可以做经验上的validation。

3.1 RL

我们使用SARSA(\(\lambda\))来提供benchmark结果,这是一种model-free RL的传统技术。注意,在RL setting中,agent不会访问一个关于游戏动态性(game dynamics)的模型。在每个time-step上,agent会选择一个action并接收一个reward和一个observation,该agent的目标是:最大化它的累积回报(acumulated reward)。在这些实验中,我们会讨论:线性函数近似、replacing traces, e-greedy exploration。

3.1.1 特征构建

Basic:Basic方法来自于Naddaf’s BASS (2010),会对Atari 2600 screen上的颜色进行编码。Basic方法首先移除了图片背景色,它通过在每个像素位置的颜色频率存储在一个histogram中。每个游戏背景是离线预计算好的,使用从sample trajectories中收集到的18000个observations。sample trajectories根据一个人工提供(human-provided)的trajectory,取随机数目的steps、并且随机均匀选择actions的方式来生成。该screen接着被划分成16x14 tiles。Basic会为每个128种颜色、每个tiles生成一个binary feature,共28672个features。

BASS:与BASIC相似。首先,BASS的特征集是pairwise组合。第二,BASS使用一个更小的、 8色的encoding来确保pairwise组合数目保持可跟踪。

DISCO:DISCO方法的目标是检测在Atari 2600 screen中的对象。为了这样做,与Basic方法生成的sample trajectories相似,它会首先预处理来自sample trajectories的36000个observations。DISCO会执行背景减少steps。接着抽取的对象标记(label)成classes。在实际训练期间,DISCO会infer所检测对象的class label,并将它们的位置和速度使用tile coding进行编码。

LSH:LSH方法会将原始的Atari 2600 screens使用Locally sensitive hashing映射到关于binary features的一个小集合上。

RAM:RAM方法会使用整个不同的observation space。它直接将Atari 2600的1024位内存进行observes。RAM的每一位可以当成一个binary feature提供。

3.1.2 评估技术

我们首先构建两个集合:一个用于training、一个用于testing。我们使用training games来进行调参,testing games用于评估。我们的training set包含了5个游戏:Asterix, Beam Rider, Freeway, Seaquest 和 Space Invaders。参数搜索涉及到发现SARSA算法最适合的参数值:比如:learning-rate、exploration rate、discount factor、decay rate \(\lambda\)。我们也会搜索特征生成参数的空间,例如:Bass agent的abstraction level等。我们的testing set通过从381个游戏中半随机选择。这些游戏中,128个游戏有它的wikipedia介绍页,具有单人模式、没有成人主题、可以在ALE中进行模拟。50个游戏被随机选中来形成test set。

在每个游戏上,每个方法的评估执行如下。一个episode从reset命令后的第一帧开始,当游戏结束条件被检测到、或者在5分钟后(即18000帧)玩后时结束。在episode期间,agent会每5帧进行acts,或者等价于gameplay的每秒12次。RL的实验(trial)包含了5000个training episodes,以及500个evalution episodes。agent的效果通过在evaluation episodes期间的平均得分进行measure。对于每个游戏,我们会在30个实验上报告我们的平均效果。

参考