本发明涉及推荐技术领域,特别是涉及一种基于自适应注意力的序列推荐方法及装置。
背景技术:
随着网络信息的爆炸式增长,推荐系统在很多在线服务中扮演着越来越重要的角色。推荐系统常用的推荐方法有一般推荐和序列推荐。一般推荐是指通过用户的历史交互项目建模用户的总体爱好来推荐项目。关键思想是协同过滤(cf),进一步可以分为基于记忆的cf和基于模型的cf。一般推荐可以捕获用户的总体喜好,但如果不进行序列行为建模,则很难直接根据用户最近的交互项目进行推荐。序列推荐将用户的交互项目视为一个序列,目的是预测用户接下来将与哪个项目交互。一个典型解决方案是计算一个项目到项目的关系矩阵,向用户推荐与最后一个交互的项目最相似的项目。
为了给序列模式建模,fpmc模型利用马尔科夫链(mc)分解用户特定的转换矩阵。基于马尔科夫链的解决方案的一个显著缺点是它仍然采用静态表示用户兴趣。随着神经网络在许多应用领域的成功,递归神经网络被广泛应用于序列推荐中。除了基本的动态和演变特性之外,用户的兴趣也是多样化的。在同一时期内,用户的兴趣通常涉及多个领域。例如,根据用户的历史行为,我们发现喜欢阅读深度学习书籍的用户也喜欢购买家用电器。虽然rnn的扩展lstm和gru可以更好地捕获用户偏好的长期依赖,但依赖随着时间步的变化发生单调变化。换句话说,当前项比上一项更能预测下一项。基于注意力机制的rnn可以解决上述问题,其中注意力机制可以自动赋予之前项目对预测的不同影响,并达到最优性能。
尽管基于注意力的解决方案可以为每个时间步项目分配不同的权重,使其对预测下一个项目做出不同的贡献,但是这个过程是动态的。前一个项目可能会因为其特性而在选择下一个不同类型的项目时发挥不同的作用和表现出不同的影响。然而,现有的基于注意力的rnn解决方案采用了一种固定的策略来综合前面时间步项目的影响。因此,现有方法不足以捕获用户多样性序列决策的动态过程,导致性能不佳。
技术实现要素:
本发明的目的是提供一种基于自适应注意力的序列推荐方法及装置,以提高推荐系统性能。
为解决上述技术问题,本发明提供如下技术方案:
一种基于自适应注意力的序列推荐方法,包括:
获得用户历史交互项目序列和待推荐项目序列;
在预先训练获得的自适应注意力感知gru网络的输入层,根据所述历史交互项目序列和所述待推荐项目序列,确定输入自适应注意力;
将所述输入自适应注意力作用于所述历史交互项目序列中,获得输入序列;
基于所述历史交互项目序列和所述输入序列的结合,获得输入层输出结果;
在所述自适应注意力感知gru网络的隐藏状态层,根据所述输入层输出结果和所述待推荐项目序列,确定隐藏自适应注意力;
将所述隐藏自适应注意力作用于所述输入层输出结果中,获得隐藏状态序列;
基于所述输入层输出结果和所述隐藏状态序列的结合,获得隐藏状态层输出结果;
在所述自适应注意力感知gru网络的输出层,根据所述隐藏状态层输出结果,确定推荐给所述用户的项目。
在本发明的一种具体实施方式中,所述根据所述历史交互项目序列和所述待推荐项目序列,确定输入自适应注意力,包括:
分别将所述历史交互项目序列和所述待推荐项目序列嵌入到低维空间,获得历史项目嵌入结果和待推荐项目嵌入结果;
根据所述历史项目嵌入结果和所述待推荐项目嵌入结果,确定输入自适应注意力。
在本发明的一种具体实施方式中,所述根据所述历史项目嵌入结果和所述待推荐项目嵌入结果,确定输入自适应注意力,包括:
利用softmax函数计算所述历史项目嵌入结果中每一项和所述待推荐项目嵌入结果中每一项之间的相关性,获得输入自适应注意力。
在本发明的一种具体实施方式中,所述将所述输入自适应注意力作用于所述历史交互项目序列中,获得输入序列,包括:
将所述输入自适应注意力与所述历史交互项目序列进行元素相乘操作,获得输入序列。
在本发明的一种具体实施方式中,所述将所述隐藏自适应注意力作用于所述输入层输出结果中,获得隐藏状态序列,包括:
将所述隐藏自适应注意力与所述输入层输出结果进行元素相乘操作,获得隐藏状态序列。
一种基于自适应注意力的序列推荐装置,包括:
序列获得模块,用于获得用户历史交互项目序列和待推荐项目序列;
输入自适应注意力确定模块,用于在预先训练获得的自适应注意力感知gru网络的输入层,根据所述历史交互项目序列和所述待推荐项目序列,确定输入自适应注意力;
输入序列获得模块,用于将所述输入自适应注意力作用于所述历史交互项目序列中,获得输入序列;
输入层输出结果获得模块,用于基于所述历史交互项目序列和所述输入序列的结合,获得输入层输出结果;
隐藏自适应注意力确定模块,用于在所述自适应注意力感知gru网络的隐藏状态层,根据所述输入层输出结果和所述待推荐项目序列,确定隐藏自适应注意力;
隐藏状态序列获得模块,用于将所述隐藏自适应注意力作用于所述输入层输出结果中,获得隐藏状态序列;
隐藏状态层输出结果获得模块,用于基于所述输入层输出结果和所述隐藏状态序列的结合,获得隐藏状态层输出结果;
项目推荐模块,用于在所述自适应注意力感知gru网络的输出层根据所述隐藏状态层输出结果,确定推荐给所述用户的项目。
在本发明的一种具体实施方式中,所述输入自适应注意力确定模块,具体用于:
分别将所述历史交互项目序列和所述待推荐项目序列嵌入到低维空间,获得历史项目嵌入结果和待推荐项目嵌入结果;
根据所述历史项目嵌入结果和所述待推荐项目嵌入结果,确定输入自适应注意力。
在本发明的一种具体实施方式中,所述输入自适应注意力确定模块,具体用于:
利用softmax函数计算所述历史项目嵌入结果中每一项和所述待推荐项目嵌入结果中每一项之间的相关性,获得输入自适应注意力。
在本发明的一种具体实施方式中,所述输入序列获得模块,具体用于:
将所述输入自适应注意力与所述历史交互项目序列进行元素相乘操作,获得输入序列。
在本发明的一种具体实施方式中,所述隐藏状态序列获得模块,具体用于:
将所述隐藏自适应注意力与所述输入层输出结果进行元素相乘操作,获得隐藏状态序列。
应用本发明实施例所提供的技术方案,获得用户历史交互项目序列和待推荐项目序列后,在预先训练获得的自适应注意力感知gru网络的输入层根据历史交互项目序列和待推荐项目序列,确定输入自适应注意力,将输入自适应注意力作用于历史交互项目序列中,获得输入序列,基于历史交互项目序列和输入序列的结合,获得输入层输出结果,然后在自适应注意力感知gru网络的隐藏状态层根据输入层输出结果和待推荐项目序列,确定隐藏自适应注意力,将隐藏自适应注意力作用于输入层输出结果中,获得隐藏状态序列,基于输入层输出结果和隐藏状态序列的结合,获得隐藏状态层输出结果,在自适应注意力感知gru网络的输出层根据隐藏状态层输出结果,确定推荐给用户的项目。利用gru的循环体系结构的优势捕获复杂的长期依赖关系,利用注意力网络来发现本地序列模式,可以进行深度自适应用户序列兴趣表示,提高了推荐性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中一种自适应注意力机制的框架图;
图2为本发明实施例中一种基于自适应注意力的序列推荐方法的实施流程图;
图3为本发明实施例中一种基于自适应注意力的序列推荐装置的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的核心是提供一种基于自适应注意力的序列推荐方法,该方法利用预先训练获得的自适应注意力感知gru网络进行序列推荐。该自适应注意力感知gru网络为基于递归神经网络和一种新的自适应注意力机制来学习自适应用户的序列表示。具体来讲,就是采用注意力机制来适应用户序列偏好的表示,并从数据中学习时间步和项目之间的交互。
在本发明实施例中,自适应注意力感知gru网络应用了层次结构,包括输入层、隐藏状态层和输出层。第一层即输入层,利用待推荐的目标信息来构建输入层的自适应注意力机制,从而描述输入和待推荐的目标之间的相关性。这样,基于输入自适应注意力机制的新输入可以反映用户的不同兴趣。第二层即隐藏状态层,融合了当前隐藏状态和隐藏状态层的自适应注意力机制所产生的新隐藏状态,进一步增强用户的偏好。第三层即输出层,输出结果。
gru为长短期记忆网络(lstm)的变体,gru很好地解决了rnn长期依赖性问题,并简化了长短期记忆网络的结构。它包含重置门rt和更新门zt。此外,它具有候选隐含状态
其中,w代表着过渡矩阵,b代表着偏置,
目前,使用传统编码器解码器的rnn模型先用一些lstm单元来对输入序列进行学习,编码为固定长度的向量表示,然后再用一些lstm单元来读取这种向量表示并解码为输出序列。采用这种结构的模型在许多比较难的序列预测问题(如文本翻译)上都取得了较好的结果,因此迅速成为了目前的主流方法。然而,输入序列不论长短都会被编码成一个固定长度的向量表示,而解码则受限于该固定长度的向量表示。当输入序列非常长时,模型难以学到合理的向量表示。序列输入时,随着序列的不断增长,原始根据时间步的方式的表现越来越差,整个模型的能力都同样受到限制,编解码器的结构无法解释,进一步导致了其无法设计。
注意力机制在序列学习任务上具有巨大的提升作用。在编解码器框架内,打破了传统编码器解码器结构在编解码时都依赖于内部一个固定长度向量的限制,通过在编码段保留lstm编码器对输入序列的中间输出结果,然后训练一个网络模型来对这些输入进行选择性的学习并且在模型输出时将输出序列与之进行关联,对源数据序列进行数据加权变换,或者在解码端引入attention模型,对目标数据进行加权变化,可以有效提高序列对序列的自然方式下的系统表现。
下面先对自适应注意力感知gru网络的训练过程进行说明。
在本发明实施例中,使用u={u1,u2,u3,…,u|u|}表示用户集合,i={i1,i2,i3,…,i|i|}表示项目集合,用户集合中的用户总数用|u|表示,项目集合中的项目总数用|i|表示。在网络训练过程中,集中从用户的隐式反馈中抽取数据信息,该数据信息主要表示用户u∈u在t时刻与项目i∈i发生交互。用
具体使用符号与解释对应关系如表1所示。
表1
在本发明实施例的自适应注意力感知gru网络中,自适应注意力机制应用于输入层和隐藏状态层。自适应注意力机制与固定的基于注意力的用户表示不同,自适应用户表示动态地适应本地活动的项目,其原理是计算历史记录中的每一个项目与待推荐目标中每一个项目之间的相关度,再根据相关度赋予历史记录中的项目在预测接下来一系列的项目的不同重要程度。
在自适应注意力感知gru网络的输入层,可以根据用户历史记录xu和待推荐目标yu确定输入自适应注意力,u∈u。
具体的,可以分别将xu和yu嵌入到低维空间,用
图1所示为自适应注意力机制框架图,左下方虚线框区域中的项目组成xu,右下方虚线框区域中的项目组成yu,上方虚线框区域中的自适应注意力形成最终的用户u在输入层的输入自适应注意力,即
将输入自适应注意力作用于历史记录中,即将输入自适应注意力
输入序列
基于历史记录xu和输入序列
其中,t表示相对时间索引。获得的输入层输出结果为
在自适应注意力感知gru网络的隐藏状态层,根据输入层输出结果和待推荐目标可以确定隐藏自适应注意力,将隐藏自适应注意力作用于输入层输出结果中,获得隐藏状态序列。
本发明实施例在输入层和隐藏状态层上均用到自适应注意力机制,且两个层次上只有输入不同,隐藏状态层对应的隐藏自适应注意力
在隐藏状态层,首先会得到gru的输入层输出结果
隐藏状态序列
和输入层一样,可以将隐藏状态序列
其中,wo是关于
利用交叉熵计算待推荐项目与实际输出之间的相似性,待推荐项目集合
其中,θ={wxr,whr,wxz,whz,wxh,whh,wo,br,bz,bh,bo}表示训练过程中的参数,λθ>0适用于约束目标函数的正则化参数,之后网络可以通过随机梯度下降学习得到。
梯度下降算法(gradientdescentoptimization)是神经网络模型训练最常用的优化算法。对于深度学习模型,基本都是采用梯度下降算法来进行优化训练的。梯度表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该梯度的方向变化最快,因此目标函数j(θ)关于参数θ的梯度是目标函数上升最快的方向。对于最小化优化问题可以使参数沿着参数反方向前进一个步长就能实现目标函数下降。这里的步长就是神经网络模型中的学习率η。参数更新表示为:
经过训练获得自适应注意力感知gru网络后,可以利用自适应注意力感知gru网络进行序列推荐。
参见图2所示,为本发明实施例所提供的一种基于自适应注意力的序列推荐方法的实施流程图,该方法可以包括以下步骤:
s110:获得用户历史交互项目序列和待推荐项目序列。
用户历史交互项目序列即为用户历史记录,可以通过不同平台收集得到,待推荐项目序列即为待推荐目标,待推荐给用户的项目的集合。可以先对用户历史交互项目序列进行预处理,将用户和项目编号,一个用户对应的序列就是过去与该用户发生交互的项目的集合,按照时间顺序排列。
s120:在预先训练获得的自适应注意力感知gru网络的输入层,根据历史交互项目序列和待推荐项目序列,确定输入自适应注意力。
在上述训练获得的自适应注意力感知gru网络的输入层,可以根据历史交互项目序列和待推荐项目序列,确定输入自适应注意力。
在本发明的一种具体实施方式中,步骤s120可以包括以下步骤:
步骤一:分别将历史交互项目序列和待推荐项目序列嵌入到低维空间,获得历史项目嵌入结果和待推荐项目嵌入结果;
步骤二:根据历史项目嵌入结果和待推荐项目嵌入结果,确定输入自适应注意力。
为便于描述,将上述两个步骤结合起来进行说明。
获得历史交互项目序列和待推荐项目序列后,可以分别将历史交互项目序列和待推荐项目序列嵌入到低维空间,得到项目嵌入操作后的结果,即历史项目嵌入结果和待推荐项目嵌入结果。根据历史项目嵌入结果和待推荐项目嵌入结果,确定输入自适应注意力。具体可以利用softmax函数计算历史项目嵌入结果中每一项和待推荐项目嵌入结果中每一项之间的相关性,获得输入自适应注意力,如公式(2)所示。
s130:将输入自适应注意力作用于历史交互项目序列中,获得输入序列。
将输入自适应注意力作用于历史交互项目序列中,具体的可以将输入自适应注意力与历史交互项目序列进行元素相乘操作,如公式(3)所示,获得输入序列。具体操作过程可参考自适应注意力感知gru网络的训练过程中在输入层进行输入自适应注意力的作用操作,在此不再赘述。
s140:基于历史交互项目序列和输入序列的结合,获得输入层输出结果。
将历史交互项目序列和输入序列相结合,通过gru变化后的基础公式(4),可以获得输入层输出结果。
s150:在自适应注意力感知gru网络的隐藏状态层,根据输入层输出结果和待推荐项目序列,确定隐藏自适应注意力;
s160:将隐藏自适应注意力作用于输入层输出结果中,获得隐藏状态序列。
在自适应注意力感知gru网络的隐藏状态层,根据输入层输入结果和待推荐项目序列,可以确定隐藏自适应注意力,具体可参考输入自适应注意力的确定过程,在此不再赘述。
将隐藏自适应注意力作用于输入层输出结果中,具体的可以将隐藏自适应注意力与输入层输出结果进行元素相乘操作,如公式(5)所示,获得隐藏状态序列。具体操作过程可以参考自适应注意力感知gru网络的训练过程中在隐藏状态层进行隐藏自适应注意力的作用操作,在此不再赘述。
s170:基于输入层输出结果和隐藏状态序列的结合,获得隐藏状态层输出结果。
将输入层输出结果和隐藏状态序列相结合,形成一个最终隐藏状态层的输出,获得隐藏状态层输出结果。
s180:在自适应注意力感知gru网络的输出层根据隐藏状态层输出结果,确定推荐给用户的项目。
在自适应注意力感知gru网络的输出层可以根据隐藏状态层输出结果,确定推荐给用户的项目,即生成用户的推荐侯选集。
在具体推荐时,可以根据当前用户对不同项目的偏好程度将项目从大到小排序,从中选出top-k个项目推荐给用户。
应用本发明实施例所提供的方法,获得用户历史交互项目序列和待推荐项目序列后,在预先训练获得的自适应注意力感知gru网络的输入层根据历史交互项目序列和待推荐项目序列,确定输入自适应注意力,将输入自适应注意力作用于历史交互项目序列中,获得输入序列,基于历史交互项目序列和输入序列的结合,获得输入层输出结果,然后在自适应注意力感知gru网络的隐藏状态层根据输入层输出结果和待推荐项目序列,确定隐藏自适应注意力,将隐藏自适应注意力作用于输入层输出结果中,获得隐藏状态序列,基于输入层输出结果和隐藏状态序列的结合,获得隐藏状态层输出结果,在自适应注意力感知gru网络的输出层根据隐藏状态层输出结果,确定推荐给用户的项目。利用gru的循环体系结构的优势捕获复杂的长期依赖关系,利用注意力网络来发现本地序列模式,可以进行深度自适应用户序列兴趣表示,提高了推荐性能。
相应于上面的方法实施例,本发明实施例还提供了一种基于自适应注意力的序列推荐装置,下文描述的一种基于自适应注意力的序列推荐装置与上文描述的一种基于自适应注意力的序列推荐方法可相互对应参照。
参见图3所示,该装置包括以下模块:
序列获得模块310,用于获得用户历史交互项目序列和待推荐项目序列;
输入自适应注意力确定模块320,用于在预先训练获得的自适应注意力感知gru网络的输入层,根据历史交互项目序列和待推荐项目序列,确定输入自适应注意力;
输入序列获得模块330,用于将输入自适应注意力作用于历史交互项目序列中,获得输入序列;
输入层输出结果获得模块340,用于基于历史交互项目序列和输入序列的结合,获得输入层输出结果;
隐藏自适应注意力确定模块350,用于在自适应注意力感知gru网络的隐藏状态层,根据输入层输出结果和待推荐项目序列,确定隐藏自适应注意力;
隐藏状态序列获得模块360,用于将隐藏自适应注意力作用于输入层输出结果中,获得隐藏状态序列;
隐藏状态层输出结果获得模块370,用于基于输入层输出结果和隐藏状态序列的结合,获得隐藏状态层输出结果;
项目推荐模块380,用于在自适应注意力感知gru网络的输出层根据隐藏状态层输出结果,确定推荐给用户的项目。
应用本发明实施例所提供的装置,获得用户历史交互项目序列和待推荐项目序列后,在预先训练获得的自适应注意力感知gru网络的输入层根据历史交互项目序列和待推荐项目序列,确定输入自适应注意力,将输入自适应注意力作用于历史交互项目序列中,获得输入序列,基于历史交互项目序列和输入序列的结合,获得输入层输出结果,然后在自适应注意力感知gru网络的隐藏状态层根据输入层输出结果和待推荐项目序列,确定隐藏自适应注意力,将隐藏自适应注意力作用于输入层输出结果中,获得隐藏状态序列,基于输入层输出结果和隐藏状态序列的结合,获得隐藏状态层输出结果,在自适应注意力感知gru网络的输出层根据隐藏状态层输出结果,确定推荐给用户的项目。利用gru的循环体系结构的优势捕获复杂的长期依赖关系,利用注意力网络来发现本地序列模式,可以进行深度自适应用户序列兴趣表示,提高了推荐性能。
在本发明的一种具体实施方式中,输入自适应注意力确定模块320,具体用于:
分别将历史交互项目序列和待推荐项目序列嵌入到低维空间,获得历史项目嵌入结果和待推荐项目嵌入结果;
根据历史项目嵌入结果和待推荐项目嵌入结果,确定输入自适应注意力。
在本发明的一种具体实施方式中,输入自适应注意力确定模块320,具体用于:
利用softmax函数计算历史项目嵌入结果中每一项和待推荐项目嵌入结果中每一项之间的相关性,获得输入自适应注意力。
在本发明的一种具体实施方式中,输入序列获得模块330,具体用于:
将输入自适应注意力与历史交互项目序列进行元素相乘操作,获得输入序列。
在本发明的一种具体实施方式中,隐藏状态序列获得模块360,具体用于:
将隐藏自适应注意力与输入层输出结果进行元素相乘操作,获得隐藏状态序列。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。
本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的技术方案及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。