【知识图谱系列】基于Randomly Perturb的图谱预训练模型GraphCL


作者:CHEONG

公众号:AI机器学习与知识图谱

研究方向:自然语言处理与知识图谱


本文介绍基于Randomly Perturb互信息最大化的图谱预训练模型GraphCL(NIPS 2020),介绍模型核心点和模型思路,完整汇报ppt获取请关注公众号回复关键字:GraphCL



一、背景知识


图谱预训练作用:图神经网络(GNNs)已被证明是建模图结构数据的强大工具。然而,训练GNN模型通常需要大量的特定任务的标记数据,而获取这些数据往往非常昂贵。利用自监督GNN模型对未标记图谱数据进行预训练是减少标记工作的一种有效方法,然后将预训练学习到的模型可用在只有少量标签图谱数据的下游任务。

大规模图谱预训练: 大规模知识图谱预训练方案都需要遵守以下几个套路:首先需要进行子图采样,使用子图进行模型训练;其次采用自监督学习模式,Mask图中的节点或边然后进行训练;计算Loss时需要进行负采样,图规模大无法基于全部负样例。

对比学习 VS 生成式学习:请参考上一篇有详细解释,【知识图谱系列】清华大学基于对比学习的图谱预训练模型



二、GraphCL模型


GraphCL是一个基于对比学习的自监督图谱预训练模型,GraphCL模型对一个节点得到两个随机扰动的L-hop的Subgraph,通过最大化两个Subgraph之间的相似度来进行自监督学习。关注以下三个问题。

问题1: A Stochastic Perturbation,如何获得一个节点两个L-Hop的子图?对个一个节点完整的L-Hop Subgraph,本文通过以概率p随机丢边的方式来生成不同的子图结构。

问题2: A GNN based Encoder,使用何种图神经网络对两个L-Hop Subgraph进行表征?简单的GCN模型(Hamiltonet al. 2017),汇聚函数使用mean-pooling propagation rule,但对于Transductive和Inductive Learning会不一样。Transductive Learning时汇聚公式如下:

图片

Inductive Learning时汇聚公式如下:

图片

问题3: A Contrastive Loss Function,损失函数如何定义?首先对两个L-Hop Subgraph相似度计算使用的是余弦相似度,损失函数是Based on a normalized temperature-scaled cross entropy,如下公式所示,其中1_([u≠v])指标函数表示当u≠v时为1,反之为0,τ是一个temperature parameter。

图片
在这里插入图片描述

在这里插入图片描述



三、GraphCL模型运行步骤


对一个采样的Mini-BatchB,GraphCL模型执行步骤如下所示:
1、对于B中的节点u,定义(X_u,A_u)是节点u的L跳子图,包含从u到L跳内所有节点和边及其对应的特征信息;

2、按照之前介绍的扰动策略得到节点u的两个扰动的L-Hop子图t_1,t_2,如下公示所示:

图片

3、使用GraphEncoder f在t_1,t_2上,如下公式所示:

图片

4、使用如下的Loss Function来训练更新Graph Encoder f的模型参数

图片

5、GraphCL模型结构图如下所示:

图片



三、结论


结论:在Transductive Learning和Inductive Learning两个方面,都证明GraphCL模型在许多节点分类基准上显著优于最先进的无监督学习。

图片

在这里插入图片描述

图片



四、往期精彩


【知识图谱系列】Over-Smoothing 2020综述

【知识图谱系列】基于生成式的知识图谱预训练模型

【知识图谱系列】基于2D卷积的知识图谱嵌入

【知识图谱系列】基于实数或复数空间的知识图谱嵌入

【知识图谱系列】自适应深度和广度图神经网络模型

【知识图谱系列】知识图谱多跳推理之强化学习

【知识图谱系列】知识图谱的神经符号逻辑推理

【知识图谱系列】动态时序知识图谱EvolveGCN

【知识图谱系列】多关系神经网络CompGCN

【知识图谱系列】探索DeepGNN中Over-Smoothing问题

【知识图谱系列】知识图谱表示学习综述 | 近30篇优秀论文串讲

【知识图谱系列】动态知识图谱表示学习综述 | 十篇优秀论文导读

【面经系列】八位硕博大佬的字节之旅

【机器学习系列】机器学习中的两大学派

各大AI研究院共35场NLP算法岗面经奉上

干货 | Attention注意力机制超全综述

干货 | NLP中的十个预训练模型

干货|一文弄懂机器学习中偏差和方差

FastText原理和文本分类实战,看这一篇就够了

Transformer模型细节理解及Tensorflow实现

