利用语义属性来进行时序知识图谱的补全

news2024/12/26 11:45:49

目录

摘要部分

张量分解

超平面投影

超平面

投影

超平面投影的应用

数学表示

正则化

引言部分

TKG嵌入方法

举例

相关工作

SKG嵌入方法

评判事实合理性的评分函数模型

平移模型

TransE

TransE例子

张量分解模型

RESCAL

神经网络模型

TKG嵌入方法

外推

插值

具有语义属性的KG嵌入

方法


摘要部分

通过加强关系约束来保留TKG中暗含的语义属性。

借鉴张量分解超平面投影的思想设计与时间戳关联的关系约束。

采用合适的正则化方案来适应特定的关系约束。

张量分解

张量分解(Tensor Decomposition)是一种数学技术,用于将高维数据结构(称为张量)分解为多个低维组件。张量是一个多维数组,可以看作是矩阵(二维数组)的高维推广。张量分解的目的是找到原始数据的紧凑表示,通常用于数据压缩、降维、特征提取和模式识别等。

常见的张量分解的方法:

  1. CP分解(Candecomp/Parafac Decomposition):CP分解将张量分解为一组秩-1张量的和。对于三维张量,CP分解可以表示为三个矩阵的外积和。

  2. Tucker分解:Tucker分解将张量分解为一个核心张量和一组矩阵的乘积。与CP分解不同,Tucker分解允许核心张量具有不同的秩。

  3. 张量奇异值分解(Tensor SVD):这是奇异值分解(SVD)的张量推广,用于将张量分解为一组正交矩阵和一组奇异值。

  4. 分层Tucker分解(Hierarchical Tucker Decomposition):这种方法采用分层结构来分解张量,允许更灵活和可扩展的表示。

超平面投影

超平面

超平面是一个维度比包围空间低一维的子空间。例如,在三维空间中,超平面是一个平面;在二维空间中,超平面是一条直线。

投影

投影是将一个点或一组点从一个空间映射到另一个空间的过程。在超平面投影的情况下,这意味着将高维空间中的点映射到一个低维子空间上。

超平面投影的应用

超平面投影在许多领域都有应用,包括:

  1. 降维:通过将数据投影到低维子空间,可以减少数据的复杂性和维度,同时保留重要的特征和结构。

  2. 分类和回归:在支持向量机(SVM)等机器学习算法中,超平面用作决策边界,将不同类别的数据分开。

  3. 数据可视化:通过将高维数据投影到二维或三维空间,可以更容易地可视化和理解数据的结构和关系。

数学表示

超平面可以通过线性方程来表示:

a_1x_1 + a_2x_2 + \ldots + a_nx_n = b

其中 (a_1, a_2, \ldots, a_n)是超平面的法向量,( b )是常数,(x_1, x_2, \ldots, x_n) 是空间中的点。

投影点可以通过以下公式计算:

P = Q - \frac{​{(Q - P_0) \cdot N}}{​{N \cdot N}} \cdot N

其中 ( P )是投影点,( Q )是原始点,( P_0 ) 是超平面上的任意点,( N )是超平面的法向量。

超平面投影是一种强大的数学工具,用于降维、分类、回归和数据可视化。它通过将高维空间中的点投影到低维子空间来实现这些目的,从而提供了一种有效的方式来分析和解释复杂数据集。

正则化

正则化(Regularization)是机器学习和统计建模中的一个技术,用于防止模型过拟合。过拟合是指模型在训练数据上表现得非常好,但在未见过的测试数据上表现较差的现象。正则化通过向模型的目标函数(通常是损失函数)添加一个惩罚项来实现。

正则化的基本思想是限制模型的复杂度,使其不会过于依赖训练数据中的噪声或异常值。通过引入一些形式的惩罚,正则化鼓励模型选择较小的参数值,从而使模型更简单、更平滑。

