当知识图谱遇上推荐系统之MKR模型(论文笔记三)

Multi-Task Feature Learning for Knowledge Graph Enhanced Recommendation

类别:交替学习

将知识图谱特征学习和推荐算法视为两个分离但又相关的任务,使用多任务学习的框架进行交替学习。
在这里插入图片描述

1、背景

MKR是一个通用的、端对端的深度推荐框架,旨在利用知识图谱嵌入(KGE)去协助推荐任务。两个任务是相互独立的,但是由于RS中的item和KG中的entity相互联系而高度相关。整个框架可以通过交替优化两个任务来被训练,赋予了MKR在真实推荐场景中高度的灵活性和适应性。

2、问题制定

M个用户的集合 U = { u1 ,u2 ,…,uM }
N个项的集合 V = { v1 ,v2 ,…,vN }
用户-项交互矩阵 Y ∈ RM*N , yuv = 1 表示用户u参与过项v,yuv = 0 表示用户u没有参与过项v
知识图谱 G = { (h, r, t) | h, t ∈ E , r ∈ R}
Note:在许多推荐场景中,项 v ∈ V 可能和一个或多个G中的 entity相关

问题描述:给定用户-项交互矩阵Y和知识图谱G,我们要预测的是,用户 u 是否会对之前没有交互过的项v感兴趣 。
预测函数:yˆuv =F(u,v|Θ,Y,G)

3、模型框架

MKR由三个主要部分组成:推荐模块、KGE模块、交叉压缩单元。
左侧的推荐模块:将一个user和item作为输入,使用多层感知器(MLP)和交叉压缩单元分别提取user和item的特征,提取出的特征再一起送入另一个多层感知器,输入预测可能性。
右侧的KGE模块:将一个head和relation作为输入,使用多层感知器(MLP)和交叉压缩单元分别提取head和relation的特征,使用head和relation计算出预测tail的表示,然后使用函数f计算预测tail和实际tail的相似度,作为KGE链路预测的能力分数。
中间的交叉压缩单元:是将推荐模块和KGE模块连接起来的关键,这个单元可以自动的学习RS中item和KG中entity的高阶交互特征。
在这里插入图片描述

3.1 交叉压缩单元 Cross&compress Unit

交叉特征共享单元是一个可以让两个任务交换信息的模块。由于物品向量和实体向量实际上是对同一个对象的两种描述,他们之间的信息交叉共享可以让两者都获得来自对方的额外信息,从而弥补了自身的信息稀疏性的不足,其结构如下:
在这里插入图片描述

  1. cross operation:构造vl ∈ Rd和el ∈ Rd的 d*d 的 pairwise interaction
    在这里插入图片描述
  2. compress operation:wl ∈ Rd和 bl ∈ Rd 是训练权重和偏差向量,权重向量将交叉特征矩阵从Rd*d压缩为Rd
    在这里插入图片描述
    为了简洁,将交叉压缩压缩单元如下表示:
    在这里插入图片描述

3.2 推荐模块 Recommendation Modul

向量uv分别表示用户u和项v,uv可以基于应用场景用one-hot ID, attributes, bag-of-words,或者他们的结合来刻画。

  1. 给定用户u的原始特征向量u,使用L层的多层感知器MLP提取用户的潜在浓缩的特征:
    在这里插入图片描述
    其中M是全连接神经网络层:
    在这里插入图片描述
  2. 对于项 v 使用 L 个交叉压缩单元提取他的特征(其中S(v)是与项v相关的实体):
    在这里插入图片描述
  3. 推荐系统模块是点击率预估模型:得到user特征向量和item特征向量后,通过向量内积或MLP可计算用户u参与项v的可能性:
    在这里插入图片描述

3.3 知识图谱表示模块 KGE Modul

KGE是将entity和relation映射到连续的低维向量空间同时保留他们原来的空间结构。
KGE模型有:distance-based translational method 、semantic-based matching method
作者提出的:deep semantic matching architecture

  1. 对于给定的知识三元组(h, r, t),利用交叉压缩单元和多层感知器分别从原始的head h 和 relation r 提取特征。将head和relation对应的向量进行拼接,经过多层神经网络,得到一个tail对应向量的预估值 t^ (其中S(h)是和实体h的关联项合集):
    在这里插入图片描述
  2. 知识图谱特征学习模块希望预测得到的tail向量和真实的tail向量相近:最后三元组(h,r,t)的分数由相似度函数fKG计算得到,fKG函数可以是t和t^的内积之后取sigmoid:
    在这里插入图片描述

3.5 学习算法 Learning Algorithm

完整的损失函数如下:

第一项测量的是推荐模块的交叉熵损失,其中u和v便利users和items集合。
第二项测量的是KGE模块的损失,旨在增加增加正确三元组的得分,减少错误三元组的得分。
第三项是正则项,防止过拟合。
lambda1 和 lambda2 是平衡常数。
在这里插入图片描述

学习算法如下:

在每次的训练迭代中包含两个阶段:推荐任务和KGE任务
在每次的迭代中我们先重复训练推荐任务 t 次,再训练KGE任务1次,因为我们更加关注提升推荐的性能。
在这里插入图片描述

4、理论分析

4.1 多项式逼近 Polynomial Approximation

在一定平滑假设下任何函数可以被多项式逼近到任意精度。因此,我们研究交叉压缩单元的高阶交互近似能力。证明交叉压缩单元可以模拟item-entity特征交互的阶数到指数级。
在这里插入图片描述
理论1的证明:
在这里插入图片描述

4.2 因子分解机 Factorization machines

在这里插入图片描述

4.3 深度交叉网络 Deep&Cross Network

