【论文阅读】Unifying Knowledge Graph Learning and Recommendation

Unifying Knowledge Graph Learning and Recommendation: Towards a Better Understanding of User Preferences

总体大纲如下图

【论文阅读】Unifying Knowledge Graph Learning and Recommendation

记录下:9月6号

组合两个模型: TransHTUP
TransH:考虑关系和实体的1对N,N对1,N对N的情况,实现kg的补全增强
TUP:包括偏好引入和超平面映射

  • 偏好归纳组件
    给定user-item对(u,i),组件从latent factors集合P中归纳出一种偏好。
    两种策略:
    Hard Strategy:假设当用户对项目做出决定时,只有一个偏好生效
    soft Strategy:注意力机制融合多个偏好
  • 超平面映射
    和TransH思想类似,user-item对看作h,t,用户对item的偏好看作r,用偏好p代替kg中的r.

【论文阅读】Unifying Knowledge Graph Learning and Recommendation
【论文阅读】Unifying Knowledge Graph Learning and Recommendation
【论文阅读】Unifying Knowledge Graph Learning and Recommendation

KTUP: 组合上面两个模型
同时提出加强item embedding,perference embedding

    i' = i + e;
    p' = p + r
    w_p' = w_p + w_r

然后进行超平面映射,得到新的打分函数

问题:知识图谱的补全增强体现在哪里?TransH算法进行知识图谱的补全

记录下:9月7号,学习TransH知识图谱补全
参考:
transH算法实现知识图谱补全实验

【论文阅读】Unifying Knowledge Graph Learning and Recommendation
TransH认为:TransE算法在处理自反关系,多对一,一对多,多对多关系时,会使不同的实体拥有相同的嵌入(h+r=t,h+r=t’=>t=t’)
提出了超平面,将头实体和尾实体映射到同一个超平面上,dr是两者在超平面上的平移

知识图谱补全:链接预测
通过TransH建模后,得到了每个实体和关系的嵌入向量,利用嵌入向量,可以进行知识图谱的链接预测
将三元组(head,relation,tail)记为(h,r,t)

链接预测分为三类:
头实体预测:(?,r,t)
关系预测:(h,?,t)
尾实体预测:(h,r,?)
但原理很简单,利用向量的可加性即可实现。以(h,r,?)的预测为例:

假设t’=h+r,则在所有的实体中选择与t’距离最近的向量,即为t的的预测值

问题:w p ′ w_p’w p ′​ 怎么获得

【论文阅读】Unifying Knowledge Graph Learning and Recommendation

jTransUP.py perference归纳代码


def getPreferences(self, u_e, i_e, use_st_gumbel=False):

    pre_probs = torch.matmul(u_e + i_e, torch.t(self.pref_embeddings.weight + self.rel_embeddings.weight)) / 2
    if use_st_gumbel:

        pre_probs = self.st_gumbel_softmax(pre_probs)

    r_e = torch.matmul(pre_probs, self.pref_embeddings.weight + self.rel_embeddings.weight) / 2

    norm = torch.matmul(pre_probs, self.pref_norm_embeddings.weight + self.norm_embeddings.weight) / 2

    return pre_probs, r_e, norm

pref_norm_embeddings的初始化

pref_norm_weight = torch.FloatTensor(self.rel_total, self.embedding_size)
nn.init.xavier_uniform(pref_norm_weight)
self.pref_norm_embeddings = nn.Embedding(self.rel_total, self.embedding_size)
self.pref_norm_embeddings.weight = nn.Parameter(pref_norm_weight)
normalize_pref_norm_emb = F.normalize(self.pref_norm_embeddings.weight.data, p=2, dim=1)
self.pref_norm_embeddings.weight.data = normalize_pref_norm_emb

根据norm超平面映射

_, r_e, norm = self.getPreferences(u_e, ie_e, use_st_gumbel=self.use_st_gumbel)

proj_u_e = projection_transH_pytorch(u_e, norm)
proj_i_e = projection_transH_pytorch(ie_e, norm)

def projection_transH_pytorch(original, norm):
    return original - torch.sum(original * norm, dim=len(original.size())-1, keepdim=True) * norm

Original: https://blog.csdn.net/qq_44960910/article/details/126767966
Author: 上串下跳
Title: 【论文阅读】Unifying Knowledge Graph Learning and Recommendation

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/557446/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球