常见的正则化方法有:

  • L1正则化:也称为Lasso正则化,通过在损失函数中添加参数的绝对值之和作为惩罚项。这通常会导致某些参数精确为零,从而实现特征选择。

L(\theta) = \text{Original Loss} + \lambda \sum_{i} |\theta_i|

  • L2正则化:也称为岭回归(Ridge Regression),通过在损失函数中添加参数的平方和作为惩罚项。这有助于防止参数值过大。

  L(\theta) = \text{Original Loss} + \lambda \sum_{i} \theta_i^2

  • Elastic Net正则化:结合L1和L2正则化,既实现了特征选择,又防止了参数过大。

L(\theta) = \text{Original Loss} + \lambda_1 \sum_{i} |\theta_i| + \lambda_2 \sum_{i} \theta_i^2

其中,(\lambda)是正则化强度的超参数,通过交叉验证等方法选择合适的值。

正则化有助于提高模型的泛化能力,使其在未见过的数据上表现得更好。不过,选择合适的正则化方法和强度需要仔细的调整,以便在偏差和方差之间找到合适的平衡点。


引言部分

TKG嵌入方法

被证明在进行时序知识图谱补全时是有用的。

这些方法通常通过将时间戳信息合并到现有的评分函数中来扩展针对静态知识图设计的嵌入方法。

这些方法主要注意于测量整个事实的合理性,而忽略了每个实体在特定时间戳上出现在关系的主体或对象位置上的偏差。

举例

(?, president_of, e_{o},t)
对于这个事实,关系暗示了主体是个政治家,所有那些不是政治家的实体就可以被过滤掉,但是如果实体是奥巴马的话,虽然他满足了是个政治家的约束,但是奥巴马能够作为这个事实的实体并且这个事实为真的时间段只能是 在2009年到2016年

相关工作

根据是否考虑了时间信息,相关模型分为两类:静态知识图谱(SKG)嵌入方法,时序知识图谱(TKG)嵌入方法

SKG嵌入方法

实体和关系被嵌入到连续的低维向量空间中。

评判事实合理性的评分函数模型

  • 平移模型

TransE

TransE 是一种基本的平移模型,它将该关系看作是从嵌入的主体实体到嵌入的对象实体的几何平移。

TransE的核心思想是将知识图谱中的三元组(头实体、关系、尾实体)表示为向量空间中的平移操作。具体来说,如果一个三元组(h, r, t)是真实的(即存在于知识图谱中),那么头实体的向量表示( \mathbf{h} )与关系的向量表示( \mathbf{r} )之和应该接近尾实体的向量表示( \mathbf{t} )。数学上,这可以表示为:

\mathbf{h} + \mathbf{r} \approx \mathbf{t}

TransE的目标是学习实体和关系的向量表示,使得真实三元组的这一约束得到满足,同时不真实的三元组(即不在知识图谱中的三元组)不满足该约束。

为了实现这一目标,TransE使用了一个损失函数,通常是基于间隔的合页损失(margin-based hinge loss)。损失函数鼓励真实三元组的得分低于不真实三元组的得分,并且两者之间的差距至少为一个预定的间隔。

TransE例子
import torch
import torch.nn as nn
import torch.optim as optim

# 定义实体和关系
entities = ["北京", "纽约", "巴黎", "中国", "美国", "法国"]
relations = ["位于"]
entity2idx = {entity: idx for idx, entity in enumerate(entities)}
relation2idx = {relation: idx for idx, relation in enumerate(relations)}

# 定义三元组
triples = [
    ("北京", "位于", "中国"),
    ("纽约", "位于", "美国"),
    ("巴黎", "位于", "法国"),
]

# 超参数
embedding_dim = 10
margin = 1.0
learning_rate = 0.01
epochs = 1000

# 初始化实体和关系的嵌入
entity_embeddings = nn.Embedding(len(entities), embedding_dim)
relation_embeddings = nn.Embedding(len(relations), embedding_dim)

