1. 引言
随着移动互联网应用迅速发展,海量数据的传播导致严重的信息过载问题。为了解决信息过载问题,推荐系统成为一种能够帮助用户快速、准确地找到自己需要信息的解决方案[1]。在解决信息过量和提升用户浏览体验这两方面,推荐系统发挥着不可或缺的作用。推荐系统收集并分析用户浏览历史、购买行为、兴趣偏好等类型的数据,利用复杂的算法与模型,为用户提供个性化的推荐内容。推荐系统能够从海量信息中筛选出与用户信息匹配的内容,帮助用户找到他们可能感兴趣,但又难以在众多信息中自行挖掘的有价值资源[2],使得用户不需要在大量的信息中浪费大量时间和精力进行搜索与筛选,极大地节省了用户的时间、精力,有效提升了信息获取的效率[3]。
传统推荐系统模型依赖于长期的用户与系统的交互行为(例如评分、评论记录、点击记录、购买记录等)进行推荐列表生成。但是在实际场景中,用户很有可能会进行短期或者匿名的与推荐系统交互行为。这种场景突出了强实时性的特点,此时用户身份信息和长期偏好无法获取,仅可使用当前会话内的有限数据资源建立模型[4]。为解决上述问题,依据会话数据进行建模的会话推荐系统应运而生。在目前会话推荐系统的研究中,大部分研究仅以准确率为中心,导致用户视野受限、部分小众商品展示机会少、平台内容单一且重复度较高、资源信息分配不均衡等不利影响。
2. 问题定义
2.1. 会话推荐系统
集合
代表了数据集中的所有的用户,集合
代表了数据集中的所有项目。某个用户在某一会话中交互的项目集合构成一个会话
,数据集中所有的会话则构成了会话集合
。可将会话推荐系统的功能定义为:根据一个给定的会话
,预测出若干个可能与用户交互的项目
[5]。
2.2. 点击命中率
点击命中率(
)的定义为:在为用户生成的推荐列表中,若目标物品出现在推荐列表中的前N个推荐结果内,则视为一次命中[6]。点击命中率计算方法如下:
(1)
其中,
表示目标物品出现在推荐列表前
个推荐结果中被用户交互的会话数量;
表示测试集中的总会话数。
指标范围为0到1,指标结果越高说明准确率越高,
可以直观反映会话推荐系统预测的准确率。
2.3. 新颖度
新颖度可以分为项目新颖度和会话推荐系统新颖度。项目新颖度用来衡量在用户与系统交互的过程中,某项目是否频繁出现。若该项目新颖度较高,说明其出现频率较低。会话推荐新颖度则是推荐列表所有物品的平均新颖度,可用于衡量会话推荐系统新颖度,推荐列表中物品的新颖度越高,该系统新颖度越高。
本文物品新颖度基于物品流行度[7]进行计算。物品
新颖度
计算方式如下:
(2)
其中
代表物品
的被点击次数,
代表数据集中最少被点击的物品的点击次数,
代表数据集中最多被点击的物品的点击次数。通过上述基于流行度的新颖度计算方式,被点击次数越少(即越小众)的物品具有更高的新颖度。
将所有推荐列表中所有物品平均新颖度值作为会话推荐系统新颖度。若该值较高,则说明系统在保留准确推荐的同时,能够更多地将非热门的物品呈现给用户。会话推荐系统新颖度计算公式[7]如下:
(3)
其中
表示用户数量;
表示推荐列表长度;
表示用户
的推荐列表。
3. 基于图神经网络的新颖化会话推荐系统
3.1. 构建有向会话图
在传统会话推荐算法中,为了反映用户的会话行为先后关系,使算法能够更好捕捉用户行为模式和偏好变化,通常使用线性有序列表作为会话数据的格式。但是线性有序列表只能捕捉相邻两项目的转移关系,而非直接相邻的项目之间无法建立有效的数据关系[8],线性序列表结构如图1所示。在图数据结构中,任意两个节点可以通过边连接,因此能够显式表示所有项目之间的潜在关联[9]。图结构数据如图2所示。而图神经网络适用于处理图数据结构,核心是通过邻域聚合生成节点嵌入向量,可以做到同时捕捉局部结构和全局拓扑特征[10]。
基于用户行为序列的会话图构建可定义为:根据给定用户交互行为序列
(
表示用户与系统的交互项),将每一个会话数据都构建为一个有向图结构
,其中
代表有向图的节点,
代表有向图的边。有向图中的每一个节点则代表一个唯一项目。有向图边的顺序代表用户点击顺序,边的信息反映了用户与系统交互过程中,项目跳转的概率。
Figure 1. Data of linear order list
图1. 线性序列表数据
Figure 2. Graph structure data
图2. 图结构数据
3.2. 项目特征向量计算
为了充分利用3.1中提出的图数据信息,本文引入邻居信息聚合和门控更新机制两种机制。邻居信息聚合指的是通过融合每个节点的邻居信息,用于捕捉项目之间的转移模式;门控更新动态能够选择保留原有信息和引入新信息之间的比例,提高节点状态更新的灵活性。
1) 邻居信息聚合
节点
代表会话
中的第
个项目,节点
在目前时间步
中从其邻居节点处整合得到特征向量
的方法如下:
(4)
其中,
代表在上一个时间步中,第
个节点的状态向量。
是一个维度为
的矩阵,代表节点
对应的连接信息向量矩阵,用于描述该节点与其他节点之间的关系。矩阵
由两个部分拼接而成:第一个矩阵表示节点
的出边(从当前节点转移到其他节点的关系),维度为
;第二个矩阵表示节点
的入边(从其他某节点转移到当前节点的关系),维度为
。因此,矩阵
中包含节点
在图中所有邻接节点的加权信息。
代表偏置项,模型在加权求和后引入偏置项,补偿由于仅依赖邻居向量加权造成的信息不足,增强模型的表达能力。
2) 门控更新机制
门控更新机制源于门控循环单元的设计思想,目标是在信息传播过程中动态确定保留旧信息和引入新信息之间的比例,从而提高节点状态更新的灵活性和表达能力[11]。在本文中,门控更新机制通过计算更新门、重置门、候选状态和最终状态来实现。
更新门用于控制当前节点状态更新中保留旧状态与采用新候选状态的比例,其计算方式如下:
(5)
表示节点
经过邻居信息聚合后,在时间步
中所获得的信息,代表当前节点和他的邻域的局部特征相融合的结果。
和
代表权重矩阵,分别用于将聚合信息
和前一个状态 映射到同一特征空间,它们决定了不同信息在计算更新门时的贡献程度。激活函数则将线性组合的结果映射到[0, 1]区间,使得每个元素都表示更新比例的权重。
重置门决定了在生成候选状态时,有多少比例的前置状态的成分被重置,从而使得候选状态能更充分地利用当前邻域的信息,重置门计算方式如下:
(6)
其中
和
是待学习的权重矩阵,分别作用于聚合信息与前一时刻的节点状态,维度匹配保证后续运算正常。
候选状态
表示在当前迭代中根据新信息计算得到的中间状态,反映了当前输入信息对节点状态的一个更新提议。
(7)
矩阵
对经过重置门调制的历史状态进行线性变换,与当前邻居信息进行融合。tanh函数将最终线性组合后的结果映射到[−1, 1]的区间之内,产生候选状态。候选状态包括融合后新产生的信息和部分历史信息。
最终状态代表节点
在当前时间步
中迭代更新后的最终状态,其计算方式如下:
(8)
最终状态包含了历史信息与邻居信息,模型不仅能够在信息传播过程中避免过度遗忘历史信息,还可以引入新的上下文信息,从而捕捉会话图中复杂的项目转移模式。
3.3. 生成会话向量
在生成会话向量过程中,本文将局部兴趣和全局偏好信息融合,组成会话的表示向量。局部兴趣用于反映用户实时行为,使用会话中最后一次点击的项目向量来表示;全局偏好用于反应会话中整体的点击模式和隐含偏好,使用聚合所有点击项目的嵌入信息获得[11]。
对于每一个会话,本文使用会话中最后一个项目的嵌入向量局部向量
,即
(9)
本文认为最后点击的项目恰好可以反映用户当前短期兴趣,因此用来作为短期偏好代表。
使用会话中所有项目向量加权聚合后的结果构造全局会话向量
。对于会话中每个项目
,注意力权重
的计算方法如下:
(10)
其中,
是最后点击项目的嵌入向量,代表局部兴趣;
是会话
中第
个项目的嵌入向量;
与
是模型自动学习的权重矩阵,用于对最后点击和各个项目向量进行线性变换。
是模型自动学习的偏置项。
是参数向量,用于调整注意力分布,使最终的权重能突出关键项目。在初始化阶段,权重矩阵、偏置项和参数向量会通过随机赋值以进行初始化,而在模型的每次迭代过程中,损失函数计算出预测结果与真实标签间的损失,再通过反向传播方法计算损失梯度,根据梯度信息更新权重矩阵、偏置项和参数向量的值。
通过比较每个项目与最后点击项目之间的关系,确定各项目对会话全局偏好的贡献度。利用计算得到的注意力权重,对会话中所有项目的嵌入向量进行加权求和,得到全局会话向量
:
(11)
为了充分利用局部与全局的会话信息,本文将局部信息向量与全局会话信息向量拼接,线性变换压缩到同一向量空间,得到最终的会话表示
:
(12)
其中,
是一个可学习的权重矩阵,使会话表示中包含用户的即时兴趣和整体行为信息。
3.4. 模型训练
为了预测用户与会话的下一次交互,模型为所有项目生成准确性概率,并选取分数排名较高的项目作为推荐预选列表。预选列表的准确性概率使用生成预测概率进行计算,并采用交叉熵损失函数提升预测性能。
1) 计算项目的准确性概率
在获得每个会话的最终表示
后,模型需要为候选项目生成准确性推荐得分。对于每一个候选项目
,本文使用项目与会话的相似度进行项目的准确性评估。准确性评分的计算方式为:
(13)
利用会话向量
与候选项目向量
之间的相似性来度量项目对当前会话的相关性。内积运算能够捕捉两者在同一嵌入空间内的相似度,得分越高表示该项目越可能是用户下一次点击的目标。最后,为了方便后面推荐得分的计算,将得分映射为正确性推荐概率:
(14)
每个项目预测概率可以被理解为模型认为该项目与用户交互的可能性。
2) 使用损失函数优化推荐准确性
为了优化模型,使预测结果更接近真实点击,本文采用交叉熵损失函数。对每个会话图而言,损失函数定义如下:
(15)
其中
为真实标签的编码向量,表示实际点击的项目;
表示候选项目的总数;
代表模型预测出的项目
被用户交互的概率。
3.5. 新颖性推荐机制
为了在保证推荐准确性的前提下提升推荐结果的新颖性,本节引入一种基于双阶段排序的新颖性推荐机制。该机制的核心思想是在推荐流程中先基于准确性评价筛选出一批高质量候选项,再在候选范围内引入新颖性指标进行加权排序,使最终推荐既具有较高关联度,又能够呈现具有探索价值的内容。与直接对全部候选项进行融合排序相比,这种方式可避免新颖但无关或质量较低的项目进入最终推荐列表,从而有效提升结果质量与用户体验。
为了保证会话列表的准确率,首先选取部分正确性较高的项目生成一个预选集。预选集的生成基于3.4小节中提到的会话向量与项目向量的相似性计算。根据每个项目的值,模型按从高到低的顺序对项目进行排序,并选取前30个项目构成预选集。预选集的生成确保了推荐结果的准确性和相关性。
对于预选集中的所有项目,按照2.3中提到的项目新颖度计算公式计算新颖度,并转换为百分制的新颖度得分
。将每个项目的准确率预测值转换为百分制的准确率得分
。最终,将新颖度得分
和准确率得分
结合幂运算后相乘,得到每个项目的最终得分。计算方式下:
(16)
其中,参数
是一个可由用户调节的参数,其取值范围为
。综合得分的计算可让系统管理者或用户通过修改参数,对准确度和新颖度进行调制,最终平衡推荐准确性与新颖性。将预选集内所有项目根据最终得分
从高到低排序,并选取得分排名前20的项目作为最终推荐结果。新颖性机制实现的伪代码如下所示:
算法1:新颖性机制 |
输入:会话向量
;候选项目集
;参数
; |
输出:推荐列表
; |
1. 将
中的项目按照
排序,选取前30个项目构成预选集P; |
2. for (
in
)→//循环遍历所有项目 |
{ |
;→//将
转换为百分制的准确性得分 |
;→//将
转换为百分制的新颖性得分 |
;→//根据参数
计算综合推荐得分 |
} |
3. 按照综合得分
,选取
中项目分数最高的20项作为推荐列表
; |
4. return R; |
4. 实验
4.1. 实验数据集与预处理
本文使用Yoochoose和Diginetica数据集作为会话推荐模型学习的数据,验证所提出的模型在真实场景下的准确性与新颖性指标。
在数据集中,每一条数据代表了一次真实的用户与系统交互行为,因此会含有无效会话或异常交互。为了让模型能够更好地学习数据集,本文预处理中先对数据进行清洗,再建立会话序列。
1) 数据集分割:为适配实验环境计算规模,本研究将Yoochoose数据集缩减至原始规模的1/128,将Diginetica数据集缩减至原始规模的1/2,后续实验将验证该规模下的模型有效性。在下文中,称缩减后的Yoochoose数据集为Yoochoose 1/128数据,称缩减后的Diginetica数据集为Diginetica 1/2数据。
2) 数据读取与会话序列建立:从原始数据集中读取交互记录并创建会话数据。由于原始记录没有严格按照时间顺序存储,为避免生成的会话列表发生顺序上的错误进而误导模型学习,本文将每个会话内的点击记录按照时间戳排序,确保物品序列按照实际发生顺序排列。
3) 会话数据过滤:在数据清洗过程中,为了避免单次点击无法提供有效序列信息,本文将仅包含一个项目的会话删除掉。为了降低数据的噪声,本文删除数据集的所有会话中出现次数少于5次的物品。若某个会话在低频物品过滤后项目数量少于2,则该会话也被舍弃。
4) 测试集和训练集划分:为了模拟真实的会话推荐系统环境,在评估两个数据集时,选取最近一天的会话数据作为测试集测试会话推荐系统的性能,将其他较旧的会话作为训练集来训练会话推荐模型。
5) 物品重编号:为了方便后续的物品向量生成并降低物品标识的稀疏性,本文将训练集中的物品进行重编号处理,将所有物品标识转换为从1开始的连续整数。在测试集中,删除训练集中没有出现过的物品。
4.2. 实验结果
为测试加入新颖性机制的会话推荐系统在准确率与新颖性方面表现,本研究在模型测试阶段模拟了会话推荐系统与用户交互时场景。首先由会话推荐系统学习Yoochoose和Diginetica数据集训练模型,然后让模型根据综合评分给出20个物品作为推荐列表。在评价指标上关注推荐列表的点击命中率和新颖度两方面[12]。
Figure 3. Hit@20 values for different values of x when training with the Yoochoose dataset
图3. 使用Yoochoose数据集训练时取不同x值时Hit@20值
Figure 4. Novelty values for different values of x when training with the Yoochoose dataset
图4. 使用Yoochoose数据集训练时取不同x值时Novelty值
Figure 5. Hit@20 values for different values of x when training with the Diginetica dataset
图5. 使用Diginetica数据集训练时取不同x值时Hit@20值
Figure 6. Novelty values for different values of x when training with the Diginetica dataset
图6. 使用Diginetica数据集训练时取不同x值时Novelty值
在使用新颖性算法中参数
从−1到1的变化,可以分别得到使用Yoochoose和Diginetica数据集进行训练的模型的Hit@20和Novelty两个指标及其变化趋势分别如图3~6所示。
分析上面两个数据集训练的推荐列表指标数据,在参数
从1向−1降低的过程中Hit@20和Novelty的变化,将整个新颖性机制推荐的过程分为三个阶段:第一个阶段中相较传统模型的Hit@20没有损失,但是新颖性提升较小;第二个阶段中相较传统模型的Hit@20损失较小,并且Novelty有所提升;第三个阶段中相较传统模型的Hit@20损失较大,新颖性有所提升。下面本文针对每个阶段进行分析。
当
值为1时,此时模型仅使用准确性得分进行推荐列表筛选,此时相当于未加入新颖化推荐的传统会话推荐算法。使用Yoochoose数据集进行训练的模型Hit@20值为0.6530,Novelty值为0.9621;使用Diginetica数据集进行训练的模型Hit@20值为0.4597,Novelty值为0.9536。
使用Yoochoose数据集进行训练的模型中当
从1下降到0.90的过程中,推荐系统Hit@20仍为0.6530,Novelty由0.9621提升至0.9631;使用Diginetica数据集进行训练的模型,当
从1下降到0.9的过程中,推荐系统Hit@20仍为0.4597,Novelty由0.9536提升至0.9547。此时在没有牺牲准确性的情况下,提升了推荐新颖度。
当Hits@20降低1%以内,本文认为相较传统模型Hits@20损失较小。在使用Yoochoose数据集进行训练的模型中,当
从0.9下降到−0.15的过程中,在
时Hits@20数值为0.6436,比
时的传统算法(Hits@20 = 0.6530)降低了0.94%。而Novelty却从在
时的0.9621提升到了
时的0.9752,提升了1.31%。使用Diginetica数据集进行训练的模型,在
从0.9下降到−0.05的过程中,在
时的Hits@20数值为0.4499,比未引入新颖性机制传统算法(
)降低了0.98%。而Novelty从0.9536提升到了
时的0.9661,提升了1.25%。
当准确率降低超过1%之后,本文认为新颖性机制对推荐系统已造成了较大的影响。在使用Yoochoose数据集进行训练的模型中,当
从−0.15下降到−1过程中,
取−1时的Hit@20为0.4086,比
时的值0.6477降低了23.91%;Novelty从在
时的0.9733提升到了
时的0.9837。在使用Diginetica数据集进行训练的模型中,当
从−0.05下降到−1过程中,
值取−1时的Hit@20为0.2659,比
取−0.05时降低了18.4%;Novelty从在
时的0.9661提升到了
取−1时的0.9825,本阶段中虽然新颖度提升了1.64%,准确率指标严重下滑,本文认为这样的准确性指标下滑是无法接受的。因此,可以认为本阶段的新颖性提升消耗了较大的准确性。
针对上述两个数据集训练的实验结果,本文根据参数
取不同值所对应的Hit@20和Novelty,将推荐系统按照准确率和新颖性结果划分为三个模式:精准推荐模式、新颖性推荐模式、新颖性优先模式。
精准推荐模式(不牺牲准确率):精准推荐模式中,要求相较传统模型的Hit@20指标没有损失。例如,使用Yoochoose数据集训练
时和使用Diginetica数据集训练
时。在本模式中,新颖度提升有限,但是可以保持较高准确性,既保证了推荐准确性,又拓展了用户视野。建议在精准投放、时效敏感的业务场景使用。
新颖性推荐模式(推荐准确率降低较低):新颖性推荐模式中,要求准确率相较传统模型损失不得超过1%。例如,使用Yoochoose数据集训练时
和使用Diginetica数据集训练时
。本模式中通过小幅度牺牲准确率,较大提升了会话推荐的新颖度,可用于常规推荐场景或稳定交互阶段。
新颖性优先模式(牺牲准确率较高,新颖性较高):如果准确率相较传统模型准确率损失超过1%,则认为准确性推荐能力损失较大。例如,使用Yoochoose数据集训练时
和使用Diginetica数据集训练时
。本模式中的新颖性较高,但是较大地降低了推荐准确性。综上所述,建议本模式仅在对于新颖性有较高要求的场景下使用,例如拓展用户视野的冷启动阶段。
系统管理者可根据实际用户使用情况选择上述三种推荐模式,设置参数以优化会话推荐系统的推荐能力。