DGL-KE:亚马逊开源知识图谱嵌入库,亲测快到飞起

作者信息

Elesdspline
目前从事NLP与知识图谱相关工作。

DGL-KE:亚马逊开源大规模知识图谱嵌入训练库

先说结论啊

这个库的开源已经是去年(2020)的事情了,突然感觉时间好快~,当时并没有在意,最近关注到这个库是因为自己在训练知识图谱 Embedding 的时候做的一些调研,考虑到后续大规模知识图谱的训练,需要更快的开源库,于是DGL-KE 重新回到我的视野!

结论就是速度是很快的啊!!!

我之前用的清华开源库 OpenKE,所以我将两者速度做了一个对比,下表是 TransE 的对比结果,训练数据的规模是10w+的数据。

开源库 时间 迭代次数
OpenKE 1小时 1000
DGL-KE 15分钟 100000

哦!好像就快了四倍,还好吧~

不对啊,这里需要脑爆一下,OpenKE 训练1000轮需要1个小时,可是DGL-KE是训练了100000轮啊,没错,是10万!!!那么结果就知道了,速度快了 40倍,不,是400倍!!!

所以我说速度确实快,中短期我会考虑用这个开源库。

不过两者有不同的优势,OpenKE 的速度其实也不慢,而且代码开源,可以修改模型代码,做对比实验,对于科研人是很不错的选择。DGL-KE 将模型嵌入在库里面,修改源码很难,只能通过外部开放的参数接口调整参数训练,不过好在可以快速迭代训练大规模知识图谱,在业界是个不错的选择,不过要做创新的话就要另觅它路了。

下面我们简单看看DGL-KE 是什么,支持什么,以及如何训练,更加关注的是怎么训练自己的大规模知识图谱数据。

一、DGL-KE

DGL-KE 是一个高性能、易于使用且可扩展的知识图谱嵌入工具包,它是依赖 Deep Graph Library (DGL) 库实现的,支持 CPU、GPU、分布式训练,包括 TransE、TransR、RESCAL、DistMult、ComplEx 和 RotatE 等一系列经典模型。

DGL-KE 正在继续开发中,预计一个月之后会加入 SimplE 模型、图神经网络 GNN 等。

DGL-KE

DGL-KE是为大规模知识图谱嵌入学习而设计,引入了各种新颖的优化方法,加速了拥有数百万节点和数十亿边的知识图谱的训练。对包含86M 实体 和 338M 边的知识图谱进行了测试,8个 GPU 的情况下,DGL-KE可以在100分钟内计算完成,在 4 台机器(48核/台)的集群中,可以在30分钟内计算完成,相比于业界公开的大规模知识图谱训练方法提升 2-5 倍的速度。

二、How to Install?

安装很简单,可以通过 pip 安装,也可以通过源码编译。

DGL-KE 现在在支持 python3.5 及其以上版本,内部基于 PyTorch 框架实现。

安装 PyTorch
pip3 install torch

安装 DGL(基于0.4.3版本)
pip3 install dgl==0.4.3

安装 DGL-KE
pip3 install dglke

或者通过源码编译

git clone https://github.com/awslabs/dgl-ke.git
cd dgl-ke/python
python3 setup.py install

测试安装成功,运行下面命令,会下载 FB15K 数据集并训练。

mkdir my_task && cd my_task# Train transE model on FB15k datasetDGLBACKEND=pytorch dglke_train --model_name TransE_l2 --dataset FB15k --batch_size 1000 \--neg_sample_size 200 --hidden_dim 400 --gamma 19.9 --lr 0.25 --max_step 500 --log_interval 100 \--batch_size_eval 16 -adv --regularization_coef 1.00E-09 --test --num_thread 1 --num_proc 8

三、How to Train?

1、训练与评估命令

  • dglke_train:单台机器上训练、支持 CPU 和 GPU。
  • dglke_dist_train:支持集群上分布式训练。
  • dglke_partition:将大规模知识图谱分为 N 个部分,每一部分采用分布式训练。
  • dglke_eval:评估链接预测的效果。
  • dglke_predict:知识推理,预测缺失的实体或者关系。
  • dglke_emb_sim:计算实体 Embedding 或者 关系 Embedding 的相似结果。

2、训练开放数据集

DGL-KE 提供了5个开放的数据集,可以直接用命令行训练,无需准备数据,相对良心。

Dataset 实体 关系
FB15k 14,951 592,213 1,345
FB15k-237 14,541 310,116 237
wn18 40,943 151,442 18
wn18rr 40,943 93,003 11
Freebase 86,054,151 338,586,276 14,824

每个数据集都包含 5 个文件:

  • train.txt: 训练集,每行一个三元组[h, r, t]
  • valid.txt: 验证集,每行一个三元组[h, r, t]
  • test.txt: 测试集,每行一个三元组[h, r, t]
  • entities.dict: 实体对应的id文件
  • relations.dict: 关系对应的id文件

训练命令如下,修改参数 --dataset 可以下载训练不同的数据集。

# Train transE model on FB15k dataset

DGLBACKEND=pytorch dglke_train --model_name TransE_l2 --dataset FB15k --batch_size 1000 \
--neg_sample_size 200 --hidden_dim 400 --gamma 19.9 --lr 0.25 --max_step 500 --log_interval 100 \
--batch_size_eval 16 -adv --regularization_coef 1.00E-09 --test --num_thread 1 --num_proc 8

3、训练自己的图谱数据

训练自己的数据,命令和训练公开数据集的命令相似,只是需要按照要求的格式加载数据文件。

下面是我训练数据的命令,采用的是单个机器,在 GPU 上面训练,主要有几个参数和文件的格式要注意下。

