Skip to main content

lightsmile's knowledge graph library

Project description

lightKG,lightsmile个人的知识图谱技术框架

说明

最近忙着学别的,暂时没怎么管这个lib了,后续会持续更新的。

前言

根据知识图谱发展报告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

实体识别与链接

  • 命名实体识别, ner

实体关系抽取

  • 关系抽取, re

事件检测与抽取

  • 语义角色标注, srl

知识存储与查询

知识推理

安装

本项目基于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等
  • re: TextCNN
  • srl: BiLstm-CRF
  • ner: BiLstm-CRF

训练数据说明

krl

csv格式

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

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

ner

BIO

训练数据示例如下:

 B_Time
明 I_Time
是 O
人 B_Person
们 I_Person
祭 O
扫 O
先 B_Person
人 I_Person
, O
怀 O
念 O
追 O
思 O
的 O
日 B_Time
子 I_Time
。 O

正 O
如 O
宋 B_Time
代 I_Time
诗 B_Person
人 I_Person

srl

CONLL

训练数据示例如下,其中各列分别为词性是否语义谓词角色,每句仅有一个谓语动词为语义谓词,即每句中第三列仅有一行取值为1,其余都为0.

宋浩京  NR      0       O
转达    VV      0       O
了      AS      0       O
朝鲜    NR      0       O
领导人  NN      0       O
对      P       0       O
中国    NR      0       O
领导人  NN      0       O
的      DEG     0       O
亲切    JJ      0       O
问候    NN      0       O
,      PU      0       O
代表    VV      0       O
朝方    NN      0       O
对      P       0       O
中国    NR      0       B-ARG0
党政    NN      0       I-ARG0
领导人  NN      0       I-ARG0
和      CC      0       I-ARG0
人民    NN      0       E-ARG0
哀悼    VV      1       rel
金日成  NR      0       B-ARG1
主席    NN      0       I-ARG1
逝世    VV      0       E-ARG1
表示    VV      0       O
深切    JJ      0       O
谢意    NN      0       O
。      PU      0       O

re

训练数据示例如下,其中各列分别为实体1实体2关系句子

钱钟书	辛笛	同门	与辛笛京沪唱和聽钱钟书与钱钟书是清华校友,钱钟书高辛笛两班。
元武	元华	unknown	于师傅在一次京剧表演中,选了元龙(洪金宝)、元楼(元奎)、元彪、成龙、元华、元武、元泰7人担任七小福的主角。

使用

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)]

ner

训练

from lightkg.erl import NER

# 创建NER对象
ner_model = NER()

train_path = '/home/lightsmile/NLP/corpus/ner/train.sample.txt'
dev_path = '/home/lightsmile/NLP/corpus/ner/test.sample.txt'
vec_path = '/home/lightsmile/NLP/embedding/char/token_vec_300.bin'

# 只需指定训练数据路径,预训练字向量可选,开发集路径可选,模型保存路径可选。
ner_model.train(train_path, vectors_path=vec_path, dev_path=dev_path, save_path='./ner_saves')

测试

# 加载模型,默认当前目录下的`saves`目录
ner_model.load('./ner_saves')
# 对train_path下的测试集进行读取测试
ner_model.test(train_path)

预测

from pprint import pprint

pprint(ner_model.predict('另一个很酷的事情是,通过框架我们可以停止并在稍后恢复训练。'))

预测结果:

[{'end': 15, 'entity': '我们', 'start': 14, 'type': 'Person'}]

re

训练

from lightkg.ere import RE

re = RE()

train_path = '/home/lightsmile/Projects/NLP/ChineseNRE/data/people-relation/train.sample.txt'
dev_path = '/home/lightsmile/Projects/NLP/ChineseNRE/data/people-relation/test.sample.txt'
vec_path = '/home/lightsmile/NLP/embedding/word/sgns.zhihu.bigram-char'