# 优化器
optimizer = optim.SGD(list(entity_embeddings.parameters()) + list(relation_embeddings.parameters()), lr=learning_rate)

# 训练
for epoch in range(epochs):
    total_loss = 0
    for head, relation, tail in triples:
        # 获取实体和关系的索引
        head_idx = torch.LongTensor([entity2idx[head]])
        relation_idx = torch.LongTensor([relation2idx[relation]])
        tail_idx = torch.LongTensor([entity2idx[tail]])

        # 获取嵌入
        head_embedding = entity_embeddings(head_idx)
        relation_embedding = relation_embeddings(relation_idx)
        tail_embedding = entity_embeddings(tail_idx)

        # 计算损失
        loss = torch.nn.functional.relu(margin + (head_embedding + relation_embedding - tail_embedding).norm(p=1) - (head_embedding + relation_embedding - tail_embedding).norm(p=1))
        total_loss += loss.item()

        # 反向传播和优化
        loss.backward()
        optimizer.step()
        optimizer.zero_grad()

    if epoch % 100 == 0:
        print(f"Epoch {epoch}, Loss: {total_loss}")

# 打印最终的嵌入
print("Entity embeddings:", entity_embeddings.weight.data)
print("Relation embeddings:", relation_embeddings.weight.data)

from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

# 使用PCA将实体嵌入降到2维
pca = PCA(n_components=2)
entity_embeddings_2d = pca.fit_transform(entity_embeddings.weight.data)

# 绘制实体
plt.scatter(entity_embeddings_2d[:, 0], entity_embeddings_2d[:, 1])

# 添加标签
for i, entity in enumerate(entities):
    plt.annotate(entity, (entity_embeddings_2d[i, 0], entity_embeddings_2d[i, 1]))

plt.title('Entity Embeddings')
plt.show()

实体向量降维后的可视化 

扩展:TransR , TransH and TransD  

  • 张量分解模型

RESCAL

RESCAL是一种用于知识图谱嵌入的张量分解方法。与许多其他知识图谱嵌入方法不同,RESCAL不是为每个关系学习一个单一的嵌入向量,而是为每个关系学习一个矩阵。这允许模型捕捉更复杂的关系,并可以更好地建模多对多关系。

RESCAL的工作原理

假设我们有一个三维张量( X ),其中每个切片( X_k )表示一个关系,每个元素( X_{ijk} )表示实体( i )( j )之间的关系( k )存在或强度

RESCAL通过以下方式分解这个张量:

  • 实体嵌入:所有关系共享相同的实体嵌入矩阵( A ),其中每一行是一个实体的嵌入向量。
  • 关系嵌入:对于每个关系( k ),RESCAL学习一个矩阵( R_k )
  • 重构:通过实体嵌入和关系矩阵,我们可以重构原始张量:( \hat{X}_{ijk} = A_i R_k A_j^T )

扩展:DistMult 、ComplEx

  • 神经网络模型

这些方法应用多层非线性特征来计算实体和关系之间的交互作用,从而生成表达性特征嵌入。

TKG嵌入方法

根据要预测的时间戳,我们可以将这些方法分为两个背景:外推和插值

外推

外推模型侧重于预测未来时间戳t(t > tT)的新事实。他们通常通过将TKG视为事件序列来开发时间依赖的评分函数。

插值

目的是通过推断历史时间戳t(t0 <t<tT)中缺失的事实来补全TKG。这些工作通常为每个时间戳计算一个隐藏的表示,并扩展静态分数函数以利用时间信息。

具有语义属性的KG嵌入

在时间知识图嵌入中,关系及其涉及实体之间的语义属性仍未被探索。

方法

 基于关系约束的评分函数

 根据张量分解和超平面投影来设计评分函数。

张量分解是一种广泛存在的变换函数,它可以通过将一个张量分解为分量秩1张量的和来计算一个元组的分数。 