GPT,GPT2,Bert,Transformer-XL,XLNet论文阅读速递

机器学习算法篇:最大似然估计证明最小二乘法合理性

Word2vec, Fasttext, Glove, Elmo, Bert, Flair训练词向量教程+数据+源码


汇报完整版ppt可通过关注公众号后回复关键词:GraphCL 来获得,有用就点个赞呗

### 基于张量分解的时序知识图谱补全方法 #### 方法概述 时序知识图谱补全是通过预测缺失的关系三元组来扩展现有的动态知识图谱。这种方法通常依赖于静态或时序的知识图嵌入模型以及张量分解技术。张量分解是一种强大的工具,能够捕捉多维数据中的复杂关系并将其降维到更易于处理的形式。 在时序场景下,张量分解被用来建模随时间变化的关系模式[^3]。具体来说,给定一个三维张量 \( \mathcal{X} \in \mathbb{R}^{I \times J \times K} \),其维度分别对应实体、关系和时间戳,目标是对该张量进行低秩近似以提取潜在特征向量。这些特征向量随后用于估计未知条目的概率分布。 #### 静态与时序知识图嵌入模型对比 对于时序知识图谱补全任务而言,存在两类主要的方法: 1. **Static Knowledge Graph Embedding (KGE)** 模型仅考虑固定的时间点上的结构化信息,例如 TransE 和 DistMult[^4]。这类模型无法直接应用于具有时间属性的数据集。 2. **Temporal Knowledge Graph Embedding (TKGE)** 模型则显式引入时间作为额外输入变量之一,从而支持对历史趋势的学习与未来事件的推断。常见的 TKGE 模型包括 TTransE、HyTE 及 TeRo 等。 #### 实现细节 以下是基于 CP 分解(CANDECOMP/PARAFAC Decomposition)的一个典型实现框架: ```python import numpy as np from scipy.optimize import minimize def cp_decomposition(tensor, rank): """ Perform CANDECOMP/PARAFAC decomposition of a tensor. Args: tensor (np.ndarray): Input tensor with shape (I, J, K). rank (int): Rank of the approximation. Returns: tuple: Factor matrices A, B, C corresponding to modes entities, relations, timestamps respectively. """ I, J, K = tensor.shape # Initialize factor matrices randomly A = np.random.rand(I, rank) B = np.random.rand(J, rank) C = np.random.rand(K, rank) def loss(factors): nonlocal A, B, C A_new, B_new, C_new = factors[:rank*I].reshape((I, rank)), \ factors[rank*I:rank*(I+J)].reshape((J, rank)), \ factors[rank*(I+J):].reshape((K, rank)) reconstructed_tensor = np.einsum('ir,jr,kr->ijk', A_new, B_new, C_new) error = np.linalg.norm(reconstructed_tensor - tensor) return error initial_guess = np.concatenate([A.flatten(), B.flatten(), C.flatten()]) result = minimize(loss, initial_guess, method='L-BFGS-B') optimized_factors = result.x A_optimized = optimized_factors[:rank * I].reshape((I, rank)) B_optimized = optimized_factors[rank * I : rank * (I + J)].reshape((J, rank)) C_optimized = optimized_factors[rank * (I + J):].reshape((K, rank)) return A_optimized, B_optimized, C_optimized # Example usage if __name__ == "__main__": # Create synthetic data np.random.seed(0) I, J, K = 5, 4, 3 true_A = np.random.rand(I, 2) true_B = np.random.rand(J, 2) true_C = np.random.rand(K, 2) true_tensor = np.einsum('ir,jr,kr->ijk', true_A, true_B, true_C) # Add noise noisy_tensor = true_tensor + 0.1 * np.random.randn(*true_tensor.shape) # Apply CP decomposition estimated_A, estimated_B, estimated_C = cp_decomposition(noisy_tensor, rank=2) print("Estimated Factors:") print("Entity Matrix:\n", estimated_A) print("Relation Matrix:\n", estimated_B) print("Timestamp Matrix:\n", estimated_C) ``` 上述代码展示了如何利用优化算法求解 CP 分解问题,并从中获得三个因子矩阵——分别对应实体、关系及时刻的信息。此过程有助于构建紧凑而有效的表示形式以便后续分析或推理操作。 #### 进一步讨论 尽管 CP 分解提供了一种简洁的方式来表达高阶关联性,但它可能不足以应对某些复杂的现实世界应用需求。因此,在实际部署过程中还需要探索其他高级变体比如 Tucker 分解或者非负矩阵因数化(NMF)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值