re.train(train_path, dev_path=dev_path, vectors_path=vec_path, save_path='./re_saves')

测试

re.load('./re_saves')
re.test(dev_path)

预测

print(re.predict('钱钟书', '辛笛', '与辛笛京沪唱和聽钱钟书与钱钟书是清华校友,钱钟书高辛笛两班。'))

预测结果:

(0.7306928038597107, '同门') # return格式为(预测概率,预测标签)

srl

训练

from lightkg.ede import SRL

srl_model = SRL()

train_path = '/home/lightsmile/NLP/corpus/srl/train.sample.tsv'
dev_path = '/home/lightsmile/NLP/corpus/srl/test.sample.tsv'
vec_path = '/home/lightsmile/NLP/embedding/word/sgns.zhihu.bigram-char'


srl_model.train(train_path, vectors_path=vec_path, dev_path=dev_path, save_path='./srl_saves')

测试

srl_model.load('./srl_saves')

srl_model.test(dev_path)

预测

word_list = ['代表', '朝方', '对', '中国', '党政', '领导人', '和', '人民', '哀悼', '金日成', '主席', '逝世', '表示', '深切', '谢意', '。']
pos_list = ['VV', 'NN', 'P', 'NR', 'NN', 'NN', 'CC', 'NN', 'VV', 'NR', 'NN', 'VV', 'VV', 'JJ', 'NN', 'PU']
rel_list = [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]

print(srl_model.predict(word_list, pos_list, rel_list))

预测结果:

{'ARG0': '中国党政领导人和人民', 'rel': '哀悼', 'ARG1': '金日成主席逝世'}

项目组织结构

项目架构

  • base
    • config.py
    • model.py
    • module.py
    • tool.py
  • common
    • entity.py
    • relation.py
  • ede
    • srl, 语义角色标注
  • ere
    • re, 关系抽取
  • erl
    • ner, 命名实体识别
  • kr
  • krl,知识表示学习
    • models
      • transE
    • utils
  • ksq
  • 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介绍

其他工具模块

数据集

表示学习

命名实体识别

关系抽取

事件抽取

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

其他

打赏

如果该项目对您有所帮助,欢迎打赏~

UTOOLS1578660899400.jpg

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lightKG-0.1.0.3.tar.gz (21.8 kB view details)

Uploaded Source

Built Distribution

lightKG-0.1.0.3-py3-none-any.whl (38.6 kB view details)

Uploaded Python 3

File details

Details for the file lightKG-0.1.0.3.tar.gz.

File metadata

  • Download URL: lightKG-0.1.0.3.tar.gz
  • Upload date:
  • Size: 21.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/44.0.0.post20200106 requests-toolbelt/0.9.1 tqdm/4.28.1 CPython/3.6.8

File hashes

Hashes for lightKG-0.1.0.3.tar.gz
Algorithm Hash digest
SHA256 c09265077dedb6905d6906c2fd4062f2ad2eae2e6c022dd7ecb998f3eff91f82
MD5 bd5b6bac68cc19c713e2138d28f224a4
BLAKE2b-256 0e31f680391ebb5798c1fae155cdc7edfbd566c7faac9623ce052abd276bc577

See more details on using hashes here.

File details

Details for the file lightKG-0.1.0.3-py3-none-any.whl.

File metadata

  • Download URL: lightKG-0.1.0.3-py3-none-any.whl
  • Upload date:
  • Size: 38.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/44.0.0.post20200106 requests-toolbelt/0.9.1 tqdm/4.28.1 CPython/3.6.8

File hashes

Hashes for lightKG-0.1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 08cc2ca3688e758fd2741e3d313c43c5800ff021fcc989cd11689c5e373aaf21
MD5 7e166af10293e4cae786bd768e109ab7
BLAKE2b-256 2f415478cf11a4c6a4b5adb97da77b24967dd9800849d8906df0b0fcfbcfbe13

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page