联邦学习:联邦异构知识图谱划分

news/2024/5/9 1:39:00/文章来源:https://www.cnblogs.com/orion-orion/p/16829566.html

1 导引

我们在博客《联邦学习:联邦场景下的多源知识图谱嵌入》中介绍了联邦场景下的知识图谱嵌入,现在让我们回顾一下其中关于数据部分的细节。在联邦场景下,\(C\)个知识图谱\(\left\{\mathcal{G}_c\right\}_{c=1}^C=\left\{\left\{\mathcal{E}_c, \mathcal{R}_c, \mathcal{T}_c\right\}\right\}_{c=1}^C\)位于不同的客户端上。知识图谱拥的实体集合\(\mathcal{E}_c\)之间可能会存在重叠,而其关系集合\(\mathcal{R}_c\)和元组集合\(\mathcal{T}_c\)之间则不会重叠[1]。我们联系一下现实场景看这是合理的,比如在不同客户端对应不同银行的情况下,由于不同银行都有着自己的业务流程,所以关系集合不重叠。

接下来我们来看具体在实验环节怎么去划分联邦异构知识图谱数据。

2 联邦异构知识图谱划分

我们在博客《分布式机器学习:PageRank算法的并行化实现(PySpark)》中所说,分布式图数据的划分可分为点划分边划分两种,边划分是对图中某些边进行分裂,这使得不同的worker的点不同,但可能存有相同的边拷贝。而点划分是对图中某些点进行分裂,使得不同的worker的边不同,可能存有相同的点拷贝。不过知识图谱的情况要简化得多,因为知识图谱的图数据本身就是按一条条的边(元组)\((h,r,t)\)来存储的,直接对元组进行划分其实就等价于了点划分的方式。

由于我们这里的本地知识图谱\(\{\mathcal{E}_c, \mathcal{R}_c, \mathcal{T}_c\}\)中每个知识图谱的关系\(\mathcal{R}_c\)(即边的种类)是不同的,我们在划分元组之前我们需要先对关系进行划分,然后针对关系划分的结果来划分元组。 待元组划分到本地后,还需要将原有的实体和关系的索引映射到本地索引。最后,再在本地进行训练/验证/测试集的拆分。整体数据划分流程图如下:

2.1 划分关系

我们选择随机地将关系\(\mathcal{R}\)不重叠地划分到不同的client上:

random.shuffle(triples)
# triples为元祖集合,大小为 (n_triples, 3)
# 每各元组按(h,t,r)顺序存储
triples = np.concatenate(triples) # 先根据边的类型edge_type(即关系类型)将不同的edge_type映射到不同的client_id
edge_types = list(set(triples[:, 2]))
random.shuffle(edge_types)
edge_type_to_cid = {}
n_edge_types_per_client = len(edge_types)//n_clients
for id, edge_type in enumerate(edge_types):c_id = id // n_edge_types_per_clientif c_id < n_clients - 1:edge_type_to_cid[edge_type] = c_idelse:edge_type_to_cid[edge_type] = n_clients - 1

2.2 确定元组划分

在关系的划分确定之后,我们可以根据每个元组\((h,r,t)\)\(r\)的划分情况来决定该元组的划分情况。代码如下:

# 然后根据edge_type到client_id的映射情况,来将元组triples划分到不同的client
c_id_triples = [[] for i in range(n_clients)]    
for triple in triples:edge_type = triple[2]c_id = edge_type_to_cid[edge_type]c_id_triples[c_id].append(triple.reshape(1, -1))

2.3 索引映射

划分好元组之后,子图就确定了,接下来我们还需要将子图的实体和关系的索引进行重新编号,如下图所示:

对于具体的局部索引如何安排,我们采用随机选择的方式。代码如下:

