©PaperWeekly 原创 · 作者|西南交一枝花

单位|西南交通大学CCIT实验室博士生

研究方向|NLP、时空数据挖掘

导读

最近使用到清华大学 NLP 组开发的知识图谱表示工具 OpenKE,论文发表在 EMNLP 2018《OpenKE: An Open Toolkit for Knowledge Embedding》。对于简单的图谱表示需求,可以快速实现。

Github地址:

https://github.com/thunlp/OpenKE

项目主页:

http://139.129.163.161//

概述

知识图谱表示任务具体指将实体、关系嵌入到连续低维空间表示,如图一所示,可类比于词的向量化表示。常用的知识表示算法如 TransE, TransH 等,OpenKE 共集成了八种知识表示方法,具体如下图二所示:

▲ 图一、知识表示图示

▲ 图二、八种知识表示方法

以 TransE 为例,对知识表示做简单介绍。TransE 属于平移模型的一种,主要思想是将实体和关系映射至同一低维空间。具体操作为,给定三元组 <h, r, t>,将关系 r 看作头实体 h 到尾实体 t 的平移向量,由此可得到








,进而使用最大间隔衡量误差。训练时,通过采样构建负样本进行优化。

——参考《知识图谱与深度学习》

除了集成上述八种知识表示算法之外,该工作对三个大规模知识图谱做了预训练,可以通过 python 或 C++ 加载使用。

▲ 图三、WIKI&freebase&XLORE预训练

python
#Python codes to read the binary files.
import numpy as np
vec = np.memmap(filename , dtype='float32', mode='r')C++
//C(C++) codes to read the binary files.
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>struct stat statbuf;
int fd;
float* vec;int main() {if(stat(filename, &statbuf)!=-1) {fd = open("relation2vec.bin", O_RDONLY);vec = (float*)mmap(NULL, statbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0); }return 0;
}

值得注意的是,这里所介绍的知识图谱表示方法都是基于静态知识图谱。相较于静态知识图谱,动态知识图谱会随着时间演化发生变化,具体表现在本体概念和实例三元组。

需求测试

笔者最近需要获取 POI 及 POI 之间关系的表示,通过观察官方文档示例,输入数据按如下形式组织。

1. 数据输入:entity2id.txt, relation2id.txt, train2id.txt.

格式说明:entity2id.txt 和 relation2id.txt

# relation2id.txt 第一行为关系总数,每行之间以制表符(\t)分隔
2
belong_to 0
locate_at 1

train2id.txt,特别注意三元组不要有重复,影响参数大小,产生意外错误。

# train2id.txt 第一行为三元组总数,每一行以制表符分隔,
2
3325  782  1
3425  712  0

2. 源码下载 直接下载文首给出的 Github 链接,为 pytorch 版本。

官方 API 文档中给出的训练样例与 Github 现在版本不同,无需参考。

3. 开始训练

import openke
from openke.config import Trainer, Tester
from openke.module.model import TransE
from openke.module.loss import MarginLoss
from openke.module.strategy import NegativeSampling
from openke.data import TrainDataLoader, TestDataLoader# dataloader for training
train_dataloader = TrainDataLoader(in_path = "三个输入文件的路径", nbatches = 100,threads = 8, sampling_mode = "normal", bern_flag = 1, filter_flag = 1, neg_ent = 25,neg_rel = 0)# dataloader for test
test_dataloader = TestDataLoader("测试数据路径", "link")# define the model
transe = TransE(ent_tot = train_dataloader.get_ent_tot(),rel_tot = train_dataloader.get_rel_tot(),dim = 200, p_norm = 1, norm_flag = True)# define the loss function
model = NegativeSampling(model = transe, loss = MarginLoss(margin = 5.0),batch_size = train_dataloader.get_batch_size()
)# train the model
trainer = Trainer(model = model, data_loader = train_dataloader, train_times = 1000, alpha = 1.0, use_gpu = True)
trainer.run()
transe.save_checkpoint('./checkpoint/transe.ckpt')
transe.save_parameters('./embed.vec') # 保存嵌入向量# test the model
transe.load_checkpoint('./checkpoint/transe.ckpt')
tester = Tester(model = transe, data_loader = test_dataloader, use_gpu = True)
tester.run_link_prediction(type_constrain = False)

训练完成之后,得到一个 embed.vec 文件,通过 json 加载使用。样式为:

{"ent_embeddings.weight":[[],[]], "rel_embeddings.weight":[[],[]]}

其中,下标对应实体 ID 和关系 ID,可在后续任务中使用。

总结

通常情况下,不会有只获得知识表示的需求,常与后续任务一起完成,如知识图谱补全、链路预测等。笔者本次的需求不需要构建端到端的结构,可以先获得知识表示,再进行后续处理。所以调研了现有的知识表示库,发现 openKE 使用方便,能够较好地支撑需求。

该工具支持的知识表示方法论文列表如下所示:

A Three-Way Model for Collective Learning on Multi-Relational Data. Nickel et al. Proceedings of ICML 2011.

Translating Embeddings for Modeling Multi-relational Data. Bordes et al. Proceedings of NIPS 2013.

Knowledge Graph Embedding by Translating on Hyperplanes. Wang et al. Proceedings of AAAI, 2014.

Learning Entity and Relation Embeddings for Knowledge Graph Completion. Lin et al. Proceedings of AAAI, 2015.

Knowledge Graph Embedding via Dynamic Mapping Matrix. Ji et al. Proceedings of ACL 2015.

Embedding Entities and Relations for Learning and Inference in Knowledge Bases. Yang et al. Proceedings of ICLR 2015.

