本发明涉及一种深度推荐方法,特别涉及一种改进的包含多重边信息与多任务学习的深度推荐方法。
背景技术:
目前,随着数字时代的发展,数据量呈爆炸式增长。从海量数据中提取有用信息已成为一个热门的研究课题。第一个推荐系统是由resnick在1997年提出的,根据用户的行为数据向用户推荐相应的项目或网页。推荐系统可以通过产品或用户画像来评估用户偏好,从而为用户推荐合适的产品。推荐算法是推荐系统的核心元素,推荐系统主要分为基于协同过滤(cf)的推荐系统、基于内容的推荐系统和混合推荐系统。然而,随着数据属性的改进,数据中的内容变得越来越详细,因此传统的推荐系统无法挖掘出数据之间更深层次的联系,比如新闻网站的点击率(ctr)模型。传统的推荐系统只能根据用户是否点击新闻、新闻何时发布、或者用户点击的新闻集合来进行协同过滤推荐。然而,这种方法并不能深刻地确定新闻站点的潜在内容。为了深入提取用户和物品的特征,许多研究者将其他技术集成到推荐系统中。到目前为止,表示学习方法和深度学习方法在推荐系统中已经比较成熟。表示学习指的是推荐系统中的数据向量化。数据主要包括序列、图等构造方法。序列构造将用户的历史行为数据(如点击数据、订阅数据等)构建成一个序列,然后通过跳跃模型和负采样技术进行学习;rnn模型是这一领域的典型代表。图形构造方法将用户行为形成图形结构。通过图的拓扑结构与行走算法的相互结合,利用随机游走算法得到序列。常用的行走算法有deepwalk算法、node2vec算法和line算法,然后可以通过skip-gram算法和负采样算法进行表示学习。近年来,在推荐系统中引入知识图(kg)作为侧信息引起了研究者的关注。kg是一种异构图,其中节点作为实体,边表示实体之间的关系。可以将项目及其属性映射到kg中,以理解项目之间的相互关系。此外,还可以将用户和用户端信息集成到kg中,从而更准确地捕捉用户和项目之间的关系以及用户偏好。
推荐系统中知识图特征学习的主要概念是挖掘知识图的信息,并将其作为推荐系统的训练项目。要构建推荐系统中的知识图关系,推荐数据中的项目属性和用户属性需要由知识图的三元组构造。但是,并不是所有的属性都适合用知识图谱表示,因为有些属性具有文本信息。如果将项目的文本内容属性直接嵌入到id中,那么文本内容的深层信息将是空的。此外,多值属性包含多种类型的属性值,也不适合用知识图表示。例如,电影有多个类型,电影与其类型之间的关系是一对一的。在知识图谱嵌入过程中,一个对多个或文本丰富的内容属性的潜在内容会丢失。因此,在训练过程中有必要对属性进行分类。在培训层次上,这意味着顺序培训和交替培训的结合。本发明将对mkr模型和dkn模型进行更深层次的研究,并基于这两种模型进行训练方法的融合,以最大限度地发挥知识图的信息功能。
技术实现要素:
本发明的主要目的是为了以最大限度地发挥知识图的信息功能而提供的一种改进的包含多重边信息与多任务学习的深度推荐方法。
本发明提供的改进的包含多重边信息与多任务学习的深度推荐方法,其方法如下所述:
步骤一、输入用户以及项目的相关数据以及知识图谱的三元组:
关于推荐系统主要包括用户集u以及项目集i,用户集合表示为:u={u1,u2.....un},项目集合表示为i={i1,i2.....im},用户项目交互集合表示为:y∈rm×n,其中有n个用户以及m个项目,当yuv∈y=1表示该用户u参与了项目v,反之该值为0表示用户u未参与过项目v,对于每个用户u假设具有n个特征值,也表示用户的上下文,从而表示用户,对于物品i∈i(i1,i2,i3…in),每个物品具有相同数量的属性特征,因此,项目的组合表示为i=[a1,a2,a3...ax],它表示i包含x属性的项,知识图谱g通常用三元组(h,r,t)进行表示,其中h∈e,r∈r,t∈e代表了h与t均属于实体集合,关系r属于关系集合,在结合知识图谱的推荐系统中,会给出用户项目的交互集合y以及知识图谱g,目标是求得用户u是否对未交互的项目v感兴趣,用公式表示则是:
步骤二、对项目属性以及用户属性进行分类:
在传统的mkr模型中,需要将这些属性和项转换为三元组来创建知识图,i1的属性项a1的属性值为a11,在知识图谱三元组中表示这个关系为:(i1,a1,a11),把物品属性设置分为三种类型根据项目属性的形式,即文本类型属性at,多值复合属性am和其他类型属性ae,属性集合a表示为a=at∪am∪ae;对于类型为at的属性,其值由包含多个单词的句子组成,文本属性具有实际意义,不同项目的文本属性值也通过文本的实际意义具有一定的相关性,am是一种多值类型的属性,即各种类型的子属性的组合,与文本属性类似,需要以知识表示的形式进行深度训练,获取嵌入信息,并将嵌入信息作为输入到推荐模块,其他项目属性ae则直接转换为知识图三元组,最终发送到si-mkr模型的知识图kge单元进行训练或转换为嵌入作为推荐系统单元的输入;
步骤三、处理文本类属性:
利用自然语言处理和文本卷积网络的概念提取文本数据特征,对于一个n×k大小的文本特征,每一行都是一个单词的特征向量,使用两个不同大小的卷积核:即滑动和固定,在该结构中,卷积核的大小被设为2或3或4或5,即,2×k,3×k,4×k,5×k,其中k为嵌入的长度,通过最大池来计算每个特征图的最大值,每个特征向量被连接成一个特征向量,最后在全连接层中使用dropout进行正则化,然后使用softmax层接收该特征向量作为输入,对句子进行分类并描述可能的输出状态,根据上述模型对计算过程进行如下描述:
将文本信息嵌入到一个矩阵中,假设总共有7个单词,其中每个单词都是一个五维向量,得到一个7×5的矩阵,这个矩阵相当于一个“图像”,用于卷积层的卷积操作,假设总共有m个单词,每个单词都可以转换成k维向量,单词列表可以表示为m×k:
其中xi∈rk是句子中的第i个单词的向量表示,对于一个长度为n的句子可以表示为:
其中
ci=f(w·xi:i q-1 b)(2)
其中w∈rqk为卷积核,b∈r为偏置项,f(·)为非线性函数,即激活函数,将该卷积核应用于句子中每一个可能的单词窗口可得到该层的特征c∈rn-q 1,具体如下所示:
c=[c1,c2,...,cn-q 1](3)
使用最大池化操作捕获最能体现价值的特征,
ti=cnn(w,yi)(4)
步骤四、处理多值属性:
对于多值类型属性和id这两类数据,采用索引矩阵和嵌入层对这些数据进行变换,属性y是一个多值类型属性,有m个属性值,将这些m个属性标为连续数的形式,嵌入矩阵以1-m的序列作为索引,对于某一项,属性表示为d维向量,itemi的属性y表示为:
步骤五、通过用户以及项目属性进行用户项目特征表示:
对于项目与用户而言,首先需要进行其属性的判定,包括其文本属性、多值属性以及其他属性,对于除去文本属性外的其他属性通过如下公式表示:
w1和w2代表权重,b1和b2代表偏置,f(·)代表激活函数,利用全连接层对属性的特征进行向量化,最终将用户和项目除文本属性外的向量嵌入表示为:
若需要加上文本类属性,则二者表示为:
步骤六、将项目属性与知识图谱的头属性进行交叉训练:
项目的特征向量以文本属性和多值类型属性作为边信息,生成项目的特征表示,然后将项目的特征传递到交叉单元和知识图单元的实体集进行交叉学习,si-mkr中推荐模块的输入由描述用户u和项目v的两个原始特征向量u和v组成,给定用户u的原始特征向量u,使用1层mlp来提取这个潜在的压缩特征,具体如下:
ul=m(m(…m(u)))=ml(u)(12)
其中m(x)=σ(wx b),中w为权值、b为偏置、σ(·)为非线性激活函数,对于项目表示为:
vl=ee~s(v)[cl(v,e)[v]](13)
其中,s(v)是项目v关联实体的集合,在获得用户u和项目v的潜在特征后,通过预测函数可以得到用户u参与项目v的最终预测概率;
在知识图谱单元,关于尾部t向量的预测公式如下所示:
hl=ev~s(h)[cl(v,h)[e]]
rl=ml(r)
这个单位是项目v和实体e之间的联系模块,对于v向量以及e向量,表示为一个矩阵如下:
将交叉特征矩阵投影到潜在表示空间中,输出下一层项目和实体的特征向量,具体如下:
步骤七、迭代更新用户向量、项目向量、知识图谱头部尾部向量:
通过以上步骤公式获得推荐模块以及知识图谱模块的预测公式如下:
关于推荐模块的点击概率公式如公式11所示,最终将预测点击公式表示为:
步骤八、损失函数学习:
损失函数分为三部分,分别是推荐模块的损失函数,kge模块的损失函数,防止过拟合的正则化项,具体如下:
对于推荐模块的损失函数表示为:
对于知识图谱模块的损失函数表示为:
对于总体的损失函数表示为:
通过以上的训练可以获取到user对item的潜在偏好,也就是预测矩阵。
本发明的有益效果:
本发明采用dkn模型与mkr模型作为基础模型,对知识图谱信息进行深度的挖掘,将项目属性进行分类,部分用于依次训练的方式,部分运用交替训练的方式,通过该方法更好的挖掘用户与项目的潜在信息。提出si-mkr,可以将传统mkr模型的三个模块进行创新,发展为四个模块,将不可构造成知识图谱三元组的属性进行提前处理,如文本属性需要使用文本cnn模型进行训练,多值属性需要将其进行one-hot编码,针对每个属性值进行初始化。
附图说明
图1为本发明所述方法整体运作流程示意图。
图2为本发明所述si-mkr模型架构示意图。
图3为本发明所述文本cnn模型架构示意图。
图4为本发明所述si-mkr模型架构中交叉压缩单元示意图。
具体实施方式
请参阅图1至图4所示:
在movielens数据集中,进行的操作全过程:
步骤一、将movielens-1m数据集进行初始化,由于movielens-1m包含显式反馈数据,我们将其数据转换为隐式反馈数据;每个条目标记为1表明,用户评价项目(movielens-1m评级为4的阈值),当用户对电影的评分大于等于4的时候,表示用户对电影是正向评价,当用户对电影的评价小于阈值时,则是一个负面评价。我们使用microsoftsatori为每个数据集构造知识图。对于movielens-1m,首先从整个kg中选择一个关系名称包含“movie”且置信度大于0.9的三元组子集。给定sub-kg,我们通过将所有有效电影的名称与三元组(head,film.movie.actor,tail)的尾部匹配来收集所有有效电影id。为简单起见,排除没有匹配实体或多个匹配实体的项目。然后,我们将id与所有kg三元组的头和尾进行匹配,从子kg中选择所有匹配良好的三元组,并迭代地扩展实体集,最多扩展到四跳。
步骤二、设置实验参数:在si-mkr中,我们将训练、验证和测试集的比率设置为6:2:2。每个实验重复3次,计算平均性能。时代的数量设置为n_epochs=20,λ2=10-8.lr_rs=2e-4,lr_kge=2e-5。对于文本cnn训练,filter_num=2dropout=0.5。
步骤三、电影id、名称等数据每一项内容之间的差异较大,直接对其进行编码会导致特征向量稀疏性增高并产生维度爆炸,使相似度计算失去意义。例如,除了同属于一系列的电影具有相似的名称之外,大部分电影名称之间的很少会出现相似的单词。对于一个较大规模的电影数据集,如果不同的单词占据特征向量的一位则会产生上千维度的电影名称对应的特征向量。为了解决这类问题,本文通过统计电影数据集建立数据字典,然后将每一部电影id、类型、名称等数据中每一个独立项转换为整型数字,组成固定长度的索引向量,通过查询数据字典初步得到对应嵌入矩阵,根据每一类数据的特性经过转换后连接生成嵌入层。
此外,为了规范数据格式,本文将嵌入矩阵的规格设置为(n,32),其中存储的就是相应的特征向量。对于电影id,由于其本身就是整型数据并且每一部电影只有一个id,所以n值即为电影总数量加一(多出的一位作为占位符);对于一个样本实例,通过在嵌入矩阵中查询其对应的特征向量可直接作为该样本的电影id特征,对应的格式为(1,32)。
电影类型与电影id不同,每个样本的类型并不是完全不同的,并且一部电影往往具有多个类型。在movielens_1m数据集中电影被划分为爱情、喜剧、战争等18个类型,也就是说在该数据集中一部电影理论上最多拥有18种类型,所以本文将电影类型对应的索引向量长度设置为19位,并使用数字1-19分别表示每一个类型。在生成样本类型嵌入层特征时,由于一部电影可查询到多条特征,即表示为(n,32),所以还需要将这些特征进行累加在记入嵌入层,这样对应的格式才为(1,32)。
同理,经统计可知在该数据集中电影名称最多具有5215个单词,所以本文将电影名称对应的嵌入矩阵格式为(5216,32)。不同的是,第一,虽然电影名称涉及到的单词总量很多,但是电影名称长度经统计最高为14个单词,在进行数据转换时只需要将电影名称转换为15(14 1)位由数字构成的索引向量就足够了。第二,本文还将针对电影名称使用自然语言处理的相关方法得到其文本特征,所以并不针对电影名称生成相应的嵌入层。
对于电影名称不足15位,或者电影类型不足19种的(实际上一定少于最大值),使用占位符补全索引向量。具体如表1和表2所示:
表1电影类型信息
表2处理后的电影信息
总的来说,本发明在推荐算法模型的第一层使用了嵌入矩阵并将以上数字序列作为嵌入矩阵的索引,嵌入矩阵的维度为(n,32),由于一个电影有多个电影类型,这样从嵌入矩阵索引出来是一个(n,32)的矩阵,将这个矩阵求和,变成(1,32)的向量,即为电影类型特征。由于本发明还将对电影标题做进一步处理,所以先将电影id与电影类型的特征连接在一起构成第一个全连接层,维度为(1,64)。
步骤四、训练项目以及文本中需要单独处理的属性,对于文本属性需要进行文本cnn模型的训练,获取最终的文本属性向量值,如对于电影名就需要这种训练方式。对于多值属性为每一个属性分配one-hot编码。
步骤五、以损失函数为迭代条件,将训练集中的点击预测概率与预测的尾部向量以及实际尾部向量之差作为最小化目标,继续训练。
步骤六、获取预测矩阵,即用户对项目的偏好矩阵。
步骤七、训练结束,进行auc以及acc的值的获取,以此判断模型的优劣。
1.一种改进的包含多重边信息与多任务学习的深度推荐方法,其特征在于:其方法如下所述:
步骤一、输入用户以及项目的相关数据以及知识图谱的三元组:
关于推荐系统主要包括用户集u以及项目集i,用户集合表示为:u={u1,u2.....un},项目集合表示为i={i1,i2.....im},用户项目交互集合表示为:y∈rm×n,其中有n个用户以及m个项目,当yuv∈y=1表示该用户u参与了项目v,反之该值为0表示用户u未参与过项目v,对于每个用户u假设具有n个特征值,也表示用户的上下文,从而表示用户,对于物品i∈i(i1,i2,i3…in),每个物品具有相同数量的属性特征,因此,项目的组合表示为i=[a1,a2,a3...ax],它表示i包含x属性的项,知识图谱g通常用三元组(h,r,t)进行表示,其中h∈e,r∈r,t∈e代表了h与t均属于实体集合,关系r属于关系集合,在结合知识图谱的推荐系统中,会给出用户项目的交互集合y以及知识图谱g,目标是求得用户u是否对未交互的项目v感兴趣,用公式表示则是:
步骤二、对项目属性以及用户属性进行分类:
在传统的mkr模型中,需要将这些属性和项转换为三元组来创建知识图,i1的属性项a1的属性值为a11,在知识图谱三元组中表示这个关系为:(i1,a1,a11),把物品属性设置分为三种类型根据项目属性的形式,即文本类型属性at,多值复合属性am和其他类型属性ae,属性集合a表示为a=at∪am∪ae;对于类型为at的属性,其值由包含多个单词的句子组成,文本属性具有实际意义,不同项目的文本属性值也通过文本的实际意义具有一定的相关性,am是一种多值类型的属性,即各种类型的子属性的组合,与文本属性类似,需要以知识表示的形式进行深度训练,获取嵌入信息,并将嵌入信息作为输入到推荐模块,其他项目属性ae则直接转换为知识图三元组,最终发送到si-mkr模型的知识图kge单元进行训练或转换为嵌入作为推荐系统单元的输入;
步骤三、处理文本类属性:
利用自然语言处理和文本卷积网络的概念提取文本数据特征,对于一个n×k大小的文本特征,每一行都是一个单词的特征向量,使用两个不同大小的卷积核:即滑动和固定,在该结构中,卷积核的大小被设为2或3或4或5,即,2×k,3×k,4×k,5×k,其中k为嵌入的长度,通过最大池来计算每个特征图的最大值,每个特征向量被连接成一个特征向量,最后在全连接层中使用dropout进行正则化,然后使用softmax层接收该特征向量作为输入,对句子进行分类并描述可能的输出状态,根据上述模型对计算过程进行如下描述:
将文本信息嵌入到一个矩阵中,假设总共有7个单词,其中每个单词都是一个五维向量,得到一个7×5的矩阵,这个矩阵相当于一个“图像”,用于卷积层的卷积操作,假设总共有m个单词,每个单词都可以转换成k维向量,单词列表可以表示为m×k:
其中xi∈rk是句子中的第i个单词的向量表示,对于一个长度为n的句子可以表示为:
其中
ci=f(w·xi:i q-1 b)(2)
其中w∈rqk为卷积核,b∈r为偏置项,f(·)为非线性函数,即激活函数,将该卷积核应用于句子中每一个可能的单词窗口可得到该层的特征c∈rn-q 1,具体如下所示:
c=[c1,c2,...,cn-q 1](3)
使用最大池化操作捕获最能体现价值的特征,
ti=cnn(w,yi)(4)
步骤四、处理多值属性:
对于多值类型属性和id这两类数据,采用索引矩阵和嵌入层对这些数据进行变换,属性y是一个多值类型属性,有m个属性值,将这些m个属性标为连续数的形式,嵌入矩阵以1-m的序列作为索引,对于某一项,属性表示为d维向量,itemi的属性y表示为:
步骤五、通过用户以及项目属性进行用户项目特征表示:
对于项目与用户而言,首先需要进行其属性的判定,包括其文本属性、多值属性以及其他属性,对于除去文本属性外的其他属性通过如下公式表示:
w1和w2代表权重,b1和b2代表偏置,f(·)代表激活函数,利用全连接层对属性的特征进行向量化,最终将用户和项目除文本属性外的向量嵌入表示为:
若需要加上文本类属性,则二者表示为:
步骤六、将项目属性与知识图谱的头属性进行交叉训练:
项目的特征向量以文本属性和多值类型属性作为边信息,生成项目的特征表示,然后将项目的特征传递到交叉单元和知识图单元的实体集进行交叉学习,si-mkr中推荐模块的输入由描述用户u和项目v的两个原始特征向量u和v组成,给定用户u的原始特征向量u,使用1层mlp来提取这个潜在的压缩特征,具体如下:
ul=m(m(…m(u)))=ml(u)(12)
其中m(x)=σ(wx b),中w为权值、b为偏置、σ(·)为非线性激活函数,对于项目表示为:
vl=ee~s(v)[cl(v,e)[v]](13)
其中,s(v)是项目v关联实体的集合,在获得用户u和项目v的潜在特征后,通过预测函数可以得到用户u参与项目v的最终预测概率;
在知识图谱单元,关于尾部t向量的预测公式如下所示:
hl=ev~s(h)[cl(v,h)[e]]
rl=ml(r)
这个单位是项目v和实体e之间的联系模块,对于v向量以及e向量,表示为一个矩阵如下:
将交叉特征矩阵投影到潜在表示空间中,输出下一层项目和实体的特征向量,具体如下:
步骤七、迭代更新用户向量、项目向量、知识图谱头部尾部向量:
通过以上步骤公式获得推荐模块以及知识图谱模块的预测公式如下:
关于推荐模块的点击概率公式如公式11所示,最终将预测点击公式表示为:
步骤八、损失函数学习:
损失函数分为三部分,分别是推荐模块的损失函数,kge模块的损失函数,防止过拟合的正则化项,具体如下:
对于推荐模块的损失函数表示为:
对于知识图谱模块的损失函数表示为:
对于总体的损失函数表示为:
通过以上的训练可以获取到user对item的潜在偏好,也就是预测矩阵。
技术总结