# mapping global indices to local indices
c_id_triples_ori = [[] for i in range(n_clients)]    
for c_id in range(n_clients):triples = np.concatenate(c_id_triples[c_id])c_id_triples_ori[c_id] = triplesedge_index = triples[:, :2]edge_type = triples[:, 2]# map entity indices to local entity indicesindex_mapping = {}entities = list(set(edge_index.flatten()))random.shuffle(entities)for index, entity in enumerate(entities):index_mapping[entity] = indexf = lambda x: index_mapping[x]f = np.vectorize(f)client_entity_local_index = f(edge_index)# map edge indices to local entity indicesindex_mapping = {}edges = copy.deepcopy(list(set((edge_type))))random.shuffle(edges)for index, edge in enumerate(edges):index_mapping[edge] = indexf = lambda x: index_mapping[x]f = np.vectorize(f)client_edge_local_index = f(edge_type)c_id_triples[c_id] = np.concatenate([client_entity_local_index, \client_edge_local_index.reshape(-1, 1)], axis=1)

2.4 训练/验证/测试集拆分

最后,还需要在本地划分训练集、验证集和测试集。如下面的代码展示了按照0.8/0.1/0.1对本地的元组进行拆分。数据集划分完毕之后,则训练/验证/测试集对应的实体(edge_index)和关系类型(edge_type)就都确立了:

# split train, valid, test dataset
for c_id in range(n_clients):n_triples = c_id_triples[c_id].shape[0]n_train = int(n_triples * 0.8)n_val = int((n_triples - n_train) * 0.5)n_test = n_triples - n_train - n_valmod_to_slice = {"train": slice(0, n_train), \"valid": slice(n_train, n_train+n_val), "test": slice(-n_test, n_triples)}for mode in ["train", "valid", "test"]:client_data[c_id][mode]["edge_index_ori"] = c_id_triples_ori[c_id][mod_to_slice[mode], : 2].Tclient_data[c_id][mode]["edge_index"] = c_id_triples[c_id][mod_to_slice[mode], : 2].Tclient_data[c_id][mode]["edge_type_ori"] = c_id_triples_ori[c_id][mod_to_slice[mode], 2]client_data[c_id][mode]["edge_type"] = c_id_triples[c_id][mod_to_slice[mode], 2]

3 关于异构性的分析和解决

根据我们前面的定义,在联邦场景下不同客户端的知识图谱满足实体重叠,因此在进行联邦训练的过程中最简单的方式就是对重叠实体的embeddings进行平均。但是我们知道,知识图谱可能本身就具有一定的异构性,因为其中的某个实体可能会拥有着不同的关系路径[2],如下图所示:

在联邦场景下这种异构性则更加明显,因为如我们前面所说,同一个实体在不同的client的关系路径肯定不同,如果只采用本地嵌入的方法,那么不同的client会映射到不同的嵌入空间。此时,如果对来自不同嵌入空间embeddings直接进行聚合,就会丢失掉许多有用的语义信息。

如上图所示[3],知识图谱School中的元组表示Bob和Jack的学业信息,Amazon.com知识图谱中则表示他们的购物信息。对于Bob和Jack实体而言,在不同的知识图谱中他们拥有不同的关系,导致了他们的语义信息在不同知识图谱中的差异。

如何对联邦场景下知识图谱的异构性进行解决,成为一个必须要考虑的问题,目前文献[3]已采用对比学习对其进行了一定程度的解决,大家感兴趣的可以去阅读一下。

参考

[1] Chen M, Zhang W, Yuan Z, et al. Fede: Embedding knowledge graphs in federated setting[C]//The 10th International Joint Conference on Knowledge Graphs. 2021: 80-88.
[2] Li Z, Liu H, Zhang Z, et al. Learning knowledge graph embedding with heterogeneous relation attention networks[J]. IEEE Transactions on Neural Networks and Learning Systems, 2021.
[3] Chen M, Zhang W, Yuan Z, et al. Federated knowledge graph completion via embedding-contrastive learning[J]. Knowledge-Based Systems, 2022, 252: 109459.

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何给PDF文件添加水印?PDF免费添加水印教程来了

有时候&#xff0c;为了不让别人盗用我们PDF文件里面的内容或图片&#xff0c;或者是出于宣传产品的目的&#xff0c;我们经常会需要给自己的PDF文件添加各种类型的水印&#xff0c;那你们知道如何给PDF文件添加水印吗&#xff1f;下面我们就来看看如何给PDF文件添加水印&#…