Holographic Embeddings of Knowledge Graphs. Nickel et al. Proceedings of AAAI 2016.

Knowledge Graph Completion with Adaptive Sparse Transfer Matrix. Ji et al. Proceedings of AAAI 2016.

Complex Embeddings for Simple Link Prediction. Trouillon et al. Proceedings of ICML 2016.

更多阅读

#投 稿 通 道#

 让你的论文被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得技术干货。我们的目的只有一个,让知识真正流动起来。

???? 来稿标准:

• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)

• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接

• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志

???? 投稿邮箱:

• 投稿邮箱:hr@paperweekly.site

• 所有文章配图,请单独在附件中发送

• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通

????

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。

知识表示学习神器OpenKE:快速获取KG表示相关推荐

  1. 过年装X神器,快速获取 wifi 密码!

    祝各位朋友们新年快乐,牛年大吉???? 在春节期间,亲朋好友串个门聚一聚是难免的了,作为主人,被问 wifi 密码是常见的事,每次都需要给客人们一遍又一遍的说密码,感觉很low啊.作为程序员,这完全不 ...

  2. 技术动态 | 清华大学开源OpenKE:知识表示学习平台

    本文转载自公众号机器之心,选自 THUNLP.   清华大学自然语言处理实验室近日发布了 OpenKE 平台,整合了 TransE.TransH.TransR.TransD.RESCAL.DistMu ...

  3. 知识表示学习(KG Embedding)—— TransX系列

    文章目录 前言 TransE TransH TransR TransD 总结 参考资料 前言 知识表示学习是针对于知识图谱三元组所做的word embedding,平常所做的都是基于完整的文本表述比如 ...

  4. 清华大学开源OpenKE:知识表示学习平台

    清华大学自然语言处理实验室近日发布了 OpenKE 平台,整合了 TransE.TransH.TransR.TransD.RESCAL.DistMult.HolE.ComplEx 等算法的统一接口高效 ...

  5. 基于深度学习模型的花卉图像分类代码_华为不止有鸿蒙!教你快速入门华为免编程深度学习神器ModelArts...

    引言: 本文介绍利用华为ModelArts进行深度学习的图像分类任务,不用一行代码. 今年8月9日,在华为史上规模最大的开发者大会上,华为正式发布全球首个基于微内核的全场景分布式OS--鸿蒙操作系统( ...

  6. 论文笔记--知识表示学习研究进展-2016

    论文信息: 论文-知识表示学习研究进展-2016-刘知远 文末附6篇知识表示相关论文的下载地址 文章目录 前言 知识库的主要研究目标 基于网络形式的知识表示面临的困难点 表示学习&知识表示学习 ...

  7. 知识表示学习研究进展

    知识表示学习研究进展 本博文来源于 Paper: 刘知远 2016 知识表示学习研究进展 计算机研究与发展 目前的产品 谷歌知识图谱 微软Bing Satori 百度知心 搜狗知立方 IBM Wast ...

  8. 笔记神器-Obsidian快速使用入门教程

    引言 本人原先记笔记用的是typora,在同事的推荐下,试用了obsidian,之后就一发不可收拾. 说说个人的使用感受,typora对于单个笔记来讲记录是很方便,但是一旦笔记变多或者笔记与笔记之间有 ...

  9. 12个学霸都在用的学习神器,让你的学习效率翻几倍!

    分享12个超级好用的学习APP,涵盖了提升个人效率.英语考研.专业课程.搜题神器,绝对值得收藏! 1.Notability 一个简约但强大的笔记与PDF注释软件,下载的电子版课件或学习资料都可以用它进 ...

最新文章

  1. php表单偶数变颜色,利用CSS3 nth-child()选择器 实现表格奇偶行变色
  2. Alibaba Cluster Data 开放下载:270GB 数据揭秘你不知道的阿里巴巴数据中心
  3. REUSE_ALV_GRID_DISPLAY事件子过程和cl_gui_grid类的事件对应关系
  4. java web netty_基于Netty的非Servlet规范 JavaWeb框架及高性能 Java服务器
  5. 介绍三种将二进制字节字符转换为ASCII方法
  6. c# 之抽象工厂模式
  7. Java线程安全策略
  8. try,catch,finally
  9. layer.open()利用代码实现伪阻塞
  10. 20175322 周弋鸿 2018-2019-2 《Java程序设计》第八周学习总结
  11. 【工业控制】基于matlab多变量动态矩阵预测控制(DMC)【含Matlab源码 1499期】
  12. keepalived实现LVS-DR模型的高可用
  13. 商业画布是什么?有什么免费的模板和工具?
  14. 工程测量附合导线简易平差计算(附软件下载)
  15. stm32f407 休眠模式_STM32进入和退出睡眠模式
  16. 剪切的东西不见了怎么找回来?
  17. 批归一化《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》
  18. 2.4 放大电路静态工作点的稳定
  19. 欧盟CE公告号-外贸人不得不了解的通关证书
  20. Android 中在Android studio2.3中 NASA 的World Wind地图应用

热门文章

  1. append 降低数组位数_4.有序数组
  2. 在RHEL5.4上做YUM
  3. 小技巧2 - 负边距居中法
  4. 小白安装eclipse插件—testNG
  5. VC++动态创建和删除菜单(转)
  6. ext js gridpanel绑定到动态生成的store
  7. 如何自学JSP。--摘抄http://hi.baidu.com/comasp
  8. python怎么写手机按钮_python与mel的button写法
  9. 如何利用python在一个文档里写入长须_Python语法入门—文件处理
  10. iview table 自定义列_案例 | iview中Table:拖拽适配列、自定义固定列、合并行