基于Pytorch和torchtext的知识图谱深度学习框架。
lightkg | ||
test | ||
.gitignore | ||
LICENSE | ||
README.md | ||
requirements.txt | ||
setup.py |
lightKG,lightsmile个人的知识图谱技术框架
前言
根据知识图谱发展报告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
模型
- krl:TransE等
训练数据说明
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
- models
- utils
架构说明
base目录
放一些基础的模块实现,其他的高层业务模型以及相关训练代码都从此module继承相应父类。
config
存放模型训练相关的超参数等配置信息
model
模型的实现抽象基类,包含base.model.BaseConfig
和base.model.BaseModel
,包含load
、save
等方法
module
业务模块的训练验证测试等实现抽象基类,包含base.module.Module
,包含train
、load
、_validate
、test
等方法
tool
业务模块的数据处理抽象基类,包含base.tool.Tool
,包含get_dataset
、get_vectors
、get_vocab
、get_iterator
、get_score
等方法
common目录
entity
实体基类, 所有需要使用实体对象的使用此类或从此类继承子类
relation
关系基类, 所有需要使用关系对象的使用此类或从此类继承子类
util目录
放一些通用的方法
todo
业务
工程
- 增加断点重训功能。
- 增加earlyStopping。
- 重构项目结构,将相同冗余的地方合并起来,保持项目结构清晰
- 现在模型保存的路径和名字默认一致,会冲突,接下来每个模型都有自己的
name
。
功能
- 增加基于翻译模型的知识表示学习相关模型以及训练预测代码
参考
Deep Learning
- What's the difference between “hidden” and “output” in PyTorch LSTM?
- What's the difference between LSTM() and LSTMCell()?
- 深度学习框架技术剖析[转]
NLP
知识图谱
Pytorch教程
- PyTorch 常用方法总结4:张量维度操作(拼接、维度扩展、压缩、转置、重复……)
- Pytorch中的RNN之pack_padded_sequence()和pad_packed_sequence()
- pytorch学习笔记(二):gradient
- torch.multinomial()理解
- Pytorch 细节记录
- What does flatten_parameters() do?
- 关于Pytorch的二维tensor的gather和scatter_操作用法分析
- Pytorch scatter_ 理解轴的含义
- ‘model.eval()’ vs ‘with torch.no_grad()’
- 到底什么是生成式对抗网络GAN?
torchtext介绍
其他工具模块
数据集
表示学习
命名实体识别
关系抽取
事件抽取
这里暂时粗浅的将语义角色标注技术实现等同于事件抽取任务。