我们应用张量分解函数来模拟元组(r、t、s)和(r、t、o)的相互作用,并计算关系约束的值。

张量分解容易过拟合,所以引入正则化矩阵在对应的关系约束的元素。 

超平面投影: 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/918679.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

queue ide is not exists in YARN

报错内容: 2023-08-17 17:30:31.342 [ERROR] [BaseTaskScheduler-Thread-7 ] o.a.l.o.s.a.AsyncExecTaskRunnerImpl (79) [run] - Failed to execute task astJob_1_codeExec_1 org.apache.linkis.orchestrator.ecm.exception.ECMPluginErrorException: errCode:…

【实训项目】“优教”APP设计

1.设计摘要 随着科技的发展和信息技术的日益普及,很多家长抱着望子成龙的心态,不遗余力的为孩子找合适的家教&#xff0c;而很多在校大学生也希望通过当家教增加一点经济收入,基于这一点家教服务平台将提供更好的管理系统,使家长更加了解学生,也通过这个平台使家教管理者对于大…

Spring Cloud Alibaba-Nacos Discovery--服务治理

1 服务治理介绍 先来思考一个问题 通过上一章的操作&#xff0c;我们已经可以实现微服务之间的调用。但是我们把服务提供者的网络地址 &#xff08;ip&#xff0c;端口&#xff09;等硬编码到了代码中&#xff0c;这种做法存在许多问题&#xff1a; 一旦服务提供者地址变化&am…

如何将PC电脑变成web服务器:将内网主机映射到外网实现远程访问

如何将PC电脑变成web服务器&#xff1a;将内网主机映射到外网实现远程访问 我是艾西&#xff0c;今天跟大家分享内容还是比较多人问的一个问题&#xff1a;如何将PC电脑变成web服务器。内网主机作为web服务器&#xff0c;内容包括本地内网映射、多层内网映射解决方案、绕过电信…

[Linux]进程概念

[Linux]进程概念 文章目录 [Linux]进程概念进程的定义进程和程序的关系Linux下查看进程Linux下通过系统调用获取进程标示符Linux下通过系统调用创建进程-fork函数使用 进程的定义 进程是程序的一个执行实例&#xff0c;是担当分配系统资源&#xff08;CPU时间&#xff0c;内存…

android 重新签名bat

1.新建txt&#xff0c;修改后缀改为bat文件 sign.bat echo off:apk未签名文件名称 set apk_unsign"":apk签名文件名称 set apk_sign"":设置文件 set settingFileE:\apk\bat\sign\setting_sign.txt:读取settingFile第0行的 apk_unsign 值 for /f "to…

DETR-《End-to-End Object Detection with Transformers》论文精读笔记

DETR&#xff08;基于Transformer架构的目标检测方法开山之作&#xff09; End-to-End Object Detection with Transformers 参考&#xff1a;跟着李沐学AI-DETR 论文精读【论文精读】 摘要 在摘要部分作者&#xff0c;主要说明了如下几点&#xff1a; DETR是一个端到端&am…

Python入门之最基础1.0

记录学渣的学习过程 python入门学习1.0 前言一、 python学习之初需要注意的三个问题二、python所有内置函数的查看方式dir(__builtins__) 总结 前言 一、 python学习之初需要注意的三个问题 二、python所有内置函数的查看方式 dir(builtins) 总结 做自己的时候是发光的

【OpenMp】openmp库的基本语法

目录 OpenMP并行运行结构图句式parallel制导命令隐式同步 parallel的for命令parallel的for命令静态调度dynamic参数guided参数 sections制导指令single制导指令解决多线程竞争临界区矩阵所有元素1任务池同步点shared和private单语句原子操作#pragma omp atomic复杂样例程序 Ope…

【day8】驱动