瞄准五金行业采购痛难点,智慧采购管理系统实现业务流程数据化,提高采购效率

五金行业采购一直是传统企业采购的软肋和头痛环节&#xff0c;无论从人力成本&#xff0c;物料成本&#xff0c;财务监管成本&#xff0c;物流成本等都存在一个整合服务需求&#xff0c;同时&#xff0c;传统五金行业采购难的问题&#xff0c;也一直制约着行业发展&#xff0c;…

股指期货高手陈(股指期货第一人)

​ 什么是股指期货&#xff0c;怎么玩&#xff1f;请教高手&#xff01; 股指期货&#xff08;Stock Index Futures&#xff0c;即股票价格指数期货&#xff0c;也可称为股价指数期货&#xff09;&#xff0c;是指以股价指数为标的资产的标准化期货合约。双方约定在未来某个特…

RK3399应用开发 | 移植libdrm到rk3399开发板(2.4.113)

一、下载源码 下载地址:https://dri.freedesktop.org/libdrm/。 这里我下载最新的2.4.113版本: wget https://dri.freedesktop.org/libdrm/libdrm-2.4.113.tar.xz解压: xz -d libdrm-2.4.113.tar.xz tar -xf libdrm-2.4.113.tar二、编译环境安装 1. 更新python ubuntu安…

【安信可NB-IoT模组EC系列应用笔记⑧】用NB-IoT模组EC系列了解LwM2M协议并接入云平台

文章目录前言一、测试准备1、硬件准备2、云平台准备二、云平台连接1.注册入网2.读取IMSI及IMEI3.利用IMSI及IMEI创建设备4.LwM2M连接云平台设备三、 数据互交1.ATMIPLNOTIFY 通知属性变化2.ATMIPLREADRSP 返回读取结果3.ATMIPLWRITERSP 发送写入结果4.ATMIPLEXECUTERSP 发送执行…

半乳糖-人血清白蛋白 Gal-HSA,Gal-PEG-HSA 半乳糖修饰人血清白蛋白

产品名称&#xff1a;半乳糖修饰人血清白蛋白 Gal-HSA 用途&#xff1a;科研 状态&#xff1a;固体/粉末/溶液 产品规格&#xff1a;1g/5g/10g 保存&#xff1a;冷藏 储藏条件&#xff1a;-20℃ 储存时间&#xff1a;1年 温馨提醒&#xff1a;仅供科研&#xff0c;不能用于人体…

supervisor管理prometheus进程

一、supervisor简单介绍 二、supervisor安装 三、supervisor部署应用 四、supervisorctl常用指令 五、supervisor测试 一、supervisor简单介绍 1、 概述 supervisor是一个Python编写的进程管理工具&#xff0c;可以方便启动、重启、关闭、单个或多个进程&#xff0c;可以简…

中国数字视听行业全景调研与投资趋势预测报告

数字视听和视听技术的概念 传统视听技术既包括视觉技术&#xff0c;也包括听觉技术&#xff0c;即模拟信号&#xff0c;包括录音录像、摄影等。随着时代和科技的发展&#xff0c;先进的计算机技术在检察系统和办公业务中得到广泛应用&#xff0c;传统的视听技术也逐渐向数字化方…

硬件开发趋势与技术探索

LiveVideoStackCon 2022 音视频技术大会 北京站将于11月25日至26日在北京丽亭华苑酒店召开&#xff0c;本次大会将延续【音视频无限可能】的主题&#xff0c;邀请业内众多企业及专家学者&#xff0c;将他们在过去一年乃至更长时间里对音视频在更多领域和场景下应用的探索、在实…

CSS3 1 CSS3 响应式布局 1.3 Grid 布局

CSS3 文章目录CSS31 CSS3 响应式布局1.3 Grid 布局1.3.1 Grid 布局简介1.3.2 开启grid 布局1.3.3 排列元素1.3.4 对齐方式1 CSS3 响应式布局 1.3 Grid 布局 【【迄今为止最易懂】2分钟掌握 CSS Grid 布局】 https://www.bilibili.com/video/BV18p411A7JB?share_sourcecopy_w…

