小叽导读:在搜索和推荐场景中,基于会话的预测日益受到人们的兴趣和重视,大多这类算法都是基于递归神经网络(RNNs)技术或者它的变种。然而,已有的算法一方面会忽略“停留时长”在表达用户偏好程度上的重要性,另一方面在非常短或者有噪音的会话上会预估得不准。因此在该文章的的工作中,我们提出了一种联合预估算法JUMP,基于会话去同时预测用户的点击和停留时长。
▌摘要
JUMP使用一种新奇的三层RNN结构去编码用户的一次会话,包括使用一个“快慢层”去缓解短会话的问题,使用一个“注意力层”去解决会话噪音的问题。大量的实验表明JUMP算法能在点击率预估和停留时长预估上,超越最新的其他算法。
▌停留时长预估
对于停留时间的预估,我们借鉴了“生存分析”(SurvivalAnalysis)的思想,通过时间发生的时间去近似用户在一个内容上停留的时间;从概念上来说,停留时长被认为是“离开当前内容”这个事件的发生时间。如果我们记用户的停留时长的样本为O,假设存在一个函数,将O映射到一个简单的分布f上:
这里f可能是一个高斯分布,伽马分布等。可以证明的是:
其中F表示累计概率分布(CDF),T是对O的在线近似。那么有了上述公式后,我们就可以使用最大似然估计去预估样本的停留时间。我们分析了RecSys15数据及上的停留时间,原始分布如左下图,然而我们对停留时间取log后,得到了右下图。我们很高兴的发现在取log之后,停留时间是符合正态分布的。
于是我们取g为log函数,f为正态分布函数,最终我们能得到似然函数:
▌学习建模
我们记一个用户的会话为一个行为序列:。其中i表示第j个点击的商品,表示停留时间,而是一个bool类型,表示是否是会话的最后一个商品(或者停留时间过长)。我们假设样本是从一个分布P(S)中采样出来,那么可以将分布分解为2项的积。
其中前一项表示点击率的似然,后一项表示停留时间的似然;表示会话中第k次点击前的行为。为了从会话的行为中抽取更多的有效信息,我们提出了一种三层RNN模型去编码
Attention Layer:我们设计注意力机制主要目的是去除会话中的噪音,保留真正有效的信息。表示fast-slow层的输出,a对应attention的权重,对应的计算方法如下面公式:
Fast-SlowLayer: fast-slow层提出了一种新奇的RNN网络。当我们处理第j个输入的时候,会进入一个F-S处理单元,其中包括一个慢元子和一个快元子序列,慢元子会记忆更多长期的记忆,而快元子会更多的获取当前的信息。F-S处理单元如下图所示:
EmbeddingLayer:网络的最底层是一个embedding层,该层将一个二元组 映射到一个向量上,我们使用batch-normalizing对输入进行标准化:
▌实验
为了验证算法的性能,我们将JUMP算法对比了主流的基于会话的预估算法,验证在点击率预估和停留时长预估上的效果。对比的算法包括GRU、IGRU、NARM、DTGRU,RMTP、ATRP、NSR,使用的数据集是RecSys15、CIKM16和REDDIT。
点击率预估的结果如下表所示,我们可以看到在全部数据集上,JUMP算法都能超越其他算法,取得最好的Recall、MRR和NDCG指标。
同时我们观察了embedding维度对recall指标的影响,结果如下图。我们可以到看随着embedding维度的提升,recall指标都能得到一定的上升,但是基本都在100维左右达到最高;其次,我们仍然可以发现,JUMP算法取得的效果是优于其他算法的,蓝色曲线总是在其他曲线之上。
除了点击率外,我们观察了在时间预估这个任务上的效果,结果如下表所示。对比ATRP、RMTP和NSR算法,JUMP能明显提升预估的准度。
▌总结
本文提出了一种新奇的算法JUMP,同时预估一个会话中的点击率和停留时间。主要有3点重要贡献:1、使用生存分析的方法来建模用户的停留时间,建立在可靠的数据理论基础上;2、提出了一种三层的RNN结构,基于注意力机制能提升模型的鲁棒性,降低噪音的影响;3、使用了一种全新设计的fast-slow结构,加强对短会话的学习能力。大量实验验证了算法的有效性,在多个公开数据集上的结果,对比其他的算法都有大幅提升。
原文发布时间为:2018-07-09
本文作者:匿名
本文来自云栖社区合作伙伴“ 阿里技术”,了解相关信息可以关注“ 阿里技术”。