发明内容
针对现有的会话推荐方法的不足,本发明提出基于图神经网络和评论相似度的会话推荐方法和系统。该方法和系统实现了一种融合评论信息的图注意力网络结构,评论信息可以帮助模型从用户视角和文本空间共同捕捉商品的深层特征,而图神经网络可以帮助模型聚合相关程度高的邻居商品,消除无关商品的干扰。本发明提出了融合评论信息的图注意力网络;该结构可以利用购买过程中产生的评论信息,来构造全局视角下商品之间的依赖关系,挖掘文本空间中商品之间的相似度关系;其核心思想是通过余弦相似度和商品的评论文档,计算商品在文本空间的相似度,依据该相似度在商品之间构建关联边,得到商品在文本空间中依赖关系的图结构;随着网络中跳数的增加,该结构可以捕捉更深层次的商品特征,优化商品之间关联边的权重。本发明为每个会话建立一个会话图,定义了四种商品之间的关联边,更加精准地从局部视角捕捉会话内部之间商品的转移关系,从而提高模型的整体性能。
本发明的技术任务是按以下方式实现的,基于图神经网络和评论相似度的会话推荐方法,该方法具体如下:
构建基于评论相似度的全局图模块根据商品的评论文档得到商品在文本空间的相似度,并依据此相似度构建基于评论的商品全局图;
构建局部图模块,根据当前会话的商品序列,得到在会话中的商品局部图;
构建会话生成模块,结合商品在前两个模块分别得到的商品全局图和商品局部图表示,生成最终会话表示;
构建候选商品预测模块,根据会话表示,预测各个候选商品的得分,为用户推荐合适的目标商品。
作为优选,基于评论相似度的全局图模块的构建过程如下:
区分邻居重要性:以商品的初始表示以及预处理获得的全局图信息,即邻居及其相应关联边权重,作为输入;通过全局图信息检索出商品所对应的邻居商品初始表示,对邻居商品初始表示和邻居商品对应的关联边权重进行点乘;最后送入ReLU激活函数得到邻居商品的更新表示,具体公式如下:
其中,e
ij为商品v
i与邻居商品v
j之间的关联边权重;
为归一化后的关联边权重;exp()是以e为底的指数函数;
为商品v
i在全局图中的邻居商品v
j的初始表示;
为全局图中邻居商品v
j的更新表示;
为商品v
i在全局图中的邻居商品集合,商品v
k属于此邻居集合与商品v
i的并集;
获取新权重:获得邻居商品的更新表示后,使用余弦相似度的方式计算商品与每个邻居商品的新权重;利用权重矩阵Wdim来学习商品向量中不同维度的区别;最后以加权求和的方式输出全局图中每个商品的邻居商品复合表示,具体公式如下:
其中
为会话中的商品v
i的表示;
为商品v
i在全局图中的邻居商品v
j的更新表示,来自于公式(2);cosine()为余弦相似度;π(v
i,v
j)为商品v
i与邻居商品v
j之间的余弦相似度;exp()是以e为底的指数函数;
为归一化后的相似度;
为全局图中商品v
i的邻居商品复合表示,其中
与公式(1)中的定义相同;
获得全局图中商品的最终表示:以会话中的本地商品的初始表示和全局图中邻居商品的复合表示为输入,利用软注意力的方式获得全局图中商品的最终表示,即全局图商品表示,具体公式如下:
其中,
为本地商品v
i的初始表示;
为可学习的权重矩阵;σ为sigmoid激活函数;
为全局图中商品v
i的邻居商品复合表示;ReLU为激活函数;
为商品v
i在基于评论相似度的全局图模块的输出,即全局图商品表示。
更优地,所述局部图模块的构建过程具体如下:
学习邻居权重矩阵:以会话内部的本地商品的初始表示以及局部图关联边信息为输入;首先定义四种不同的权重矩阵,以学习定义局部图中所输出的四种有向边,并利用点乘的方式得到不同邻居商品对本地商品的重要性,得到融合局部图关联边信息的邻居权重矩阵,具体公式如下:
其中,
为本地商品v
i的初始表示;
为局部图中商品v
i的邻居商品v
j的初始表示;⊙表示点乘;
代表商品v
i与商品v
j之间关联边的权重向量,对应着局部图中四种不同的边,即包含a
in、a
out、a
in-out和a
self,
同理;
LeakyReLU为激活函数;
为商品v
i在局部图中的邻居集合,商品v
k属于此邻居集合与商品v
i的并集;exp()是以e为底的指数函数;α
ij表示邻居商品v
j对本地商品v
i的重要性;
获得局部图的商品表示:以会话内部的本地商品的初始表示以及公式(8)学习的邻居权重矩阵为输入;通过加权求和来获得局部图商品表示,具体公式如下:
其中
同公式(8);α
ij为公式(8)的输出;
同公式(8);
为商品v
i在局部图模块的输出,即局部图商品表示。
更优地,所述会话生成模块的构建过程具体如下:
以基于评论相似度的全局图模块获得的全局图商品表示
以及局部图模块获得的局部图商品表示
为输入;利用通道注意力得到融合商品表示;根据学习到的融合商品表示,利用软注意力的方式生成融合位置信息的会话表示;具体如下:
融合商品表示:以基于评论相似度的全局图模块获得的全局图商品表示
以及局部图模块获得的局部图商品表示
为输入;通过通道注意力机制对全局图商品表示和局部图商品表示计算权重,最终得到融合商品表示;具体公式如下:
其中
为基于评论相似度的全局图模块获得的全局图商品表示,来自公式(7);
为局部图模块获得的局部图商品表示,来自公式(9);dropout()表示dropout函数,随机丢掉某些特征;||表示两个矩阵在新的维度上进行拼接;
为定义的多通道商品表示;ReLU()为激活函数;
为可学习的权重矩阵;σ为sigmoid激活函数;
为全局和局部两个通道的可学习权重;
为通道注意力机制输出的融合商品表示;
生成会话表示:以上一步的融合商品表示为输入;为了体现不同商品对下一次预测的不同重要性,设置一个可学习的位置表示矩阵P=[p
1,p
2,...,p
l],其中
是位置i的位置向量,而l是当前会话的长度;通过平均池化得到均值会话表示;通过软注意力来学习融入位置信息的商品表示对于当前会话的重要性,最后加权求和得到最终会话表示;具体公式如下:
其中,
为公式(14)输出的商品v
i的融合商品表示;p
l-i-1为商品v
i反向的位置向量;
b
1为偏置值;tanh为激活函数;l是当前会话的长度;
为商品v
i的融入位置信息的商品表示;s
avg为均值会话表示;
为可学习的权重矩阵;b
2为偏置值;σ为sigmoid激活函数;β
i为学习到的商品v
i对于当前会话的重要性;s为生成的最终会话表示。
更优地,所述候选商品预测模块的构建过程具体如下:
以所有候选商品表示以及会话生成模块所得到的会话表示作为本模块的输入;对候选商品表示和当前会话表示进行点积运算,应用Softmax函数来获得每个候选商品的推荐得分:
其中s表示最终会话表示,来自公式(18);
为候选商品v
i的初始表示,
为候选商品v
i的推荐得分,将打分为top-N的商品推荐给当前会话的用户。
本方法模型尚未进行充分训练时,需要在训练数据集上进行训练,以优化模型参数;当模型训练完毕时,候选商品预测模块可预测每个候选商品的推荐得分,根据得分,推荐合适的商品给当前会话的用户。
更优地,所述全局图信息的构建过程具体如下:
下载网络上已经公开的电子商务网站数据集,将其作为构建会话序列的原始数据;
预处理用于构建会话序列的原始数据,将会话的时间跨度设定为某一时间段,构建满足条件的训练集和测试集会话序列;
生成评论文档:将构建好的会话序列中的商品评论分别放入对应商品的评论文档,然后使用正则表达式清洗评论文档;
训练评论文档:将清洗好的评论文档送入Doc2Vec工具进行训练,将评论文档转化为向量化表示,即商品在文本空间中的向量化表示;
获取全局图信息:载入训练评论文档后得到的商品在文本空间中的向量化表示,利用Doc2Vec工具中的相似度模块计算商品之间的相似度;对于每一个商品,取与其相似度最高的前N个商品,保存其所对应的邻居列表及其它们之间的相似度,即得该商品的全局图信息;邻居商品将作为全局图中的边的顶点,邻居商品的相似度将作为相应边的权重;
构建商品向量映射层:商品的集合V={v1,v2,...,vm}中的每一个商品在图中均对应一个节点,将每一个商品ID映射为商品的初始表示;同时,设置一个可学习的位置表示矩阵,以考虑会话序列中商品的顺序关系;
所述的会话推荐模型构建完成后通过训练数据集进行会话推荐模型的训练与优化,具体如下:
构建交叉熵损失函数:由构建候选商品预测模块过程可知,
时经过会话推荐模型处理得到的每个候选商品的推荐得分,y是真实值,代表该会话下一次点击是否是目标商品,公式如下:
优化模型训练:使用Adam作为优化算法,学习率设置为0.001,L2正则化设置为1e-5,学习率衰减后的步数设置为3,学习率更新设置为0.1;在训练数据集上,对会话推荐模型进行优化训练
一种基于图神经网络和评论相似度的会话推荐系统,该系统包括,
训练集和测试集的会话序列构建单元,首先需要获得用户在电子商务网站的交互记录,随后对其进行预处理操作,从而得到符合训练要求的会话序列;训练集和测试集的会话序列构建单元包括,
原始数据获取单元,负责下载网络上已经公开的电子商务网站数据集,将其作为构建会话序列的原始数据;
原始数据预处理单元,负责将会话的时间跨度设定为某一时间段,构建满足条件的训练集和测试集会话序列,从而构建训练集和测试集的会话序列;
商品的评论表示生成单元,收集预处理得到的训练集中每一个商品所对应的所有评论,生成当前商品的评论文档;利用Doc2Vec工具包处理评论文档,得到商品在文本空间中的向量化表示;计算商品在文本空间的相似度,为每个商品找到最相似的N个邻居;商品的评论表示生成单元包括,
评论文档生成单元,将构建好的会话序列中的商品评论分别放入对应商品的文档,然后利用正则表达式的方式清洗评论文档;
评论文档训练单元,将清洗好的评论文档送入Doc2Vec训练,最终得到商品在文本空间中的向量化表示;
全局图信息获取单元,载入评论文档训练单元得到的商品在文本空间中的向量化表示,利用Doc2Vec中的相似度模块计算商品之间的相似度,出于对计算效率的考虑,只保留相似度最高的前12个商品;最终得到每个商品所对应的邻居列表及其它们之间的相似度,即边的权重;
会话推荐系统模型构建单元,用于载入训练集、测试集以及全局图信息、构建商品向量映射层、构建基于评论相似度的全局图模块、构建局部图模块、构建会话生成模块以及构建候选商品预测模块,会话推荐系统模型构建单元包括,
训练集、测试集以及全局图信息载入单元,负责加载训练集、测试集以及全局图信息;对于每个会话序列,根据全局图信息查找到会话中每个商品所对应的邻居列表及其它们之间的相似度,即边的权重;
商品向量映射层构建单元,负责定义所有的商品向量表示以及位置向量,并对二者初始化;
基于评论相似度的全局图模块构建单元,负责构建基于图注意力神经网络的全局图,根据每个连接的重要性生成注意力权重;全局图构建完成后,通过图注意力神经网络的方式对图中的节点,即会话中的商品进行更新学习;
局部图模块构建单元,负责学习局部图中商品的邻居的不同重要性,定义了四种不同的边,之后对局部图中商品之间的有权边进行计算,最终通过加权求和来获得每个商品的输出特征;
会话生成模块构建单元,负责结合全局图和局部图的输出来获得其表示;利用通道注意力机制,分别从评论信息的全局视角和商品转移关系的局部视角来捕捉商品的特征表示;之后需要根据学习到的商品表示,学习会话中的每个商品对于预测的贡献,结合注意力机制以及位置向量来生成最终会话表示;
候选商品预测模块构建单元,负责将会话生成模块构建单元所得到的会话表示将作为本单元的输入,每个候选商品的最终推荐得分基于它们的向量表示以及当前会话表示,首先对候选商品表示和当前会话表示进行点积运算,然后应用Softmax函数来获得每个候选商品的推荐得分;
会话推荐模型训练单元,用于构建模型训练过程中所需要的损失函数,并完成模型的优化训练;会话推荐模型训练单元包括,
交叉熵损失函数构建单元,负责计算预测的候选商品与真实的目标商品之间的误差;
模型训练优化单元,负责训练并调整模型训练中的参数,减小预测误差。
一种存储介质,其中存储有多条指令,其特征在于,所述指令由处理器加载,执行上述的基于图神经网络和评论相似度的会话推荐方法的步骤。
一种电子设备,其特征在于,所述电子设备包括:
上述的存储介质;以及
处理器,用于执行所述存储介质中的指令。
本发明的基于图神经网络和评论相似度的会话推荐方法具有以下优点:
(一)通过引入商品的评论信息,可以更加直观地捕捉商品之间的依赖关系,增加推荐结果的可解释性。
(二)通过全局图注意力神经网络,可以更加灵活地学习商品之间的依赖关系,优化关联边的权重,从全局视角生成更加准确的商品表示。
(三)通过局部图注意力神经网络,可以准确地学习会话内商品之间的转移关系,捕捉当前会话的意图,从局部视角生成融合会话信息的商品表示,从而提高会话表示的准确性。
(四)通过通道注意力机制,可以有效过滤会话中的无效信息,增强有效信息,使得最终会话表示更加准确,从而提高推荐候选商品的准确度。
具体实施方式
参照说明书附图和具体实施例对本发明的一种基于图神经网络和评论相似度的会话推荐方法和系统作以下详细地说明。
实施例1:
本发明的总体模型框架如图2所示。由图2可知,本发明的主要框架结构包含基于评论相似度的全局图模块、局部图模块、会话生成模块以及候选商品预测模块。其中,基于评论相似度的全局图模块,首先利用图注意力网络的思想,根据每个连接的重要性生成注意力权重;基于评论相似度的全局图是通过预处理后得到的全局图邻居信息以及邻边权重来构建的;全局图构建完成后,通过图注意力神经网络的方式对图中的节点,即会话中的商品,进行更新学习,最终加权求和得到全局图商品表示。局部图模块,利用当前会话中的成对的商品转移信息,得到局部图商品表示;如图1所示,局部图定义了四种不同的边,故需要训练四个权重向量,分别是:ain、aout、ain-out和aself;之后对局部图中商品之间的有权边进行计算,利用注意力机制来学习不同商品之间的权重,最终加权求和得到局部图商品表示。会话生成模块,结合全局图商品表示和局部图商品表示而生成会话表示;该模块首先通过通道注意力机制,从评论信息的全局视角和商品转移关系的局部视角得到融合商品表示;之后以生成的融合商品表示为输入,结合了反向位置信息和会话信息来生成更加准确的会话表示。预测候选商品预测模块,将会话表示和候选商品表示作为输入,通过点积运算生成每个候选商品的得分,然后应用Softmax函数来获得每个候选商品的最终推荐得分,取得分最大的前n个候选商品推荐给当前会话。以上所述为本模型发明的结构简介。
实施例2:
本发明的基于图神经网络和评论相似度的会话推荐方法,具体步骤如下:
S1、建立训练集和测试集所需要的会话序列:首先需要获得用户在电子商务网站的交互记录,随后对其进行预处理操作,从而得到符合训练要求的会话序列。具体步骤如下所述:
S101、下载网络上已经公开的电子商务网站数据集,将其作为构建会话序列的原始数据。
举例说明:网络上有许多已经公开的面向推荐系统的用户行为历史数据集,例如Amazon的Pet Supplies数据集。
Pet Supplies数据集中数据格式如下所示:
其中reviewerID为用户ID;asin为商品ID;reviewerName为用户昵称;reviewText为商品的评论;overall为商品的打分;unixReviewTime为评论时间(unix时间)。
S102、预处理用于构建会话序列的原始数据,将会话的时间跨度设定为某一时间段,构建满足条件的训练集和测试集会话序列。
举例说明:若设定时间跨度为1天,则构建会话序列的具体步骤描述为:首先将每个用户在一天之内交互的商品构建成序列;然后删除长度小于2的序列;最后为了避免数据稀疏的问题,过滤掉在所有序列中出现次数小于5的商品。在Pet Supplies数据集中,将最近一年的会话作为测试集,更早的历史会话作为训练集。为了避免冷启动的问题,删除了测试集中不在训练集出现的商品。
S2、生成商品的评论表示:收集步骤S1得到的训练集中每一个商品所对应的所有评论,生成当前商品的评论文档;利用Doc2Vec工具包处理评论文档,得到商品在文本空间中的向量化表示;计算商品在文本空间的相似度,为每个商品找到最相似的N个邻居。具体步骤如下:
S201、生成评论文档:将构建好的会话序列中的商品评论分别放入对应商品的评论文档,然后使用正则表达式清洗评论文档。
举例:
对某一商品的所有评论合并后,得以其初始的评论文档如下:
("I love Littermaid products.I have 2large male Meezers,so I bought areconditioned LM900 Mega box about 3years ago.I’ve never had a day’s troublewith it over the 3years,even though both cats use the same box.One cat isvery timid and I was afraid he wouldn’t use it because of the cleaningmechanism,which is a bit noisy,but he loves the box and so does hisbrother.")
对初始的评论文档,使用正则表达式清洗(删除标点符号、数字、其他不符合语法标准的词语以及大写字母转换成小写字母)后,得到评论文档如下:
(’i’,’love’,’littermaid’,’products’,’i’,’have’,’large’,’male’,’meezers’,’so’,’i’,’bought’,’a’,’reconditioned’,’lm’,'mega',’box','about','years','ago’,'i','ve’,’never’,'had',’a’,’day’,’s’,’trouble’,’with’,’it’,’over’,’the’,’years’,’even','though’,’both','cats','use','the','same’,’box’,'one','cat','is','very','timid','and','i','was','afraid','he','wouldn','t','use','it','because','of','the','cleaning',’mechanism','which','is','a','bit','noisy','but','he','loves','the','box','and','so','does','his','brother')
S202、训练评论文档:将清洗好的评论文档送入Doc2Vec工具进行训练,将评论文档转化为向量化表示,即商品在文本空间中的向量化表示。
S203、获取全局图信息:载入步骤S202得到的商品在文本空间中的向量化表示,利用Doc2Vec工具中的相似度模块计算商品之间的相似度;对于每一个商品,取与其相似度最高的前N个商品,保存其所对应的邻居列表及其它们之间的相似度;邻居商品将作为全局图中的边的顶点,邻居商品的相似度将作为相应边的权重。
举例说明:发明中,将N设置为12。
S3、构建会话推荐系统模型:主要操作包括载入训练集、测试集以及全局图信息、构建商品向量映射层、构建基于评论相似度的全局图模块、构建局部图模块、构建会话生成模块以及构建候选商品预测模块。具体步骤如下:
S301、载入训练集、测试集以及全局图信息:训练集、测试集数据加载后,对于每个会话序列,首先根据步骤S203得到的全局图信息,查找到会话中每个商品所对应的邻居列表及其它们之间的相似度。
举例说明:在Pytorch中,对于上面描述的代码实现如下所示:
train_data=pickle.load(open('datasets/'+opt.dataset+'/train.txt','rb'))
test_data=pickle.load(open('datasets/'+opt.dataset+'/test.txt','rb'))
sim_adj=pickle.load(open('datasets/'+opt.dataset+'/sim_adj_12'+'.pkl','rb'))
sim_weight=pickle.load(open('datasets/'+opt.dataset+'/sim_weight_12'+'.pkl','rb'))
sim_adj,sim_weight=handle_sim_adj(sim_adj,num_node,opt.n_sample_all,sim_weight)
其中,train_data为训练集数据;test_data为测试集数据;sim_adj存放会话中每个商品所对应的邻居;sim_weight存放商品与每个邻居的关联边的权重。
S302、构建商品向量映射层:商品的集合V={v1,v2,...,vm}中的每一个商品在图中均对应一个节点,将每一个商品ID映射为商品的初始表示,即步骤S306所输入的候选商品表示;同时,设置一个可学习的位置表示矩阵,以考虑会话序列中商品的顺序关系;
举例说明:
在Pytorch中,对于上面描述的代码实现如下所示:
self.node_embedding=nn.Embedding(num_node,self.dim)
self.pos_embedding=nn.Embedding(200,self.dim)
其中num_node为所有节点的数量,即商品集合V的大小;self.dim是模型训练商品表示的维度;在本发明中,self.pos_embedding的大小设定为200,因为会话序列的长度不会超过200。
S303、构建基于评论相似度的全局图模块:以会话中的商品向量以及步骤S203获得的全局图信息,即邻居商品及其相应关联边权重,作为输入;首先使用点乘的方式区分邻居商品的不同重要性;使用余弦相似度的方式计算商品与每个邻居商品的新权重,以加权求和的方式整合所有邻居商品的更新表示;最后结合本地商品初始表示及其邻居商品更新表示来获得全局图商品表示,其中“本地商品”即为会话中的商品自身,下文皆用“本地商品”来表示;具体如下:
S30301、区分邻居重要性:以步骤S302获得的商品的初始表示以及步骤S203获得的全局图信息,即邻居及其相应关联边权重,作为输入;通过全局图信息检索出商品所对应的邻居商品初始表示,对邻居商品初始表示和邻居商品对应的关联边权重进行点乘;最后送入ReLU激活函数得到邻居商品的更新表示,具体公式如下:
其中,e
ij为商品v
i与邻居商品v
j之间的关联边权重;
为归一化后的关联边权重;exp()是以e为底的指数函数;
为商品v
i在全局图中的邻居商品v
j的初始表示;
为全局图中邻居商品v
j的更新表示;
为商品v
i在全局图中的邻居商品集合,商品v
k属于此邻居集合与商品v
i的并集;
S30302、获取新权重:从步骤S30301获得邻居商品的更新表示后,使用余弦相似度的方式计算商品与每个邻居商品的新权重;利用权重矩阵Wdim来学习商品向量中不同维度的区别;最后以加权求和的方式输出全局图中每个商品的邻居商品复合表示,具体公式如下:
其中
为会话中的商品v
i的表示;
为商品v
i在全局图中的邻居商品v
j的更新表示,来自于公式(2);cosine()为余弦相似度;π(v
i,v
j)为商品v
i与邻居商品v
j之间的余弦相似度;exp()是以e为底的指数函数;
为归一化后的相似度;
为全局图中商品v
i的邻居商品复合表示,其中
与公式(1)中的定义相同;
S30303、获得全局图中商品的最终表示:以会话中的本地商品的初始表示和步骤S30302获得全局图中邻居商品的复合表示为输入,利用软注意力的方式获得全局图中商品的最终表示,即全局图商品表示,具体公式如下:
其中,
为本地商品v
i的初始表示;
为可学习的权重矩阵;σ为sigmoid激活函数;
为全局图中商品v
i的邻居商品复合表示;ReLU为激活函数;
为商品v
i在基于评论相似度的全局图模块的输出,即全局图商品表示;
举例说明:在Pytorch中,对于上面描述的代码实现如下所示:
neighbor_weight=torch.softmax(neighbor_weight,-1).unsqueeze(-1)
neighbor_vector=torch.relu(neighbor_vector*neighbor_weight)
self_vectors=torch.matmul(self_vectors,self.w_dim)
neighbor_vector=torch.matmul(neighbor_vector,self.w_dim)
e_ij=torch.cosine_similarity(self_vectors.unsqueeze(2).repeat(1,1,neighbor_vector.shape[2],1),neighbor_vector,dim=-1)
e_ij=torch.softmax(e_ij,dim=-1).unsqueeze(-1)
neighbor_vector=torch.sum(e_ij*torch.matmul(neighbor_vector,self.w_dim),dim=-2)
g=torch.sigmoid(torch.matmul(self_vectors,self.w))
self_vectors=(1-g)*neighbor_vector+g*self_vectors
self_vectors=self.act(output)
其中,neighbor_weight为模块输入的关联边权重;neighbor_vector为邻居输入的邻居商品向量表示;self_vectors为本地商品表示;self.w_dim对应公式(3)中的Wdim维度为(100,100);self.w对应公式(6)中的Wλ,维度为(100,1)。
S304、构建局部图模块:以会话内部的本地商品表示以及局部图关联边信息为输入;定义四种不同的权重矩阵,得到融合局部图关联边信息的邻居权重矩阵;使用加权求和的方式得到局部图商品表示;具体如下:
S30401、学习邻居权重矩阵:以会话内部的本地商品的初始表示以及局部图关联边信息为输入;首先定义四种不同的权重矩阵,以学习定义局部图中所输出的四种有向边,并利用点乘的方式得到不同邻居商品对本地商品的重要性,得到融合局部图关联边信息的邻居权重矩阵,具体公式如下:
其中,h
vi为本地商品v
i的初始表示;
为局部图中商品v
i的邻居商品v
j的初始表示;⊙表示点乘;
代表商品v
i与商品v
j之间关联边的权重向量,对应着局部图中四种不同的边,即包含a
in、a
out、a
in-out和a
self,
同理;LeakyReLU为激活函数;
为商品v
i在局部图中的邻居集合,商品v
k属于此邻居集合与商品v
i的并集;exp()是以e为底的指数函数;α
ij表示邻居商品v
j对本地商品v
i的重要性;
S30402、获得局部图的商品表示:以会话内部的商品向量表示以及公式(8)学习的邻居权重矩阵为输入;通过加权求和来获得局部图商品表示,具体公式如下:
其中
同公式(8);α
ij为公式(8)的输出;
同公式(8);
为商品v
i在局部图模块的输出,即局部图商品表示;
举例说明:在Pytorch中,对于上面描述的代码实现如下所示:
a_input=(h.repeat(1,1,N).view(batch_size,N*N,self.dim)*h.repeat(1,N,1)).view(batch_size,N,N,self.dim)
e_0=torch.matmul(a_input,self.a_0)
e_1=torch.matmul(a_input,self.a_1)
e_2=torch.matmul(a_input,self.a_2)
e_3=torch.matmul(a_input,self.a_3)
e_0=self.leakyrelu(e_0).squeeze(-1).view(batch_size,N,N)
e_1=self.leakyrelu(e_1).squeeze(-1).view(batch_size,N,N)
e_2=self.leakyrelu(e_2).squeeze(-1).view(batch_size,N,N)
e_3=self.leakyrelu(e_3).squeeze(-1).view(batch_size,N,N)
mask=-9e15*torch.ones_like(e_0)
alpha=torch.where(adj.eq(1),e_0,mask)
alpha=torch.where(adj.eq(2),e_1,alpha)
alpha=torch.where(adj.eq(3),e_2,alpha)
alpha=torch.where(adj.eq(4),e_3,alpha)
alpha=torch.softmax(alpha,dim=-1)
output=torch.matmul(alpha,h)
其中,a_input表示本地商品初始表示和邻居商品初始表示的点乘结果;e_0、e_1、e_2以及e_3分别表示a
in、a
out、a
in-out和a
self四种不同边的权重向量;alpha为所有公式(8)中α
ij的矩阵;output表示公式(9)中的
S305、构建会话生成模块:以步骤S303获得的全局图商品表示
以及步骤S304获得的局部图商品表示
为输入;利用通道注意力得到融合商品表示;根据学习到的融合商品表示,利用软注意力的方式生成融合位置信息的会话表示;具体如下:
S30501、融合商品表示:以基于评论相似度的全局图模块获得的全局图商品表示
以及局部图模块获得的局部图商品表示
为输入;通过通道注意力机制对全局图商品表示和局部图商品表示计算权重,最终得到融合商品表示;具体公式如下:
其中
为基于评论相似度的全局图模块获得的全局图商品表示,来自公式(7);
为局部图模块获得的局部图商品表示,来自公式(9);dropout()表示dropout函数,随机丢掉某些特征;||表示两个矩阵在新的维度上进行拼接;
为定义的多通道商品表示;ReLU()为激活函数;
为可学习的权重矩阵;σ为sigmoid激活函数;
为全局和局部两个通道的可学习权重;
为通道注意力机制输出的融合商品表示;
S30502、生成会话表示:以步骤S30501生成的融合商品表示为输入;为了体现不同商品对下一次预测的不同重要性,设置一个可学习的位置表示矩阵P=[p
1,p
2,...,p
l],其中
是位置i的位置向量,而l是当前会话的长度;通过平均池化得到均值会话表示;通过软注意力来学习融入位置信息的商品表示对于当前会话的重要性,最后加权求和得到最终会话表示;具体公式如下:
其中,
为公式(14)输出的商品v
i的融合商品表示;p
l-i-1为商品v
i反向的位置向量;
b
1为偏置值;tanh为激活函数;l是当前会话的长度;
为商品v
i的融入位置信息的商品表示;s
avg为均值会话表示;
为可学习的权重矩阵;b
2为偏置值;σ为sigmoid激活函数;β
i为学习到的商品v
i对于当前会话的重要性;s为生成的最终会话表示。
举例说明:在Pytorch中,对于上面描述的代码实现如下所示:
pos_emb=self.pos_embedding.weight[:len]
pos_emb=pos_emb.unsqueeze(0).repeat(batch_size,1,1)
hs=torch.sum(hidden*mask,-2)/torch.sum(mask,1)
hs=hs.unsqueeze(-2).repeat(1,len,1)
nh=torch.matmul(torch.cat([pos_emb,hidden],-1),self.w_2)
nh=torch.tanh(nh)
nh=torch.sigmoid(torch.matmul(nh,self.w_4)+torch.matmul(hs,self.w_5))
beta=torch.matmul(nh,self.w_3)
beta=beta*mask
session=torch.sum(beta*hidden,1)
其中,len表示会话序列的长度;batch_size为数据的批次大小;mask表示会话的实际长度,因为为了计算的统一性,默认会将会话序列进行统一长度的补齐;len即为补齐后的长度;hs表示公式(16)的s
avg;nh表示公式(15)的
beta表示公式(17)中软注意力机制得到的每个商品对于会话的权重β
i;self.w_2对应公式(15)的
实现时dim设置为100;self.w_3对应公式(17)的
self.w_4对应公式(17)的
self.w_5对应公式(17)的
实现时dim设置为100;session为最终加权求和得到的会话表示s。
S306、构建候选商品预测模块:以步骤S302得到的所有候选商品表示以及步骤S305所得到的会话表示作为本模块的输入;对候选商品表示和当前会话表示进行点积运算,应用Softmax函数来获得每个候选商品的推荐得分:
其中s表示最终会话表示,来自公式(18);
为候选商品v
i的初始表示,
为候选商品v
i的推荐得分,将打分为top-N的商品推荐给当前会话的用户。
本方法模型尚未进行充分训练时,需要进一步执行步骤S4进行训练,以优化模型参数;当该模型训练完毕时,由步骤S306可预测每个候选商品的推荐得分,根据得分,推荐合适的商品给当前会话的用户。
举例说明:在Pytorch中,对于上面描述的代码实现如下所示:
b=self.node_embedding.weight[1:]
scores=torch.matmul(select,b.transpose(1,0))
S4、训练会话推荐模型:在步骤S2得到的训练数据集上对步骤S3构建的会话推荐模型进行训练,以优化模型参数,具体如下:
S401、构建交叉熵损失函数:由构建候选商品预测模块过程可知,
时经过会话推荐模型处理得到的每个候选商品的推荐得分,y是真实值,代表该会话下一次点击是否是目标商品,公式如下:
举例说明:上面描述的损失函数在Pytorch中的代码实现为:
targets,scores=forward(model,data)
targets=trans_to_cuda(targets).long()
loss=nn.CrossEntropyLoss(scores,targets-1)
S402、优化模型训练:使用Adam作为优化算法,学习率设置为0.001,L2正则化设置为1e-5,学习率衰减后的步数设置为3,学习率更新设置为0.1;在训练数据集上,对会话推荐模型进行优化训练;
举例说明:上面描述的优化函数及其设置在Pytorch中的代码实现为:
self.optimizer=torch.optim.Adam(self.parameters(),lr=0.001,weight_decay=1e-5)
self.scheduler=torch.optim.lr_scheduler.StepLR(self.optimizer,step_size=3,gamma=0.1)
其中lr即为学习率,weight_decay为权重衰减(L2正则化),step_size为学习率衰减后的步数,gamma为学习率更新。
本发明所提出的模型在Pet Supplies数据集上取得了优于当前先进模型的结果,实验的对比具体见下表。
本发明模型和现有模型进行了比较,实验结果显示本发明方法有了很大的提升。其中,前三行是现有技术的模型的实验结果,最后一行是本发明模型的实验结果,由此可知本发明比现有模型有了较大提升。
实施例3:
基于实施例2的基于图神经网络和评论相似度的会话推荐系统,该系统包括:
训练集和测试集的会话序列构建单元,首先需要获得用户在电子商务网站的交互记录,随后对其进行预处理操作,从而得到符合训练要求的会话序列;训练集和测试集的会话序列构建单元包括,
原始数据获取单元,负责下载网络上已经公开的电子商务网站数据集,将其作为构建会话序列的原始数据;
原始数据预处理单元,负责将会话的时间跨度设定为某一时间段,构建满足条件的训练集和测试集会话序列,从而构建训练集和测试集的会话序列;
商品的评论表示生成单元,收集预处理得到的训练集中每一个商品所对应的所有评论,生成当前商品的评论文档;利用Doc2Vec工具包处理评论文档,得到商品在文本空间中的向量化表示;计算商品在文本空间的相似度,为每个商品找到最相似的N个邻居;商品的评论表示生成单元包括,
评论文档生成单元,将构建好的会话序列中的商品评论分别放入对应商品的文档,然后利用正则表达式的方式清洗评论文档;
评论文档训练单元,将清洗好的评论文档送入Doc2Vec训练,最终得到商品在文本空间中的向量化表示;
全局图信息获取单元,载入评论文档训练单元得到的商品在文本空间中的向量化表示,利用Doc2Vec中的相似度模块计算商品之间的相似度,出于对计算效率的考虑,只保留相似度最高的前12个商品;最终得到每个商品所对应的邻居列表及其它们之间的相似度,即边的权重;
会话推荐系统模型构建单元,用于载入训练集、测试集以及全局图信息、构建商品向量映射层、构建基于评论相似度的全局图模块、构建局部图模块、构建会话生成模块以及构建候选商品预测模块,会话推荐系统模型构建单元包括,
训练集、测试集以及全局图信息载入单元,负责加载训练集、测试集以及全局图信息;对于每个会话序列,根据全局图信息查找到会话中每个商品所对应的邻居列表及其它们之间的相似度,即边的权重;
商品向量映射层构建单元,负责定义所有的商品向量表示以及位置向量,并对二者初始化;
基于评论相似度的全局图模块构建单元,负责构建基于图注意力神经网络的全局图,根据每个连接的重要性生成注意力权重;全局图构建完成后,通过图注意力神经网络的方式对图中的节点,即会话中的商品进行更新学习;
局部图模块构建单元,负责学习局部图中商品的邻居的不同重要性,定义了四种不同的边,之后对局部图中商品之间的有权边进行计算,最终通过加权求和来获得每个商品的输出特征;
会话生成模块构建单元,负责结合全局图和局部图的输出来获得其表示;利用通道注意力机制,分别从评论信息的全局视角和商品转移关系的局部视角来捕捉商品的特征表示;之后需要根据学习到的商品表示,学习会话中的每个商品对于预测的贡献,结合注意力机制以及位置向量来生成最终会话表示;
候选商品预测模块构建单元,负责将会话生成模块构建单元所得到的会话表示将作为本单元的输入,每个候选商品的最终推荐得分基于它们的向量表示以及当前会话表示,首先对候选商品表示和当前会话表示进行点积运算,然后应用Softmax函数来获得每个候选商品的推荐得分;
会话推荐模型训练单元,用于构建模型训练过程中所需要的损失函数,并完成模型的优化训练;会话推荐模型训练单元包括,
交叉熵损失函数构建单元,负责计算预测的候选商品与真实的目标商品之间的误差;
模型训练优化单元,负责训练并调整模型训练中的参数,减小预测误差。
实施例4:
基于实施例2的存储介质,其中存储有多条指令,指令有处理器加载,执行实施例2的基于图神经网络和评论相似度的会话推荐方法的步骤。
实施例5:
基于实施例4的电子设备,电子设备包括:实施例4的存储介质;以及处理器,用于执行实施例4的存储介质中的指令。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。