YOLOv5、v7改进之三十八:引入RepVGG模型结构

前 言&#xff1a;作为当前先进的深度学习目标检测算法YOLOv7&#xff0c;已经集合了大量的trick&#xff0c;但是还是有提高和改进的空间&#xff0c;针对具体应用场景下的检测难点&#xff0c;可以不同的改进方法。此后的系列文章&#xff0c;将重点对YOLOv7的如何改进进行详…

【微服务】微服务万字实战,带你了解工程原理

微服务实战1、前期准备1.1 技术选型1.2 模块设计1.3 微服务调用2、创建父工程3、创建基础模块3.1 导入依赖3.2 创建实体类4、创建用户微服务4.1 创建shop-user模块4.2 用户微服务启动类4.3 创建配置文件5、创建商品微服务5.1 创建shop_product模块5.2 商品微服务启动类5.3 创建…

【自学CSS笔记第7篇】——CSS三大特征(这一篇就够了)

其实&#xff0c;我清楚的知道什么是对的什么是错的&#xff0c;什么该做什么不该做&#xff0c;然而懒惰的天性驱使我们每每做出错误的决定&#xff0c;结束后我又再一次重复着厌倦和懊恼。 目录 CSS的三大特性总览: 层叠性&#xff1a; 继承性&#xff1a; 优先级&#x…

链路状态路由协议 OSPF (二)

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.Router ID 1.什么是Router ID 2.获得Router ID方法 二.DR和…

Libevent库的学习

目录 Libevent 概述 Libevent 使用模型 使用Libevent的基本流程&#xff1a; libevent 的核心&#xff0c;event 事件 1. 创建一个事件event 2. 释放event_free 3. 注册event 4. 信号事件 5. 销毁event_base Libevent 结构图 使用libevent库去实现tcp服务器 Libev…

【目标检测】【边界框回归】Bounding-Box regression

最近开始看目标检测的论文&#xff0c;第一篇为R-CNN论文&#xff0c;是两阶段目标检测的开山奠基之作。论文中的损失函数包含了边界框回归&#xff0c;且在R-CNN论文里面有详细的介绍。 一、为什么要做边界框回归&#xff1f; 对于上图&#xff0c;绿色的框表示Ground Truth&…

【VIO】第2讲 基于优化的IMU

第2讲 基于优化的 IMU 与视觉信息融合 1.最小二乘问题求解 &#xff08;1&#xff09;最小二乘基础概念 ​ 1 定义&#xff1a;找到一个n维的变量 x∈Rnx \in R^nx∈Rn &#xff0c;使得损失函数 F(x)F(x)F(x) 取得局部最小值&#xff1a; F(x)12∑i1m(fi(x))2F(x) \frac{1…

Word控件Spire.Doc 【文本】教程(5) ;从 Word 文档中的文本框中提取文本

文本框的目的是允许用户输入程序要使用的文本信息。也可以从文本框中提取现有的文本信息。以下指南重点介绍如何通过Spire.Doc for .NET从 C# 中 Word 文档的文本框中提取文本。 Spire.Doc for.NET 最新下载&#xff08;qun:767755948&#xff09;https://www.evget.com/produ…

3、Java对象相关

目录JVM内存分配机制对象的创建对象大小与指针压缩java对象的指针压缩指针压缩的原因分代回收机制分代GC分类对象内存分配栈上分配逃逸分析标量替换标量与聚合量Eden区分配大对象分配老年代分配对象动态年龄判断老年代空间分配担保机制对象的内存布局对象的访问定位对象内存回收…

WebDAV之葫芦儿·派盘+一刻日记

一刻日记 支持webdav方式连接葫芦儿派盘。 是一款强大的记录软件,通过平台可以随意的记录重要的事情,让用户在平台里能获得更多的帮助,实时的解决你的记录需求,让你可以更好的进行使用;在使用的过程中,用户可以记录当天重要的事情,把你的感想更好的记录在平台里,让用…