DGLBACKEND=pytorch dglke_train --model_name TransE_l2 --data_path \./me/kg --dataset kg --data_files train.txt valid.txt test.txt \ --format raw_udd_htr --batch_size 1000 --neg_sample_size 200 \--hidden_dim 400 --gamma 19.9 --lr 0.25 --max_step 100000 \ --log_interval 100 --batch_size_eval 16 -adv --regularization_coef 1.00E-09 \ --test --valid --num_thread 8 --gpu 0
  • 把数据放在 ./me/kg 的文件夹下就好了,然后 把 --data_path,--data_files,--format 这三个参数配置好
  • --data_path:数据的路径
  • --data_files:训练、验证、测试三个文件
  • --format:数据文件的存储格式,有两种形式
    • 一种是以 raw_udd 开头的,代表使用的是自己原始的数据格式,仅仅需要提供三个数据文件,不需要提供实体和关系分别对应的 id 映射文件,DGL-KE 会自动生成,其中后面的 [h|r|t] 代表的是三元组的顺序,是【头实体,尾实体,关系】还是【头实体,关系,尾实体】,或者是其他的格式,可以自定义。三元组内部默认是分隔符 \t 分割,若是其他的分隔符,需要 --delimiter 指定分隔符。
    • 另外一种是直接 udd 开头,需要提供五个文件,包括三个数据文件,以及实体和关系分别对应的id映射文件,其他的都和上面一样。

其他具体的可以参考文末的文档,还有很多的细节需要在实践中探索。

链接

  • DGL-KE Github:https://github.com/awslabs/dgl-ke

  • DGL-KE Documentation:https://dglke.dgl.ai/doc/

参考资料

  1. DGL-KE: Training Knowledge Graph Embeddings at Scale
  2. https://github.com/thunlp/OpenKE


由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:

(1)点击页面最上方'AINLP',进入公众号主页。

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

感谢支持,比心

欢迎加入知识图谱交流群
(0)

相关推荐

  • 赠书 | 知识图谱上的图神经网络

    文中有数据派THU福利哦 几乎所有早期的知识图谱嵌入的经典方法都是在对每个三元组打分,在实体和关系的表示中并没有完全考虑到整幅图的结构. 早期,图神经网络的方法在知识图谱嵌入中并没有被重视,主要由于: ...

  • NAACL 2019 论文 | 基于胶囊网络的知识图谱表示学习

    知识图谱表示学习(Knowledge Graph Embedding)是将知识图谱中的实体和关系等表示为低维的向量空间中的向量,这些向量蕴含了实体和关系的复杂信息,有利于计算机进行计算和推理. 论文背 ...

  • IJCAI2019 | VR-GCN:一种用于多关系网络对齐的关系向量化图卷积网络

    多关系网络(例如知识图谱)对齐对上层的AI应用有很重要的意义.现有的基于图卷积网络(Graph Convolutional Network,GCN)的对齐模型并没有充分地利用多关系的信息,也就是关系的 ...

  • Dataset之MNIST:MNIST(手写数字图片识别+ubyte.gz文件)数据集简介、下载、使用方法(包括数据增强)之详细攻略

    Dataset之MNIST:MNIST(手写数字图片识别+ubyte.gz文件)数据集简介+数据增强(将已有MNIST数据集通过移动像素上下左右的方法来扩大数据集为初始数据集的5倍) MNIST数据集 ...

  • 亚马逊小白必备知识

    一.读懂亚马逊平台规则 做好亚马逊一个非常重要的前提就是熟悉了解亚马逊的各项指标,并加以充分利用,保护好产品的前提下,提升排名,提高销售额,不了解亚马逊的结果就是很容易出现封账号.移除销售权等等问题. ...

  • 亚马逊里十条你不知道的冷知识

    亚马逊里十条你不知道的冷知识

  • 关于亚马逊买家账号的知识,你确定都了解吗?

    关于亚马逊买家号一般分为两大类,一类是自养类账号,第二类是购买类账号,今天主要讲述购买类账号. 1.账号类型 购买类账号有很多种,双密号(原邮原密.原邮二次密.改双密),单密号(cookie直登号). ...

  • 做好亚马逊要了解的知识

    做好亚马逊要了解的知识

  • 分享给亚马逊小白玩家的小知识

    图片是产品详情页中直接带来转化的最重要的元素之一,高质量的图片不仅有助于提高销量,还可以让你略微提高价格并提高品牌价值. 看到图片时,客户会知道他们买到的是质量最好的产品.亚马逊有多重视图片,图片对转 ...

  • 亚马逊移动机器人图谱

    从仓库拣选到末端配送,亚马逊在不断丰富其产品线.  文|新战略 作为全球第一的线上零售商,亚马逊很早就开始探索机器人技术在仓库的应用,从收购KivaSystems的近9年来,亚马逊一直在使用机器人技术 ...

  • Amazing 亚马逊又一开源力作!

    重磅干货,第一时间送达 来自:GitHub精选 大家好,我是你们帅气的喵哥! 今天要推荐的是亚马逊(Amazon)开源的流程图制作工具库:Diagram Maker.Diagram Marker 是一 ...

  • 亚马逊、苹果、谷歌等多家公司结盟,为智能家居开发开源互连协议

    智能家居设备已经存在了很多年,但是在很大程度上尚未普及.原因之一可能是不同的无线互连标准和技术之间不兼容,从而限制了广泛采用.随着美国几家领先的高科技公司同意为智能家居设备开发免版税的连接标准,情况将 ...

  • 亚马逊引流一般用什么方法?

    亚马逊流量很重要的,如果一个产品没有流量,那么更别说能吸引到客户点击购买了,因此引流很关键,那么亚马逊引流一般用什么方法? 1.自然搜索 一个公司最重要的部分就是搜索引擎优化.现在有89%的客户使用谷 ...