APP下载

融合用户会话数据的上下文感知推荐算法

2021-08-06鹿祥志孙福振王绍卿徐上上

计算机工程与应用 2021年15期
关键词:会话向量神经网络

鹿祥志,孙福振,王绍卿,徐上上

山东理工大学 计算机科学与技术学院,山东 淄博 255049

随着网络信息量的不断增长,推荐系统已成为克服信息超载的有效策略[1]。传统的推荐问题通常抽象成矩阵填充问题,这样的方法适合应用在拥有用户长期配置文件的情境中。当用户的长期配置文件不存在时,就需要根据用户和站点交互的会话日志来做出推荐。这种仅依赖于用户当前进行的会话中的动作序列来预测用户下一个动作的问题被称之为基于会话的推荐。基于会话的推荐系统(Session-based Recommender System)是个性化推荐系统的一个重要组成部分。会话指的是在给定时间内发生的用户与站点的交互[2]。在推荐系统中会话通常能体现用户这段时间内的意图,例如,看某种类型的新闻,买某类商品等[3]。目前,基于会话的推荐主要的算法包括:基于序列模式挖掘的方法[4]、基于马尔可夫模型的方法[5],以及基于循环神经网络的方法[6]。由于近年来深度学习技术的飞速发展,基于神经网络的会话推荐算法成为当前研究的热点。其中,循环神经网络(RNN)具有可以利用历史状态的特点,Hidasi 等人[7]首次将RNN应用于推荐系统,不仅证明了RNN能应用于基于会话的推荐问题,而且针对基于会话推荐的这项特定任务,设计了带有门控循环单元(Gated Recurrent Unit,GRU)的RNN 模型GRU4REC。Tan 等人[8]提出在GRU4REC 上引入四条优化方法,包括数据增强技术、设置时间阈值来适应变化、使用特权信息(关于点击项目的属性)和输出嵌入方法。之后Hidasi 等人[9]则通过改进排序损失函数对RNN进行优化。Li等人[10]提出了NARM(Neural Attentive Recurrent Model)模型,其认为在以前的基于会话的推荐方法的工作中,大多数只关注了对于用户会话点击序列的建模,但是并没有关注用户在点击序列中真实的兴趣。Pan等人[11]提出一种具有重要性提取模块SR-IEM的会话推荐算法,该算法考虑了用户在会话中的长期行为和近期行为。以上这些方法都没有在基于会话的推荐任务中关注用户的上下文信息。Smirnova 等人[12]提出一种新的情境循环神经网络推荐系统(CRNNs),通过将情境嵌入与项目嵌入相结合来修改RNN 行为,并通过参数化将隐藏的单元转换为情境信息的函数进行情境序列建模,此模型考虑了用户与项目的交互行为作为上下文信息,但没有将用户的上下文信息如地理位置等考虑在内。Song 等人[13]指出,把静态上下文信息如地理位置、天气融入推荐系统将有利于提高推荐精确度。

基于会话的推荐场景中,通常难以获取和利用用户的历史行为记录。伴随着智能手机的发展,人们更愿意利用手机来浏览信息、购买商品。相比传统方式,手机更容易获取到用户的静态上下文信息,如地理位置、天气、用户的运动状态等等。因此,如何在会话推荐中更好地融合用户的这些上下文信息是一个值得研究的问题。

本文的主要工作就是在基于RNN的会话推荐模型基础上,融入用户的上下文信息,如用户所在的城市或地区,用户使用的设备等,提高推荐质量。

1 相关知识

1.1 基于循环神经网络的会话推荐

在循环神经网络的使用上,Hidasi等人对长短期记忆模型(LSTM)和门控循环单元(GRU)结构(如图1 所示)进行了实验对比,并最终采用门控循环单元结构代替传统的循环神经网络结构。GRU能够很好地处理梯度消失问题且复杂度相对更低。

图1 GRU单元Fig.1 GRU unit

GRU单元在t时刻更新过程如下:

其中,xt为输入数据,σ是sigmoid函数,通过这个函数可以将数值变换到0~1的范围,Wr、Wz、Wh、Ur、Uz、Uh是权重矩阵,br、bz、bh是偏置值,⊙表示向量之间的点乘运算。使用GRU隐藏层的最后一个隐藏状态ht来表示用户在当前会话的序列行为特征。

本文的工作在基于循环神经网络的会话推荐模型(GRU4REC)上开展的。模型的网络结构由三层组成,分别为输入层、GRU层和输出层。

输入层,每个item 通过one-hot 进行编码,然后经过嵌入层进行嵌入,为每个item 生成一个低维的嵌入向量。