在这里插入图片描述

  1. Embedding and Stacking Layer
    考虑到具有离散连续特征的输入数据
    embedding
    对于离散的特性,比如:类别,通常使用one-hot编码,但会导致维度过高,所以用Embedding来大大的降低输入的维度。 Embedding操作其实就是用一个矩阵和one-hot之后的向量相乘,这个Embedding矩阵跟网络中的其他参数是一样的,是需要随着网络一起学习的。
    在这里插入图片描述stacking
    处理完离散型特征后,将其与连续性特征堆叠在一起作为输入数据。
    在这里插入图片描述
  2. Cross Network
    交叉网络的核心思想是以有效的方式应用显式特征交叉。交叉网络由交叉层组成,每个层具有以下公式:
    在这里插入图片描述
    针对一个交叉层可视化如下:
    在这里插入图片描述
    可以看到,交叉网络的特殊结构使交叉特征的程度随着层深度的增加而增大。多项式的最高程度(就输入X0而言)为L层交叉网络L + 1。如果用Lc表示交叉层数,d表示输入维度。然后,参数的数量参与跨网络参数为:d * Lc * 2 (w和b)。
    正是因为cross network的参数比较少导致它的表达能力受限,为了能够学习高度非线性的组合特征,DCN并行的引入了Deep Network。
  3. Deep Network
    深度网络就是一个全连接的前馈神经网络,每个深度层具有如下公式:
    在这里插入图片描述
  4. Combination Layer
    链接层将两个并行网络的输出连接起来,经过一层全链接层得到输出:
    在这里插入图片描述
联系如下:

在这里插入图片描述

4.4 十字绣网络 Cross-stitch Networks

在这里插入图片描述

5、MKR模型tensorflow实现

参考代码地址为:https://github.com/hwwang55/MKR

  • 10
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
MKR知识图谱电影推荐代码详解 MKR(Multi-task Knowledge-aware Recommender)是一种在知识图谱上基于多任务学习的推荐模型。它可以同时处理多个任务,如推荐、评分预测、属性预测等。本文将介绍如何使用MKR模型实现电影推荐,并详细解释代码实现。 1. 数据集 我们使用的数据集是MovieLens 20M,包含6,040部电影、27,000个用户和20,000,263个评分。其中,每个用户至少对20部电影进行了评分。我们将数据集分为训练集、验证集和测试集。 2. 知识图谱 我们使用的知识图谱是Freebase,它包含了大量实体和关系,如电影、演员、导演、类型、国家等。我们将知识图谱表示为元组 (head, relation, tail),其中head和tail是实体,relation是它们之间的关系。 3. 模型架构 MKR模型主要由两个部分组成:知识图谱嵌入和推荐模型知识图谱嵌入用于将实体和关系映射到低维向量空间中,推荐模型用于根据用户历史行为和知识图谱信息预测用户对电影的评分。 3.1 知识图谱嵌入 我们使用TransE算法将知识图谱中的实体和关系嵌入到低维向量空间中。具体地,对于一个元组 (h, r, t),它的嵌入向量e(h), e(r), e(t)应该满足以下条件: e(h) + e(r) ≈ e(t) 其中,+表示向量相加,≈表示近似等于。我们使用L1范数作为距离函数,即: d(e(h) + e(r), e(t)) = ||e(h) + e(r) - e(t)||1 通过最小化距离函数的损失函数,我们可以学习到每个实体和关系的嵌入向量。 3.2 推荐模型 我们使用NeuMF模型作为推荐模型。它由两个部分组成:基于用户的协同过滤和基于知识图谱的推荐。具体地,对于一个用户u和电影i,我们定义它们的隐向量为u和i,它们的预测评分为: $\hat{y}_{ui} = \sigma(\alpha_1 \cdot g_u^T \cdot g_i + \alpha_2 \cdot h_u^T \cdot e_i + b)$ 其中,g_u和g_i是基于用户的协同过滤的隐向量,h_u是基于知识图谱的隐向量,e_i是电影i的知识图谱嵌入向量,α1和α2是超参数,σ(x) = 1 / (1 + exp(-x))是sigmoid函数,b是偏置项。 整个模型的损失函数由均方误差和正则化项组成: $L = \sum_{(u,i,r) \in R} (r - \hat{y}_{ui})^2 + \lambda (\sum_{u} ||g_u||^2 + \sum_{i} ||g_i||^2 + \sum_{u} ||h_u||^2 + \sum_{i} ||e_i||^2)$ 其中,R是训练集,λ是正则化系数。 4. 代码实现 我们使用PyTorch实现MKR模型。代码主要分为以下部分: 4.1 数据预处理 我们首先将数据集分为训练集、验证集和测试集,并将它们保存为Pickle文件。然后,我们将知识图谱中的实体和关系表示为数字,并将它们保存到Pickle文件中。最后,我们使用PyTorch的Dataset和DataLoader类加载数据。 4.2 模型定义 我们使用PyTorch的Module类定义MKR模型。它由TransE和NeuMF两个子模型组成。我们可以使用预训练的TransE模型或从头开始训练。对于NeuMF模型,我们使用PyTorch的Sequential类定义它。 4.3 训练和测试 我们使用PyTorch的Adam优化器训练模型,并使用均方误差作为损失函数。我们还使用PyTorch的EarlyStopping类实现早期停止,以防止过拟合。在测试阶段,我们使用模型预测用户对电影的评分,并计算均方根误差和平均绝对误差。 完整的代码可以在GitHub上找到:https://github.com/hwwang55/MKR。 5. 总结 MKR是一种在知识图谱上基于多任务学习的推荐模型,它可以同时处理多个任务,如推荐、评分预测、属性预测等。本文介绍了如何使用MKR模型实现电影推荐,并详细解释了代码实现。如果您对MKR模型感兴趣,可以参考相关论文和代码。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值