一、Latent Cross [2018]

《Latent Cross: Making Use of Context in Recurrent Recommender Systems》

  1. 推荐系统长期以来一直用于预测用户会喜欢什么内容。随着 Facebook, Netflix, YouTube, Twitter 等在线服务的不断增长,拥有一个高质量的推荐系统来帮助用户筛选不断扩大和日益多样化的内容变得越来越重要。

    推荐系统的大部分研究都集中在有效的机器学习技术上:如何最好地从用户的行为(如点击、购买、观看、评分)中学习。在这个方向上,有大量关于协同过滤(collaborative filtering)和推荐算法的研究。

    与此同时,人们越来越显著地认识到对推荐的上下文( context )进行建模的重要性:不仅仅是正在寻找视频的用户,还包括一天中的时间(time of day)、位置(location)、用户的设备(device)等。人们已经在分解(factorization)的 setting 中提出了许多相关的模型,例如用于 location 的张量分解、用于不同类型的用户动作的 unfolding tensor 、或者关于时间效应的手工制作的特征。

    随着深度学习的日益普及,如何将这些上下文特征( contextual feature )整合到神经推荐系统中的直接研究较少。先前关于 deep neural network: DNN 推荐系统的工作在很大程度上依赖于将上下文作为模型中的直接特征、或者依赖于具有多任务的目标。一个值得注意的例外是使用 recurrent neural network: RNN 来建模时间模式( temporal pattern)。 在论文 《Latent Cross: Making Use of Context in Recurrent Recommender Systems》中,作者将 contextual collaborative filtering 文献和神经推荐器文献联系起来。作者探索了如何在深度神经推荐器(尤其是在 RNN 模型中)中利用上下文数据(contextual data),并证明主流技术遗漏了这些特征中的大量信息。

    作者探索了在 YouTube 使用的RNN-based 的推荐系统中,使用上下文数据的能力。与大多数生产(production)的 setting 一样,YouTube 拥有大量重要的上下文数据,其中包括:请求和观看时间(request and watch time)、设备类型、网站或移动app 上的页面(page)。在论文中,首先作者对建模上下文作为直接特征的局限性提供了理论解释,尤其是使用feed-forward neural network: FFN 作为示例的 baseline DNN 方法。然后作者提供了一种易于使用的技术来整合这些上下文特征,从而提高预测准确性,即使在更复杂的 RNN 模型中也是如此。

    论文的贡献是:

    • 一阶挑战(First-Order Challenges):论文展示一阶神经网络建模低秩关系(low-rank relationship)的挑战。

    • 生产模型(Production Model):论文描述了如何为 YouTube 构建了一个大规模的 RNN 推荐系统。

    • 潜在交叉(Latent Cross):论文提供了一种简单的技术,称作 Latent Cross,以便在模型中更 expressively 包含上下文特征。具体而言,latent crosscontext embedding 和神经网络 hidden state 之间执行逐元素乘积(elementwise product)。

    • 经验结果(Empirical Result):论文提供的经验结果证实了所提出方法提高了推荐的准确性。

  2. 相关工作:我们首先对各种相关研究进行调研,overview 参考下表。

    • 上下文推荐(Contextual Recommendation):大量研究集中在推荐过程中使用上下文数据。具体而言,某些类型的上下文数据已被深入探索,而其它类型的上下文数据已被抽象地处理(treated abstractly)。

      例如,推荐中的时间动态(temporal dynamics)已被广泛探索。在 Netflix Prize 期间,《Collaborative filtering with temporal dynamics》Netflix 数据集中发现了重要的长期时间动态(long-ranging temporal dynamics),并在他的协同过滤模型中添加了时间特征(temporal features)来解释这些影响。

      研究人员还探索了偏好(preference)如何在较短的时间尺度内(如 session)演( evolve)。更一般的抽象已被用于对推荐的偏好演变进行建模,如 point processesRNN 。类似地,使用概率模型、矩阵分解、张量分解来建模带地理数据(geographical data)的用户行为也得到了广泛的探索。

      各种方法都建立在矩阵分解和张量分解的基础上,用于跨域学习(cross domain learning)。分解器(factorization machine)和其它上下文推荐器等方法提供了这些协同过滤方法的推广。

    • 神经推荐系统(Neural Recommender Systems):随着神经网络在计算机视觉和自然语言处理(natural language processing: NLP)任务中的普及,推荐系统的研究人员已经开始将 DNN 应用于推荐。

      早期的迭代侧重于将协同过滤直接应用于神经网络,例如通过自编码器、或者联合 deep and CF models 。人们已经设计出更复杂的网络来融合更广泛的输入特征。《Wide & deep learning for recommender systems》 在模型的 DNN 部分之外,通过线性模型处理上下文特征之间的交互(interaction)从而解决这个问题。

      最近,使用 RNN 进行推荐的情况越来越多:

      • 《Neural Survival Recommender》《Rurrent Recommender Networks》 在他们的模型中包括时间信息(temporal information)作为特征和监督( supervision ),而 《Modelling Contextual Information in Session-Aware Recommender Systems with Neural Networks》 包含一般上下文特征。然而,在这两种情况下,这些特征都与输入相拼接( concatenated ),我们将展示这种方式提供的好处有限。

      • 并行的、独立的研究 《What to Do Next: Modeling User Behaviors by Time-LSTM》 通过乘法性地融合(multiplicatively incorporate)时间信息来改善 LSTM,但是它没有将这种方法推广到其它上下文数据。

    • 二阶神经网络(Second-order Neural Networks):本文的一个主要重点是神经推荐器中乘法关系(multiplicative relation)的重要性。这些二阶单元(second-order unit)出现在神经网络的一些地方。

      • 循环单元( recurrent unit),如 LSTMGRU,是常见的带逐元素乘法(elementwise multiplication)的门控机制的二阶单元。

      • 此外,用于分类的、网络顶部的 softmax layerDNN 产生的 embeddinglabel class embedding 之间的显式双线性层( bi-linear layer )。该技术已在多篇论文中得到扩展,包括 DNN 之上的 user-item 双线性层。

      与本文中描述的技术类似的是乘法模型(multiplicative model)。这些乘法结构最常用于NLP 。这些 NLP 方法被应用于评论的个性化建模(具有稍微不同的数学结构)。最近,《Neural Survival Recommender》 不是在上下文数据上,而是直接在用户上使用乘法技术,类似于张量分解。PNNNFM 将这一思想推向了一个极端,将输入端的所有的特征 pair 对进行相乘,并在通过前馈神经网络之前拼接、或者平均相乘的结果。这些模型的直觉与我们的相似,但不同之处在于:

      • 我们关注上下文数据和用户动作之间的关系。

      • 我们的 latent crossing 机制可以应用于、并且已经被应用于整个模型。

      • 我们证明了这些交互的重要性,即使是在一个 RNN 推荐系统内。

      更复杂的模型结构(如注意力模型attention model、记忆网络memory network、元学习meta-learning)也依赖于二阶关系,并且越来越受欢迎。例如,注意力模型使用通过乘法调制(modulatehidden state 的注意力向量。然而,这些方法在结构上明显更加复杂,并且通常更难训练。相比之下,我们发现本文提出的 latent cross 技术在实践中易于训练并且有效。

1.1 模型

1.1.1 基础知识

  1. 考虑一个推荐系统,其中我们有一个包含事件(evente 的数据库 E ,这些事件 ek-way 元组。我们定义 es 为元组中的第 s 个值, es¯ 为元组中的剩余 k1 个值。

    例如,Netflix Prizesetting 将由元组 e:=(i,j,R) 来描述,它表示用户 i 为电影 j 的评分为 R 。我们还可能有诸如时间和设备之类的上下文,如 e:=(i,j,t,d) ,它表示用户 i 在时间 t 在设备类型 d 上观看了视频 j

    注意,每个值可以是离散(discrete)的 categorical 变量(例如,用户编号 i ),也可以是连续(continuous)的变量(例如,时间 tunix 时间戳)。连续变量通常在预处理步骤中进行离散化,例如将 t 转换为事件发生的日期(day) 。

  2. 有了这些数据,我们可以将推荐系统构建为:试图在给定事件其它值的情况下预测该事件中的某一个值。例如,在 Netflix Prize 中,我们使用 (i,j) 来预测 R 。从机器学习的角度来看,我们可以将元组 e 拆分为特征 x 和标签 y ,使得 x=(i,j) 和标签 y=R

    我们可以通过定义 x=(i,t)y=j 进一步将推荐问题重新定义为:预测用户在给定时刻观看的视频。再次注意,根据标签是类别值( categorical value )的还是实数值 (real value),机器学习问题分别是分类问题或回归问题。

  3. 在分解模型中,所有输入值都被认为是离散的,并且被嵌入(embedded)、被相乘(multiplied)。当我们embed一个离散值时,我们学习一个稠密的 latent representation,例如,用户 i 由稠密的 latent vector ui 来描述、item j 由稠密的 latent vector vj 来描述。

    在矩阵分解模型中,通常基于 uivj 来进行预测。在张量分解模型中,通常基于 rui,r×vj,r×wt,r 来进行预测,其中 wt 为时间或者其它某个上下文特征的稠密的 embedding 向量。为了符号简便,我们用 <> 来表示多维内积,即 ui,vj,wt=rui,r×vj,r×wt,r

  4. 神经网络通常还嵌入离散的输入。即,给定一个输入 (i,j) ,网络的输入将是 x=[ui||vj][||] 为向量拼接算子),其中 uivj 拼接起来并且也都是可训练的。因此,我们考虑 es=f(es¯) 形式的神经网络,其中网络将元组中除了 es 之外的所有值作为输入,并且网络被训练从而预测 es

    我们稍后将扩展此定义,从而允许模型将相关的 previous events 也作为网络的输入,就像在序列模型中一样。

1.1.2 动机:一阶 DNN 的挑战

  1. 为了了解神经推荐器如何利用拼接的特征,我们首先探查( inspecting )这些网络的典型构建块(building blocks)。如上所述,神经网络,尤其是前馈神经网络,通常建立在一阶运算(first-order operation)之上。更准确而言,神经网络通常依赖于 Wh 形式的矩阵向量乘积( matrix-vector product)。其中,W 是一个学到的权重矩阵,h 为输入(整个网络的输入、或者last layer 的输出)。在前馈神经网络中,全连接层通常具有以下形式:

    hl=g(Wlhl1+bl)Rd

    其中: g() 是一个逐元素操作(如 sigmoidReLU),hl1 是上一层的输出。

    我们认为这是一个一阶单元,因为该layer 仅仅将 hl1Rd 不同维度的元素根据权重 W 来计算加权和,但是从未将元素相乘。

    即,输入 hl1 的各维度元素之间是加法关系,而不是乘法关系。

    尽管具有此类 layer 的神经网络已被证明能够逼近任何函数,但它们的核心计算在结构上与协同过滤的直觉有很大不同。如前所述,矩阵分解模型采用一般形式 (general formuivj ,导致模型学习不同类型输入(即用户、item、时间等等)之间的低秩关系(low-rank relationship)。鉴于低秩模型(low-rank model)已在推荐系统中取得成功,我们提出以下问题:一阶神经网络对低秩关系的建模效果如何?

  2. 为了测试一阶神经网络是否可以建模低秩关系,我们生成人工合成的低秩数据并研究不同大小的神经网络对这些数据的拟合程度。更具体而言,我们考虑一个 m-mode 的张量(即,m 个输入),每个输入都是离散的并且取值空间大小都是 N 。对于这 m 个离散的输入,我们使用如下的方程来生成长度为 r 的随机向量 zi

    ziN(0,1r1/(2m)I)Rr

    结果是我们的数据是一个秩 r 的矩阵或张量,具有大致相同的 scale (均值为零、经验方差接近 1 )。例如,当 m=3 时,我们可以使用这些 embedding 来表示形式为 (i,j,t,zi,zj,zt) 的事件。

    注意,这里的 zi 并不是 embedding,而是用于生成 label

  3. 我们尝试使用这些数据来拟合不同大小的模型。具体而言,我们考虑一个将离散特征嵌入并拼接为输入的模型。该模型有一个带 ReLU 激活函数的 hidden layer ,这在神经推荐系统中很常见,然后是一个 final linear layer 。我们使用 TensorFlow 实现该模型,使用 Adagrad 优化器来优化均方误差( mean squared error: MSE)损失,并且训练模型直到收敛。我们通过训练数据和模型预测之间的 Pearson correlation (R) 来衡量和报告模型的准确性。

    • 我们使用 Pearson 相关性,使其不受数据方差的微小差异的影响。

    • 我们针对训练数据报告准确性,因为我们正在测试这些模型结构与低秩模式(low-rank pattern)的匹配程度。

    即,我们在训练数据上评估(而不是测试数据),因为我们想评估这些模型对训练数据的拟合程度。

    我们使用 Pearson correlation 指标(而不是 MSE),因为该指标不受数据方差的影响。

  4. 为了建模低秩关系,我们想看看模型对单个乘法(individual multiplication)(代表了变量之间的交互interaction)的逼近程度。所有数据都是在 N=100 时生成的。在 m=2 时,我们检查 hidden layer 必须有多大时才能建模两个标量的乘法。在 m=3 时,我们检查 hidden layer 必须有多大时才能建模三个标量的乘法。

    我们使用 r{1,2} 来观察模型的大小如何随着需要更多的乘法而增长。我们将每个离散特征嵌入为一个 20 维向量,其中 20r ,但是我们发现模型的准确性与 embedding 维度无关。我们测试 hidden layer 的隐层维度 {1,2,5,10,20,30,50}

    r 控制了:为了得到 label,我们需要多少个乘法。

    实验结果如下图和下表所示,我们发现:

    • 首先,随着隐层维度的增加,模型地更好地逼近数据。鉴于网络逼近乘法的直觉,更宽的网络(即隐层维度更高)应该给出更好的逼近(approximation)。

    • 其次,我们观察到,当我们将数据的秩 r1 增加到 2 时,我们看到隐层维度大概需要翻倍从而获得相同的准确性。这也符合我们的直觉,因为增加 r 意味着要添加更多的交互。

    • 更有趣的是,我们发现即使对于 r=1m=2 ,也需要一个大小为 5 的隐层才能获得 “高” 的准确性估计。考虑到协同过滤模型通常会发现秩为 200relation(即,m=200),这直观地表明:现实世界的模型需要非常宽的 layer 来学到单个 two-way relation

    • 此外,我们发现建模超过 two-way relation 会增加逼近的难度。也就是说,当我们从 m=2 变为 m=3 时,我们发现模型需要从宽度为 5 的隐层变为宽度为 20 的隐层,从而获得大约 0.005MSE0.99Pearson correlation

    总之,我们观察到 ReLU layer 可以逼近乘法交互( multiplicative interaction)(即,cross),但是这样做的效率很低。这激发了对能够更轻松地表达和处理乘法关系(multiplicative relation)的模型的需求。我们现在将注意力转向使用 RNN 作为 baseline。这是一个更强的 baseline,因为与前馈神经网络相比,RNN 可以更好地表达乘法关系。

1.1.3 Youtube Recurrent Recommender

  1. 以上述分析为动力,我们现在描述对 YouTubeRNN 推荐系统的改进。RNN 是优秀的 baseline 模型,因为它们已经是二阶神经网络,比上面探索的一阶神经网络复杂得多,并且处于动态推荐系统(dynamic recommender system) 的前沿。

    我们首先概述我们为 YouTube 构建的 RNN 推荐器,然后描述我们如何改进这个推荐器从而更好地利用上下文数据。

  2. 公式描述:在我们的 setting 中,我们观察到用户 i 在时刻 t 观看视频 j (由用户 ψ(j) 上传)形式的事件。(我们稍后将介绍额外的上下文特征。)为了对用户偏好和行为的演变进行建模,我们使用 recurrent neural network: RNN 模型,其中模型的输入是用户 i 的事件集合 Xi={e=(i,j,ψ(j),t)Ei=i} 。我们使用 Xi,t 表示用户 i 在时刻 t 之前的所有观看事件:

    Xi,t={e=(i,j,ψ(j),t)Ei=it<t}

    该模型经过训练以产生序列预测 Pr(ji,t,Xi,t) ,即用户 i 在给定时刻 t 基于时刻 t 之前的所有观看事件来预测观看视频 j 的概率。为简单起见,我们将使用 e(τ) 表示序列中的第 τ 个事件,x(τ) 表示 e(τ) 转换的输入,y(τ) 表示试图为第 τ 个事件预测的标签。

    在上面的例子中,如果 e(τ)=(i,j,ψ(j),t) ,并且 e(τ+1)=(i,j,ψ(j),t) ,那么输入 x(τ)=[vj||uψ(j)||wt] ,并且预测 y(τ+1)=j 。其中,vjvideo embeddinguψ(j)uploader embeddingwtcontext embedding

    注意,这里 x(τ) 是作为 RNN 的输入。对于 RNN 而言,这意味着我们基于 {x(1),,x(τ)} 来预测 y(τ+1)。但是我们忽略了 τ+1 时刻的上下文信息作为输入。

    当预测 y(τ) 时,我们当然不能使用对应事件 e(τ)label 作为输入,但是我们可以使用来自 e(τ) 的上下文,我们将其表示为 c(τ),如 c(τ)=[wt]

  3. Baseline RNN 模型的结构:我们的 RNN 模型 diagram 如下图所示。RNN 对一系列动作进行建模。对于每个事件 e(τ) ,模型处理该事件并更新 hidden state vector h(τ1)

    更准确而言:

    • 每个事件首先由神经网络 x~(τ)=fi(x(τ)) 处理(下标 i 代表 input )。在我们的 setting 中,这将是一个恒等映射或者全连接的 ReLU layer

    • 网络的循环部分是函数:

      o(τ),h(τ)=fr(x~(τ),h(τ1))

      即,我们使用循环单元(如,LSTMGRU)从而将上一步的 state 和变换后的输入 x~(τ) 作为新的输入。

    • 为了预测 y(τ),我们使用 fo(o(τ1),c(τ)) ,它是另一个可训练的神经网络并产生关于 y(τ) 可能取值的概率分布。在我们的 setting 中,该网络将 RNN 的输出、以及即将进行预测的上下文作为该网络的输入,最后以所有视频的 softmax layer 而结束。这个网络可以包括多个全连接层。

      output network 越简单越好还是越复杂越好?个人感觉,如果 output network 越复杂,那么迫使 GRU 学到的 representation 越简单。

  4. 上下文特征:该模型成功的核心是结合上下文数据,而不仅仅是观看的视频序列。我们将在下面讨论我们如何利用这些特征。

    • TimeDelta:在我们的系统中,有效地结合时间对我们 RNN 的准确性非常有价值。从历史上看,时间上下文 time context 已经以多种方式被纳入协同过滤模型中。在这里,我们使用一种称为 timedelta 的方法:

      Δt(τ)=log(t(τ+1)t(τ))

      也就是说,在考虑事件 e(τ) 时,我们会考虑需要多长时间到下一个事件、或下一个预测。这基本上等价于 《Neural Survival Recommender》《What to Do Next: Modeling User Behaviors by Time-LSTM》 中描述的 time representation

      这里是 (t(τ+1)t(τ)) 而不是 (t(τ)t(τ1)) ,因为我们需要刻画当前的 action 对未来的影响(而不是对过去的影响)。

    • Software ClientYouTube 视频可以在各种设备上观看,如浏览器、iOSAndroidRokuChromecast 等。将这些上下文视为等同(equivalent)的,则会错失相关的关系(relevant correlation)。例如,与通过 Roku 设备相比,用户不太可能在手机上观看完整的故事片。类似地,像预告片这样的短视频可能相对更有可能在手机上观看。对 software client 进行建模,特别是它如何与观看决策 watch dicision 交互,这一点很重要。

      不同设备上呈现不同的交互特色。

    • Page:我们还会在我们的系统中记录观看是从哪里开始的。例如,我们区分从主页开始的观看(即,Home Page Watches),以及作为被推荐的 follow-up watch 来初始化的观看(即,Watch Next Watches)。

      Watch Next Watches :当用户已经在观看一个视频时,系统提供一个推荐列表,然后用户从推荐列表选择一个视频并进行观看。

      这一点很重要,因为 Home Page Watches 可能对新内容更加开放open,而 Watch Next Watches 可能是因为用户想要更深入地挖掘某个主题。

  5. Pre-FusionPost-Fusion:我们可以通过两种方式将这些上下文特征(统称为 c(τ) )用作直接输入。如下图所示,我们可以将上下文作为网络底部的输入,或者与 RNN cell 的输出相结合。

    我们把在 RNN cell 之前包含上下文特征称作 pre-fusion,把在 RNN cell 之后包含上下文特征称作 post-fusion 。尽管可能是一个精巧的点( subtle point),但这个决定可能会对 RNN 产生重大影响。具体而言:

    • 通过 pre-fusion 包含一个特征,该特征将通过它如何修改 RNNstate 来影响预测。

    • 但是,通过 post-fusion 包含一个特征,该特征可以更直接地对该 time step 的预测产生影响。

    为了解决这个问题,在预测 y(τ) 时,我们通常使用 c(τ) 作为 post-fusion 的特征,并使用 c(τ1) 作为 pre-fusion 的特征。这意味着 c(τ1) 将影响 RNN 状态,但 c(τ) 将用于预测 y(τ) 。随后,在下一步预测 y(τ+1) 时,c(τ) 现在将是一个 pre-fusion 特征,并且开始影响 RNN 的状态。

    由于 GRU 的递归特性,这里相当于是:cell state 捕获了序列 {c(1),,c(τ1)} ,并且 c(τ) 直接地对该时刻的预测产生影响。

  6. 实现&训练:我们的模型在 TensorFlow 中实现,并在许多分布式 workersparameter servers 上进行了训练。训练使用一种可用的反向传播 mini-batch 随机梯度下降算法,即 AdagradADAM 。在训练期间,我们使用周期 (t07days,t0] 期间最近的 100 次观看作为监督信息,其中 t0 是训练时间(即,训练时刻最近一周内的最近 100 次观看)。这通常会优先考虑最近的观看,因为当学到的模型将被应用于实时流量(live traffic)时,这种方式(即,优先考虑最近的观看)与预测任务更为相似。

    由于可用的视频数量非常多,因此我们限制了我们要预测的可能的视频集合、以及我们建模的这些 uploaders 的数量。在下面的实验中,这些集合的规模从 50 万到 200 万 。 softmax layer 使用sampled softmax 进行训练,每个 batch 采样2 万个负样本。我们在针对 batch 内所有 label 的交叉熵损失中使用这个 sampled softmax 的预测。

    即,每个batch 内的所有样本共享同一组负样本。

1.1.4 带 Latent Cross 的上下文建模

  1. 在上面对我们的 baseline 模型的描述中应该很清楚,上下文特征的使用通常是作为简单的全连接层的拼接输入( concatenated input )来进行的。然而,正如我们在前面所解释的,神经网络在建模拼接输入特征之间的交互(interaction)方面效率很低。这里我们提出一个简单的替代方案。

  2. 单个上下文特征:我们从包含单个上下文特征的情况开始。为了清楚起见,我们将时间作为上下文特征的一个例子。我们并不是将该特征与其它相关特征拼接起来作为输入从而执行融合,而是在网络的中间执行一个逐元素乘积( element-wise product)。也就是说,我们执行:

    x~(τ)(1+wt)x~(τ)

    其中,我们使用零均值的高斯分布来初始化 wt 。因此,(1+wt) 被初始化为均值为 1 的高斯分布。

    乘法项的均值为 1,这可以解释为在 representation 上提供一个 mask 机制或者一个注意力机制的上下文。但是,它也 enable 了输入的previous watchtime 之间的低秩关系(矩阵分解代表了一种低秩关系)。

    注意,我们也可以在 RNN 之后应用这个操作:

    h(τ)(1+wt)h(τ)

    《A multiplicative model for learning distributed text-based attribute representations》 中提供的技术可以被视为一种特殊情况,其中乘法关系(multiplicative relation)与 softmax 函数一起被包含在网络的最顶部,从而改善 NLP 任务。在这种情况下,该操作可以被视为张量分解,其中一种模态的 embedding 是由神经网络产生的。

  3. 多个上下文特征:在许多情况下,我们想要包含不止一个上下文特征。当包含多个上下文特征时,例如时间 t 和设备 d ,我们执行:

    h(τ)(1+wt+wd)h(τ)

    我们使用这种形式有几个不同的原因:

    • 使用零均值的高斯分布来初始化 wtwd ,那么乘法项的均值为 1,因此可以类似地充当 hidden statemask/atttention 机制。

    • 通过将这些项相加,我们可以捕获 hidden state 和每个上下文特征之间的 2-way 关系。这遵循了分解机( factorization machine)设计中的观点。

    • 使用简单的加法函数易于训练。像 wtwdh(τ) 这样更复杂的函数将随着每个额外的上下文特征从而显著增加非凸性。类似地,我们发现学习一个函数 f([wt||wd]) 更难训练并且给出更差的结果(即,拼接多个上下文特征的效果更差)。

    根据前文的结论,我们是否可以把常规的 input field 也视为上下文,然后进行 latent cross,从而更好地捕获 2-way 关系?

    更进一步地,我们是否可以将 input 拆分为多个 field,网络的每一层利用一个 field 并进行 latent cross,并且最重要的 field 靠近输出、最不重要的 field 靠近输入?

    甚至更进一步,我们是否可以用 attention 机制自动筛选出哪些是最重要的、哪些是不重要的,然后每一层选择不同的 field 进行 latent cross

  4. 效率:我们注意到使用 latent cross 的一个显著优势是:它们的简单性和计算效率。使用 N 个上下文特征和 d 维的 embedding,可以在 O(Nd) 复杂度内计算 latent cross,并且不会增加后续 layer 的宽度。

1.2 实验

  1. 我们进行两个实验:

    • 第一个实验是在时间作为唯一上下文特征的数据集上,我们比较了几个模型。

    • 第二个实验是在我们的生产模型上,并根据我们如何融合上下文特征来探索相对的效果提升。

1.2.1 对比分析

  1. 数据集:我们使用一个数据集,该数据集的观看序列来自于数亿用户。用户被拆分为训练集、验证集、测试集,其中验证集和测试集都有数千万的用户。

    观看被限制在 50 万个流行视频的集合中。所有用户的序列中至少有 50 个观看。序列是由观看视频的列表、以及每个观看的时间戳给出的。任务是预测用户序列中最近 5 次观看。

  2. 评估指标:在测试集上的 Mean-Average-Precision-at-k (MAP@k),其中 k=1k=20

  3. 模型配置:对于这个实验,我们使用带 LSTMRNN。我们在循环单元之前或之后没有 ReLU cell,并使用一个 pre-determinedhierarchical softmax: HSM 来预测视频。在这里,我们使用序列中除了第一个观看之外的所有观看作为训练期间的监督。模型使用 ADAM 优化算法来训练。

    由于时间是该数据集中唯一的上下文特征,我们使用视频 embedding vj 作为输入,并使用 timedeltawΔt 执行 latent cross,使得 LSTM 的输入为 vjwΔt 。这是一个 pre-fusion 的例子,我们称之为 RNNLatentCross

    注意,这里仅评估了 pre-fusion 的效果。

  4. baseline 方法:我们将上述 RNNLatentCross 模型与其它 baseline 方法进行比较:

    • RRN:使用 [vj||wΔt] (即,拼接操作)作为 RNN 的输入。

    • RNN:直接在 vj 上应用 RNN,没有时间信息作为输入。

    • BOW:作用在用户观看历史的视频集合、以及用户的人口统计学特征上的 bag-of-watches 模型。

    • BOW+Time:一个三层的前馈神经网络模型,将 bag-of-watches、最近观看的三个视频中的每一个、Δt 、以及请求时间的 week 这些特征的拼接作为输入。该模型使用 softmax 对与最近观看 last watch 共现次数最多的 50 个视频进行训练。

    • Paragraph Vector (PV):使用 《Document embedding with paragraph vectors》 学习每个用户的无监督 embedding (基于用户人口统计,以及历史的观看)。使用学到的 embedding 以及最后一个观看的 embedding 作为一个单层前馈神经网络分类器的输入,其中该分类器通过 sampled softmax 来训练。

    • Cowatch:根据序列中的 last watch 推荐共现次数最多的其它视频。

    除非另有说明,否则所有模型都使用一个 hierarchical softmax 。所有模型及其超参数都进行了调优。注意,只有 BOWPV 模型使用了用户人口统计学数据。

  5. 实验结果:我们在下表中报告了该实验的结果。从中可以看到,我们的模型在 Precision@1MAP@20 上都表现最佳(注意,MAP@1 就是 Precision@1 )。

    • 可能更有趣的是模型的相对性能。我们在 BOW 模型(对比 BOW with time)和 RNN 模型(对比 RNN with time)中都观察到建模时间的重要性。

    • 此外,我们观察到执行 latent cross 而不是仅仅拼接 Δt 时的提升完全大于将 Δt 作为输入特征的提升。

1.2.2 YouTube 模型

  1. 配置:在这里我们使用用户观看的生产数据集(production dataset)。我们的序列由观看的视频以及视频创建人(即uploader)组成。我们使用了百万级最近流行的视频和 uploader 的更大的 vocabulary

    我们根据用户和时间将数据集拆分为训练集和测试集。

    • 首先,我们将用户分为两组:90% 的用户在我们的训练集中,10% 在我们的测试集中。

    • 其次,为了根据时间来拆分,我们选择截止(cut-off)时间 t0 并且在训练期间仅考虑 t0 之间的观看。在测试期间,我们考虑 t0+4 hours 后的观看。同样地,视频的 vocabulary 是基于 t0 之前的数据。

    我们的模型考虑嵌入和拼接上面定义的所有特征作为输入,然后是一个 256 维的 ReLU 层、一个 256 维的 GRU cell,然后是另一个 256 维的 ReLU 层,最后再输入到 softmax 层。如前所述,我们使用区间 (t07 days,t0] 期间最近的 100 个观看作为监督信息。在这里,我们使用 Adagrad 优化器在多个 workersparameter servers 上进行分布式训练。

    为了测试我们的模型,我们仍然使用 MAP@k 指标。对于不在我们 vocabulary 中的观看,我们总是将预测标记为不正确。这里报告的评估 MAP@k 得分是使用大约 45000 个观看来度量的。

  2. Page 作为上下文的价值:我们通过以不同方式融合 Page 来开始分析准确性的改善。具体而言,我们比较了不使用 Page、使用 Page 与其它特征拼接来作为输入、使用 Page 来执行post-fusion latent cross 。注意,当我们将 Page 作为被拼接的特征时,它在 pre-fusionpost-fusion 都被拼接。

    如下图所示,使用 Page 来执行 latent cross 可以提供最佳准确性。此外,我们看到同时使用 latent cross 和特征拼接并没有额外提高准确性,这表明 latent cross 足以捕获 Page 的信息。

  3. 整体提升:最后,我们测试了在完整生产模型之上添加 latent cross 对准确性的影响。在这种情况下,模型知道每次观看的 page、设备类型、时间(the time)、观看时长(watch time)、视频年龄(watch age)(即,视频从上传到现在过了多久)、uploader。具体而言,我们的 baseline YouTube 模型使用 page、设备类型、观看时长、timedelta 数据作为 pre-fusion 的拼接特征,并且还使用 page、设备类型、视频年龄作为 post-fusion 的拼接特征。

    为什么 pre-fusion 特征和 post-fusion 特征不同、latent-cross 的特征也不同?个人猜测是经过反复实验得到的结论。

    我们测试包含 timedeltapage 作为 pre-fusionlatent cross,以及设备类型和 page 作为 post-fusionlatent cross 。从下图可以看到,尽管所有这些特征都已通过拼接包含在内,但将它们作为 latent cross 可以进一步提高 baseline 模型的准确性。这也证明了具有多个特征的 pre-fusionpost-fusion 能够共同工作并提供强大的准确性提升。

1.3 讨论

  1. 我们在下面讨论了这项工作提出的一些问题以及对未来工作的影响。

  2. DNN 中的离散关系(Discrete Relation):虽然本文的大部分内容都集中在 enable 特征之间的乘法交互( multiplicative interaction),但是我们发现神经网络也可以逼近离散交互( discrete interaction ),这是factorization 模型更困难的领域。例如,在 《Improving User Topic Interest Profiles by Behavior Factorization》 中,作者发现当用户 iitem j 执行动作 a 时, ui,a,vj 要比 ui,vj,wa 具有更好的准确性。但是,人们很难发现将用户和行为进行联合索引的表现会更好,因为这需要对数据的良好洞察。

    与 “一阶DNN的挑战” 的实验类似,我们按照 pattern Xi,j,a=ui,a,vj 生成合成数据,并测试不同的网络架构在给定 i,j,a 作为独立的拼接特征作为输入的条件下,对 Xi,j,a 的预测效果如何。我们初始化 uR100,vR100 ,使得 X 是一个秩为 1 的矩阵。我们遵循与 “一阶DNN的挑战” 相同的实验程序,测量具有不同隐层深度、不同隐层宽度的网络的 Pearson correlation (R) 。我们以 0.01 的学习率训练这些网络,比上面使用的学习率小十倍。作为 baseline,我们还测量了不同秩的张量分解(ui,vj,wa)的 Pearson 相关性。

    从下图可以看出:

    • 在某些情况下,深度模型获得了相当高的 Pearson 相关性,这表明它们实际上能够逼近离散交叉(discrete cross)。同样有趣的是,学习这些交叉需要具有宽隐层的深度网络,对于数据规模而言特别大(即,对于小数据集就需要很宽的网络了)。此外,我们发现这些网络很难训练。

    • baseline 张量分解性能很有趣。我们观察到分解模型可以很好地逼近数据,但是需要相对较高的秩。然而,即使在这么高的秩下,张量分解模型需要的参数也比 DNN 少,而且更容易训练。

    因此,与前面的结果一样,DNN 可以逼近这些 pattern,但这样做可能很困难,并且模型包含低秩交互(low-rank interaction)有助于提供易于训练的逼近(approximation)。

  3. 二阶 DNN:阅读本文时自然要问的一个问题是,为什么不尝试更宽的层、或者更深的模型、或者更多的二阶单元(second-order unit)(如 GRULSTM)?所有这些都是合理的建模决策,但根据我们的经验,模型的训练变得更加困难。latent cross 方法的优点之一是它易于实现和训练,同时仍然提供显著的性能提升,即使与 LSTMGRU 等其它二阶单元结合使用也是如此。

    整个深度学习的趋势似乎是使用更多的二阶交互。例如,这在注意力模型(attention model)和记忆网络( memory network)中很常见。虽然更多二阶交互导致更难训练,但我们相信这项工作展示了神经推荐系统在这个方向上的前景。

    如果将加法类比于 or 操作、将乘法类比于 and 操作,那么这意味着推荐算法会涉及大量的 and,而 and 难以设计和优化?