GRU层,由GRU单元组成,接受的输入是item的嵌入向量和前一时刻GRU单元的状态。

输出层,输出层包含一个前馈网络层,将GRU 层的输出作为前馈网络层的输入,最终输出所有item 的得分。

1.2 上下文感知推荐

目前有很多对上下文的定义,但在上下文感知推荐系统研究领域,上下文也没有统一的定义,需要根据具体应用系统或者用户需求引入合适的上下文类型及其具体实例。尽管对于不同应用领域的不同的上下文感知推荐系统考虑的上下文信息是不同的,但从总体上来看,常见的上下文类型包括时间、位置、外界物理环境、设备信息、活动状态等。

按照将上下文融入推荐生成过程哪个阶段的角度,可以将上下文感知推荐结果生成方法划分为上下文预过滤、上下文后过滤、上下文建模等三种方法[14]。其中,上下文建模将上下文信息融入推荐生成的整个过程,需要设计合适的算法、模型处理多维度上下文用户偏好。这种范式需要处理高维数据,最为复杂,但也最能有效挖掘用户、上下文、项目之间的关联关系。本文采用上下文建模的方法,即,将用户的上下文信息融入到循环神经网络模型中。

2 算法描述

为了考虑用户的上下文信息,本文提出了一种基于会话的上下文感知推荐算法模型Session-based Context-Aware Recommendation(SCAR)。模型将用户的上下文信息中的各种特征通过embedding 技术映射成随机分布的低维实数向量,再经过Add、Stack、MLP 等方式组合,然后将其融入到循环神经网络。推荐过程是对该会话中可能被选择的所有下一个项目,对其可能性输出一个得分,取得分最高的k个项目作top-k推荐。模型的总体框架如图2所示。

图2 SCAR模型Fig.2 Model of SCAR

2.1 SCAR

本文提出一种将用户上下文信息融入循环神经网络推荐模型的上下文感知会话推荐算法。下面给出模型的形式化描述:令S={x1,x2,…,xn} 为会话S的点击序列,其中,xi∈I(1≤i≤n)是总数为M的item集合中一个被点击的item。令CS为会话S的上下文信息,例如,对于会话S有如下上下文信息(deviceType=Mobile,Country=U.S.),则每种信息分别编码为[0,0,1] 和[0,1,0,…,0] 分别记为本文的目标是构建一个模型M,使得对于会话S的任意前缀序列x={x1,x2,…,xt} 和上下文信息CS,通过模型得到输出y=M(x,ES),其中,y={y1,y2,…,ym},是所有可能选择的item的得分列表。下面详细描述模型的构建方式,主要分为特征映射、特征融入、输出结果三个部分介绍。

2.1.1 特征映射

首先构建上下文信息的嵌入矩阵。给定一个会话S和该会话对应的用户上下文信息CS,根据相应上下文信息的one-hot 编码,构建Embedding 矩阵E,E是一个N×K的矩阵,N为one-hot 编码的长度,K是实验设定的嵌入向量长度。Embedding 层本质上是一个全连接层,将上下文信息的one-hot 编码从高维稀疏向量映射为低维稠密向量,这有利于神经网络对特征的提取和抽象。

2.1.2 特征融入

得到用户的上下文向量之后,要将这些上下文信息加入到RNN模型中。如图3所示,本文将上下文信息融入模型的方式主要有三种。

第一种方式是在input 阶段,将上下文信息与item向量共同输入:

第二种方式是在output阶段,将上下文信息与模型在当前时间步最后的输出进行组合。

对于这两种方式,θ都代表信息的组合函数,对于θ函数,又分为如下三种形式:

(1)Add:即直接将上下文信息向量与当前向量相叠加,优点是不会增加向量维度和模型的复杂度。缺点是需要两部分信息的维度保持一致。

(2)Stack:即直接对两个向量进行拼接,能够充分发挥不同的信息对结果的影响。缺点是由于会增大神经网络的输入或输出维度从而导致消耗较多的计算资源。

(3)MLP:即使用感知机来组合信息,这种方式需要计算权重矩阵来对两向量进行组合变换,优点是有较强的拟合能力,缺点是需要的计算量相对较大,不容易训练。

这三种方式不仅用于上下文信息与GRU单元的组合,同时也用于不同上下文信息之间的组合,如图3 的信息组合层。

图3 上下文信息的三种融入方式Fig.3 Three ways to integrate contextual information

在input 和在output 阶段融入额外信息是比较常用的方法,除此之外,本文还提出了第三种方式,在每个会话开始阶段初始化GRU隐藏状态的方法。

