您好,欢迎光临本网站![请登录][注册会员]  
文件名称: 结合知识图谱实现基于电影的推荐系统.pdf
  所属分类: 机器学习
  开发工具:
  文件大小: 847kb
  下载次数: 0
  上传时间: 2019-09-02
  提 供 者: zjxau*****
 详细说明:在推荐算法中融入电影的知识图谱,能够将没有任何历史数据的新电影精准地推荐给目标用户。交叉特征矩阵 Cr 交叉单元 第层 el 7交叉压缩单元模型的结构 交叉压缩单元模型的具体处理过程如下 (1)将与进行矩阵相乘得到。 (2)将复制一份,并讲行转置得到。实现特征交叉融合 (3)将经过权重矩阵进行线性变化(与矩阵相乘) (4)将经过权重矩阵进行线性变化。 (5)将(3)与(4)的结果相加,再与偏置参数相加,得到。将用于推荐算法模型的后续计算。 (6)按照第(3)、(4)、(5)步的做法,同理可以得到。将用于知识图谱词嵌入模型的后续计 算。 用 tf layer接口实现交叉压缩单元模型,具体代码如下。 代码7-14MKR import numpy as rp import tensorflow as tf From sklearn metrics import roc auc score class Cross sUnit(base, Layer) #定义交叉压缩单元模型类 def init (self, dim, name=None): 1千 c1千,dim=dim 1f. f layers. Dense(1,use_bias= False)#构建权重矩阵 self fev= tf layers, Dense (1, use bias False) sclf f ve tf layers. Dense (1, use bias Falsc) lf f ee self bias v= self, add weight(name=bias v', #构建偏置杈重 shape=dim initializertf zeros initializer() 林v和e的形状为[ batch size,din] 的形状为 e=tf, expand dims(e,dim-1)#e的形状为[ batch size,1,dim trix tf matmul 的形状为 c matrix transpose =tf transpose (c matrix, perm=[0, 2, 11) C_ matrix的形状为 Batch_ size y dim,dim] c matrix= tf reshape(c matrix, [-1, self. dim]) matrix transpose tf reshape(c matrix transpose,[-1, self. dim]) v output的形状为[ batch size,dim ff vv(c matrix)+ self. f ev(c_ ) self bias put- tt, reshape( self. f ve(c matrix)+ self. f ee(c matrix transpose) 返回结果 tput, e output 代码第10行,用 tf layers. Dense方法定义了不带偏置的全连接层,并在代码第34行,将该全连接层 作用于交叉后的特征向量,实现压缩的过程。 2将交叉压缩单元模型集成到MKR框架中 在MKR框架中,推荐算法模型和知识图谱词嵌λ模型的处珒流程几乎样。可以进行同步处理。在 实现时,将整个处理过程横向拆开,分为低层和高层两部分。 低层:将所有的输入映射成词嵌入向量,将需要融合的向量(图6中的v和h)输入交叉压缩单元, 不需要融合的向量(图6中的u和r)进行同步的全连接层处理。 高层:推荐算法模型和知识图谱词嵌入模型分别将低层的传上来的特征连接在一起,通过全连接 层回归到各自的目标结果 具体实现的代码如下 代码714MKR(续 class NKR(object) def init(self, args, n_users, n items, n_entities, n relations) self. parse args(n users, n items, n entities, n relations) self. build inputs() se1f. build1ow1 ayers(args)#构建低层模型 self. build high_ layers(angs)#构建高层模型 build loss(args) build train(args) def parse args(self, n users, n items, n entities, n relations se⊥f, n item= n items self.n entity=n entities self. n relation n relations 收集训练参数,用于计算12横失 self vars_rs =[] self vars kge =[ def build inputs(self): self. user indices=tf placeholder(tf int32, [None],user Ind') self item indices=tf placeholder(tf int 32, [None],'itenInd) selflabels- tt placeholder (tf float32, None], ' labels') self. head indices -tf placeholder(tf int32, [None], 'headInd') lder(tf int32, [None] 11 dices’) self relation indices-tf placeholder(tf int32, [None,'relInd') def build model(self, args) self. build low layers(args) lf. build high def build low_layers(self, args) 生成词嵌入向量 self. user emb matrix= tf.get variable('user emb matrix [seltn_user, args, dim]) selfitem emb matrix- tf. get variable('item emb matrix elf. n ite selfentity emb matrix- tf. get variable(' entity emb matrix'j [selfn-entity, args, dim]) self relation emb matrix tfget variable( 'relation emb matrix [self.n relation, args. dim]) #获取指定输入对应的词嵌入向量,形状为[ batch s1ze,d1m ngs In elf. user_emb matrix, self. user indices) beddings tfrn. embedding lookup( self item emb matrix, self, item indices) self. head embeddings tfnn. embedding lookup( self, entity emb matrix, self. head indices self relation_ embeddings =tf. nn. embedding lookup( self relation emb matrix, self relation indices) self. tail embeddings tf rn. embedding lookup self entity emb matrix, self. tail indices) for_ in range(args.L):#孩指定参数构建多层MR结构 #定义全连接层 user mlp= tf layers. Dcnsc(args. dim, activation=tfnn. rclu) tail mlp tf layers. Dense(args. dim, activation=tf. nn. relu) cc undt= CrosscompressUnit(args.dm)#定义 Crosscompress单元 实现MKR结构的止向处理 lf user embedd user mlp(self. user _ embeddings self item embeddings, self. head embeddings cc unit( [self. it 收集训练参数 self vars rs extend(user mlp variables) extend(tail m1 self vars kge, extend(c unit variables dcf build high layers(self, args): 推荐算法模型 use inner_ product= True 指定相似度分数计算的方式 if usc inner product 内积方式 #se1f, scores的形状为 batch_size lf scores= tf reduce sum( self.user embeddings self item embeddings else #Se1f.user_ item concat的形状为[ batch size,dim*2 self.user item concat tf concat( [self. user embeddings, self item embeddings], axis=1) for in range(args.H-1) rs mlp- tf layers. Dense(args. dim 2, activation-tf, nn relu) #5e1f, user item concat的形状为[ batch size,dm*2 self. user item concat =rs_ mlp(self user-item concat) sclf vars rs, extend(rs mlp variables) 定义连接层 rs pred mlp =tf layers. Dense(l, activation=tfnn, relu) #sc1f, scores的形状为 batch sizc self. scores tf squeeze(rs pred mlp(self. user item concat)) self. vars_rs, extend(rs_ pred m1p. variables)#收集参数 self scores normalized= tf. nn. sigmoid (self scores) #知识图谱词嵌入模型 self, head relation concat=tf. concat(#形状为[ batch size,din*2] [self. head embedd self relation embeddings], axis=1) kge mlp= tf layers. Dense args. dim *2, activation=tf. nn. relu) #se1f. head relation concat的形状为[ batch size,dim*2] self. head rclation concat = kge mlp(sclf head rclation concat) elf vars kge extend(kge_mlp variables kgc pred mlp tf layers, Dense(args. dim, activation=tfnn. rclu) #self.tai1_pred的形状为[ batch_size, args. dim self. tail pred = kge_pred mIp(self. head relation concat If vars kge, extend ( kge pred ml elf. tail pred tfnn sigmoid(self. tail pred) self scores kge= tf. nn. sigmoid(tf reduce sum( self. tail embeddings *k self. tai self rmse tfreduce mean( tt, sort(tf reduce sum(tt square(self. tail embeddings self tail pred),a 代码第115~132行是推荐算法模型的高层处理部分,该部分有两种处理方式: 使用内积的方式,计算用户向量和电影向量的相似度。有关相似度的更多知识,可以参考 8.1.10小节的注意力机制。 ·将用户向量和电影向量连接起来,再通过全连接层处理计算出用户对电影的喜好分值。 代码第132行,通过激活函数 sigmoid对分值结果 scores进行非线性变化,将模型的最终结果映射到 标签的值域中 代码第136~152行是知识图谱词嵌入模型的高层处理部分。具体步骤如下 (1)将电影向量和知识图谱中的关系向量连接起来 (2)将第(1)步的结果通过全连接层处理,得到知识图谱三元组中的目标实体向量 (3)将生成的目标实休向量与真实的目标实体向量矩阵相乘,得到相似度分值。 (4)对第(3)步的结果进行激活函数 sigmoid计算,将值域映射到0~1中, 3实现MKR框架的反向结构 MKR框架的反向结构主要是lss值的计算,其oss值共分为3部分:推荐算法模型模型的loss值、 知识图谱词嵌入模型的loss偵和参数杈重的正则项。具体实现的代码如下。 代码714MKR(续) def build loss(self, args) 计算推荐算法模型的10s5佶 self base loss rs= tf reduce mean( tf, nn, sigmoid cross entropy with logits(labels=self labels, logits=selfs self.12_loss rs= tf nn. 12 loss(self.user embeddings)+ tf nn. 12_ loss (self. i for var in self vars rs self. 12 loss rs + tf rn. 12 loss(var) self loss rs self base loss rs self 12 loss rs args 12 weight #计算知识图谱词嵌入模型的10s5值 selfbase lass kge =-self scores kge sclf. 12 loss kgc -tf. nn. 12 loss(sclf head embeddings )t tf nn.12 loss(sclf. for var in self.vars_kge:#计算L2正则 self. 12 loss kge + tfnn. 12 loss(var self loss kge self, base loss kge self 12 loss kge args 12 weight def bui1 d train(se1f,args):#定义伊化器 self optimizer rs = tf train. AdamOptimizer(args.Ir rs), minimize(self. loss rs) def train rs(self, sess, feed dict) 训练摧荐算法模 1, feed dict) def train kge (self, sess, feed dict ): #训练知识图谱词嵌入模型 return sess. run([ self optimizer kge, self rmse], feed_dict) #评仁模型 labels, scores= sess. run(self labels, self. scores normalized], feed dict) auc roc auc score(y true=labels,y score=scores predictions = [1 if i >=0.5 else 0 for i in scores] acc= np. mean(np. equal(predictions, labels )) def get scores(self, sess, feed dict) return sess. run(Iselfitem indices, self. scores normalized feed dict 代码第173、176行,分别是训练推荐算法模型和训练知识图谱词嵌入模型的方法。因为在训练的过 程中,两个子模型需要交替的进行独立训练,所以将其分开定乂。 四、训练模型并输岀结果 训练模型的代码在本书配套的7-15 train.py"文件中,读者可以自行参考。代码运行后输出以下结 果 epoch train auc: 0.9540 acc: 0. 8817 eval auc: 0.9158 acc: 0.8407 test auc: e 在输出的结果中,分别显示了模型在训陈、评估、测试坏境下的分值。 原文发布于微信公众号·相约机器人( XIangyuejiqlren) 原文发表时间:201948-19 本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。 发表于6天前 识图谱文件存储编程算法)(推荐系练 相约机器人 订阅专栏 225篇文章27人订阅 Githu现在已支持函数定义跳转,妈妈再也不怕我记性差了 150万条语音的情感分听 8倍提表现:谷歌算法,从多人对活里分清准在发言,错误率降到2% 26秒单GP训练cFAR10, Jeff Dean点资的深度学习优化技巧 解读计算机视觉的深度学习模型 我来说两句 0条评论 写下你的评论 上一篇:GiH山现在已支持函数定义跳转,妈妈再也不怕我记性差了 下一篇:26秒单GPL训练CFAR10, Jeff Dean也点赞的深度学习优化技巧 社区 活动 资源 关于 专栏文章 原创分亨计划 在线学习中心 社区规范 回 自媒体分享计 技术周刊 免责声明 技术沙龙 社区标签 联系我们 技术快讯 开发者实验室 团队主页 扫码关注云+社区 开发者手册 领取腾讦云代金券 Copyright 2013-2019 Tencen: Cloud. All Rights Reserved 腾讯云版权所有京cP备11018762号 京公网安备11010802020287
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 输入关键字,在本站1000多万海量源码库中尽情搜索: