基于Pytorch和torchtext的知识图谱深度学习框架。
Go to file
2019-03-26 22:35:29 +08:00
ede 新创建lightsmile的知识图谱技术框架,嘻嘻! 2019-03-26 22:33:23 +08:00
ere 新创建lightsmile的知识图谱技术框架,嘻嘻! 2019-03-26 22:33:23 +08:00
erl 新创建lightsmile的知识图谱技术框架,嘻嘻! 2019-03-26 22:33:23 +08:00
esq 新创建lightsmile的知识图谱技术框架,嘻嘻! 2019-03-26 22:33:23 +08:00
kr 新创建lightsmile的知识图谱技术框架,嘻嘻! 2019-03-26 22:33:23 +08:00
lightkg 新创建lightsmile的知识图谱技术框架,嘻嘻! 2019-03-26 22:33:23 +08:00
test 新创建lightsmile的知识图谱技术框架,嘻嘻! 2019-03-26 22:33:23 +08:00
__init__.py add __init__.py 2019-02-02 20:53:51 +08:00
.gitignore change gitignore 2019-03-26 22:35:29 +08:00
LICENSE Create LICENSE 2019-02-02 11:20:14 +08:00
README.md 新创建lightsmile的知识图谱技术框架,嘻嘻! 2019-03-26 22:33:23 +08:00
requirements.txt 新创建lightsmile的知识图谱技术框架,嘻嘻! 2019-03-26 22:33:23 +08:00
setup.py 新创建lightsmile的知识图谱技术框架,嘻嘻! 2019-03-26 22:33:23 +08:00

lightKGlightsmile个人的知识图谱技术框架

前言

根据知识图谱发展报告2018相关介绍框架主要设计为有以下五大功能

  • 知识表示学习, Knowledge Representation Learning
  • 实体识别与链接, Entity Recognition and Linking
  • 实体关系抽取, Entity Relation Extraction
  • 事件检测与抽取, Event Detection and Extraction
  • 知识存储与查询, Knowledge Storage and Query
  • 知识推理, Knowledge Reasoning

因此将有六个主要的功能模块krl知识表示学习、erl实体识别与链接、ere实体关系抽取、ede实体检测与抽取、ksq知识存储与查询、kr知识推理以及其他功能模块。

当前已实现的功能

知识表示学习

  • 基于翻译模型(Trans系列)的知识表示学习, TransE

实体识别与链接

实体关系抽取

事件检测与抽取

知识存储与查询

知识推理

安装

本项目基于Pytorch1.0

pip install lightKG

建议使用国内源来安装,如使用以下命令:

pip install -i https://pypi.douban.com/simple/ lightKG

安装依赖

由于有些库如pytorch、torchtext并不在pypi源中或者里面只有比较老旧的版本我们需要单独安装一些库。

安装pytorch

具体安装参见pytorch官网来根据平台、安装方式、Python版本、CUDA版本来选择适合自己的版本。

安装torchtext

使用以下命令安装最新版本torchtext

pip install https://github.com/pytorch/text/archive/master.zip

模型

  • krlTransE等

训练数据说明

krl

csv格式

共三列,依次为头实体关系尾实体 示例如下:

科学,包涵,自然、社会、思维等领域
科学,外文名,science
科学,拼音,kē xué
科学,中文名,科学
科学,解释,发现、积累的真理的运用与实践
语法学,外文名,syntactics
语法学,中文名,语法学
物理宇宙学,对象,大尺度结构和宇宙形成
物理宇宙学,时间,二十世纪
物理宇宙学,所属,天体物理学

使用

krl

训练

from lightkg.krl import KRL

train_path = '/home/lightsmile/NLP/corpus/kg/baike/train.sample.csv'
dev_path = '/home/lightsmile/NLP/corpus/kg/baike/test.sample.csv'
model_type = 'TransE'

krl = KRL()
krl.train(train_path, model_type=model_type, dev_path=train_path, save_path='./krl_{}_saves'.format(model_type))

测试

krl.load(save_path='./krl_{}_saves'.format(model_type), model_type=model_type)
krl.test(train_path)

预测

根据头实体、关系、尾实体,预测其概率
print(krl.predict(head='编译器', rel='外文名', tail='Compiler'))

输出为:

0.998942494392395
根据头实体和关系预测训练集词表中topk(默认为3)个可能尾实体
print(krl.predict_tail(head='编译器', rel='外文名'))

输出为:

[('Compiler', 0.998942494392395), ('20世纪50年代末', 0.3786872327327728), ('译码器', 0.3767447769641876)]
根据头实体和尾实体预测训练集词表中topk(默认为3)个可能关系
print(krl.predict_rel(head='编译器', tail='Compiler'))

输出为:

[('外文名', 0.998942494392395), ('英译', 0.8240533471107483), ('拼音', 0.4082326292991638)]
根据尾实体和关系预测训练集词表中topk(默认为3)个可能头实体
print(krl.predict_head(rel='外文名', tail='Compiler'))

输出为:

[('编译器', 0.998942494392395), ('译码器', 0.36795616149902344), ('计算机,单片机,编程语言', 0.36788302659988403)]

项目组织结构

项目架构

  • base
    • config.py
    • model.py
    • module.py
    • tool.py
  • common
    • entity.py
    • relation.py
  • krl知识表示学习
    • models
      • transE
    • utils
  • utils

架构说明

base目录

放一些基础的模块实现其他的高层业务模型以及相关训练代码都从此module继承相应父类。

config

存放模型训练相关的超参数等配置信息

model

模型的实现抽象基类,包含base.model.BaseConfigbase.model.BaseModel,包含loadsave等方法

module

业务模块的训练验证测试等实现抽象基类,包含base.module.Module,包含trainload_validatetest等方法

tool

业务模块的数据处理抽象基类,包含base.tool.Tool,包含get_datasetget_vectorsget_vocabget_iteratorget_score等方法

common目录

entity

实体基类, 所有需要使用实体对象的使用此类或从此类继承子类

relation

关系基类, 所有需要使用关系对象的使用此类或从此类继承子类

util目录

放一些通用的方法

todo

业务

工程

  • 增加断点重训功能。
  • 增加earlyStopping。
  • 重构项目结构,将相同冗余的地方合并起来,保持项目结构清晰
  • 现在模型保存的路径和名字默认一致,会冲突,接下来每个模型都有自己的name

功能

  • 增加基于翻译模型的知识表示学习相关模型以及训练预测代码

参考

Deep Learning

NLP

知识图谱

Pytorch教程

torchtext介绍

其他工具模块

数据集

表示学习

命名实体识别

关系抽取

事件抽取

这里暂时粗浅的将语义角色标注技术实现等同于事件抽取任务。

其他