其中,h0为一个会话中GRU 单元的初始隐藏状态。这种方式同样能将上下文信息的影响传递到整个会话,而且只在会话的初始化阶段进行计算,可以节省计算资源。

2.1.3 输出结果

GRU 单元的隐层状态再经过一个全连接层,得到每个物品被点击的概率。如公式(8):

是下一个物品被点击的概率。因为采用BPR 作为损失函数,需要计算item 的得分,因此采用tanh 作为激活函数,将分数映射成一个介于[−1,1]的数值。另外,由于item的规模一般十分巨大,训练时如果同时更新所有神经单元的权重参数,会造成巨大的计算资源消耗,也会严重影响训练速度。为避免此问题,本文使用负采样的方法。选择同一个batch中其他会话的下一个item作为负样本,每次训练只更新小部分权重,降低训练过程中的计算量。这种采样方法不仅减少了计算量,而且由于负样本取自其他会话,在一定程度上保证了负样本的流行度。

2.2 损失函数

虽然推荐任务可以当作多分类任务来处理,但推荐算法的核心是根据用户的偏好对item进行排序,越符合用户偏好的项目排序应该越靠前。因此,推荐系统引入了排序学习的方法。经典贝叶斯个性化排序Bayesian Personalized Ranking(BPR)是一种利用成对排序损失的矩阵因子分解方法,BPR比较的是一个正例和一个负例的得分。在损失迭代计算过程中,将正例项目的得分与同一个batch中其他会话的下一个item的得分进行比较,并使用他们的平均值作为损失。在某一会话的某一时刻的损失定义为:

其中,Ns是表示采样的负样本数,是正样本的分数,是负样本的分数,σ是sigmoid函数。

3 实验设计及分析

3.1 实验数据集

Adressa[15]是RecTech 项目中发布的一个新闻数据集,它包括各种推荐策略需要的特性,以及提供所有新闻文章的全文访问。该数据集有两个版本,一个是Adresseavisen新闻门户网站上10周流量的包含2 000万阅读行为的大型数据集,另一个是只有一周流量的包含200万阅读行为的小型数据集。

本文使用的是包含2 000 万阅读行为的大型数据集,选取了其中一个月内注册用户的共1 596 429 个会话。将其中80%作为训练集,20%作为测试集。训练集包含1 277 143个会话,测试集包含319 286个会话。会话根据数据集中的会话的开始和停止符划分,数据集中可直接获得的用户上下文信息有country、city、region、deviceType、os。例如,某个用户的上下文信息为,country=“no”,city=“trondheim”,region=“sor-trondelag”,device-Type=“Tablet”,os=“iPhone OS”。虽然,city和region隐含了country的信息,但是实验证明,当同时使用这些信息的时候推荐效果更好。deviceType 和os 可以区分用户的不同使用场景,提高推荐的效果。

3.2 评价标准

Recall@K:由于推荐系统一次只能推荐几个项目,用户可能选择的实际项目应该在列表的前几个项目中。因此,本文的主要评估指标是Recall@K,这是在所有测试用例中,在前K个项目中拥有所需项目的比例。召回不考虑项目的实际排名。这很好地模拟了某些实际场景,在这些场景中没有突出的建议,绝对顺序也不重要。计算公式为:

其中,TP表示用户感兴趣的物品在推荐列表中的数量,FN表示用户感兴趣的物品不在推荐列表中的数量。

MRR@K:实验中使用的第二个度量是MRR(平均倒数排名)。这是所需项目的倒数排名的平均值。如果排名大于K,则倒数排名被设为0。MRR 考虑项目的等级,这在注重推荐顺序的情况下是很重要的。计算公式为:

其中,|Q|表示用户感兴趣的物品数量,ranki表示用户感兴趣的物品在推荐列表中的排名。

3.3 实验设计

因为不同的会话之间会话长度差别较大,本文采用了Hidasi等人[7]提出的会话并行的mini-batch训练方式,具体过程为,在一个batch 里,每当一个会话结束,一个新的会话接替这个结束的会话,而其他会话保持不变,在新的会话进行接替的时候,需要重置相应会话GRU的隐藏状态。训练过程中,使用RMSProp 优化模型,batch-size为128,虽然更小的batch-size会带来略微更好的训练效果,但会使训练时间加长,为了兼顾训练效率与实验效果,将batch-size 设置为128,初始学习率为0.001,学习率衰减系数为0.96,Dropout 的keep_prob 参数为0.8,GRU单元数量为100个。

3.4 实验对比