作业&#xff1a;通过GPIO子系统编写LED灯的驱动&#xff0c;应用程序测试 在led驱动中设置一个定时器&#xff0c;实现底板三盏灯一秒亮一秒灭 1.找引脚 led1---->gpioz组5号引脚 led2---->gpioz组6号引脚 led3---->gpioz组7号引脚 2.加设备树节点 //led的设备树节点…

Nginx中location语法有哪些?【杭州多测师_王sir】

1、location 介绍location是Nginx中的块级指令(block directive)&#xff0c;location指令的功能是用来匹配不同的url请求&#xff0c;进而对请求做不同的处理和响应&#xff0c;这其中较难理解的是多个location的匹配顺序&#xff0c;本文会作为重点来解释和说明。开始之前先明…

【Linux】GNOME图形化界面安装

Linux下具有多种图形化界面&#xff0c;每种图形化界面具有不同的功能&#xff0c;在这里我们安装的是GNOME。 1、 挂载yum源 挂载之前首先确保使用ISO映像文件 2.挂载之前先在/mnt下面创建一个cdrom目录用来作为挂载点目录 挂载完成之后那么就要去修改yum源了 Vi /etc/yum.r…

IntelliJ IDEA maven配置,设置pom.xml的配置文件

IntelliJ IDEA项目&#xff0c;选择 文件 设置&#xff0c;弹窗 构建、执行、部署 构建工具 Maven就可以 maven配置好以后&#xff0c;在pom.xml的配置文件中就可以设置对应的jar包了&#xff0c;这样构建的时候自动需要的jar&#xff0c;在项目中导入即 需要的jar包设置在po…

数据驱动工作效率提升的5个层次—以PreMaint设备数字化平台为例

在现代工业领域&#xff0c;数据分析已成为提升工作效率和优化生产的不可或缺的工具。从描述性分析到规范性分析&#xff0c;数据分析逐步揭示了设备运行和维护的深层信息&#xff0c;帮助企业更明智地做出决策。本文将以PreMaint设备数字化平台为例&#xff0c;探讨工业数据驱…

平面设计除了PS还有哪些工具推荐

平面设计在我们的日常生活中无处不在。无论是传统媒体还是网络媒体&#xff0c;我们每天都会沉浸在大量的平面设计作品中。因此&#xff0c;我们或多或少会对设计有自己的看法。其实&#xff0c;即使是非专业人士&#xff0c;市场上也有很多平面设计软件&#xff0c;本文盘点了…

docker 搭建私有仓库和制作镜像

目录 1、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。 1.1 启动mysql镜像 1.2 启动owncloud镜像 1.3 浏览器访问 1.4 总结 2、安装搭建私有仓库 Harbor 2.1 下载docker-compose并赋予执行权限 2.2 磁盘挂载&#xff0c;保存harbor 2.3 修改配置文件…

最新的单机Lustre文件系统的安装

1.单机Lustre的搭建&#xff1a; 主机名IP地址内存添加的共享磁盘大小Centos7.9-test机192.168.10.30/241G20G 1.安装E2fsprogs包 下载OSS服务器所需要的包&#xff1a;E2fsprogs包只是在Ext4的原版RPM包基础上增加了对Lustre⽀持 mkdir ~/e2fsprogs && cd ~/e2fspro…

day-29 代码随想录算法训练营 回溯part5

491.递增子序列 分析&#xff1a;存在重复元素&#xff0c;求递增子序列思路&#xff1a;1.树层去重2.当 i>0 时当前位大于上一位 思路&#xff1a; 去重逻辑在每一层都需要重新创建&#xff08;每一层遍历&#xff09;&#xff0c;且不能影响到下一层递归 class Soluti…

认识SpringIOC容器

目录 一、SpringFrameWork 二、SpringIOC容器 三、SpringIoc的核心功能 一、SpringFrameWork 1.SpringFrameWork与Spring之间的关系 SpringFrameWork是SpringCould、SpringMVC等等技术的基础实现的&#xff0c;而所有的SpringCloud、SpringFrameWork、SpringMVC等等技术组…