为探究在RNN 模型的基础上加入上下文信息是否能够提升推荐效果,本文提出的模型SCAR 与POP模型、BPR-MF 模型、Item KNN 模型、RSVD 模型[16]和GRU4REC模型进行对比实验。

POP模型,该方法将训练集中用户交互次数最多的项进行推荐。

BPR-MF 模型,是一种常用的矩阵分解方法,但不能直接用于会话推荐。参考Hidasi等人的工作,可以将会话中已经出现的物品表示向量与候选物品表示向量的相似度平均值作为候选物品的推荐分值。

Item KNN模型,在这个模型中,两个物品在不同会话中共同出现的次数定义为两个物品的相似度。

RSVD 模型,RSVD 是正则化奇异值矩阵分解算法。本文所用数据集没有显式评分,文献[15]提出可以使用阅读时长代表评分。

GRU4REC 模型,该方法利用循环神经网络建模用户会话的行为序列,并利用mini-batch 的方式训练得到模型参数。

从表1和表2可以看出,提出的模型在Recall和MRR两个指标上都优于基线方法。对比POP、BPR-MF 和ItemKNN 三种模型,算法的效果提升显著,证明了在会话推荐中,基于深度学习的推荐模型比传统推荐方式有更好的推荐效果。对比RSVD模型可以发现,传统的矩阵分解方法在基于会话的推荐场景中没有优势,Recall和MRR 都远低于所提出的SCAR 模型。对比SCAR 与GRU4REC 的结果,可以发现SCAR 相比GRU4REC 有一定的提升,Recall@20 和MRR@20 分别提升了3.2%和27%,其中MRR的提升更为明显,说明加入的上下文信息能使模型推荐结果中最相关的项目排名更靠前。

表1 SCAR与基线方法在Recall上的比较Table 1 Recall data of SCAR and other models

表2 SCAR与基线方法在MRR上的比较Table 2 MRR data of SCAR and other models

图4和图5对比了在三个不同阶段加入上下文信息的实验结果。结果表明,三种方式的推荐效果略有差别。其中在input 阶段加入上下文信息的方式效果最好,在output阶段加入上下文信息的方式效果最差。原因是在input阶段加入的方式使得上下文信息参与到神经网络训练的所有阶段和一个会话的所有时间步。

图4 在不同阶段融入上下文信息Recall对比Fig.4 Recall of incorporate contextual information at different stages

图5 在不同阶段融入上下文信息的MRR对比Fig.5 Comparison of MRR with contextual information at different stages

为进一步验证分析不同的组合方式对推荐效果的影响,设计了不同的组合实验,如表3 所示。这里只在之前表现较好的input 阶段的融合方式下进行对比实验。

表3 不同组合方式在Recall和MRR上的比较Table 3 Comparison of different combinations on Recall and MRR

表3 在Recall@20 和MRR@20 两个指标上比较了不同的组合方式对推荐结果的影响。以Input+add+stack为例,其表示在input阶段融入信息,其中上下文信息之间的组合方式为add,上下文信息与GRU单元的组合方式为stack。对比1、2、4行可知,上下文信息之间的组合方式中,以MLP的方式组合,Recall@20效果最好,以add方式组合,MRR@20效果最好。由3、4、5行的数据可知,上下文信息与GRU单元的组合,stack方式的效果最优。

4 结语

本文提出了一种融合用户上下文信息的上下文感知的推荐算法。在实际的基于会话推荐场景中,用户的个人信息很难获取到,但是地理位置、设备类型等信息可以通过IP 地址和http 协议等方式轻松获得。这些获取到的信息可以作为用户的上下文信息融入推荐模型。用户的地理位置甚至所使用的设备类型可以在某种程度上反映用户的偏好,因此这些上下文信息可以在模型中对推荐结果有一定的影响进而提高推荐的质量,实验结果表明,所提算法相比基线算法GRU4REC,在指标Recall@20上提高了3.2%,MRR@20上提高了27%。

未来研究工作将探索上下文信息之间的组合方式,参考特征组合相关工作如NFM对其进行改进。

猜你喜欢

会话向量神经网络
向量的分解
聚焦“向量与三角”创新题
神经网络抑制无线通信干扰探究
汉语教材中的会话结构特征及其语用功能呈现——基于85个会话片段的个案研究
向量垂直在解析几何中的应用
基于神经网络的拉矫机控制模型建立
向量五种“变身” 玩转圆锥曲线
复数神经网络在基于WiFi的室内LBS应用
基于支持向量机回归和RBF神经网络的PID整定
冲突语的会话分析研究