Package: lightKG
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.0pipinstalllightKG建议使用国内源来安装，如使用以下命令：pipinstall-ihttps://pypi.douban.com/simple/lightKG安装依赖由于有些库如pytorch、torchtext并不在pypi源中或者里面只有比较老旧的版本，我们需要单独安装一些库。安装pytorch具体安装参见pytorch官网来根据平台、安装方式、Python版本、CUDA版本来选择适合自己的版本。安装torchtext使用以下命令安装最新版本torchtext：pipinstallhttps://github.com/pytorch/text/archive/master.zip模型krl：TransE等re: TextCNNsrl: BiLstm-CRFner: BiLstm-CRF训练数据说明krlcsv格式共三列，依次为头实体、关系、尾实体， 示例如下：科学,包涵,自然、社会、思维等领域
科学,外文名,science
科学,拼音,kēxué
科学,中文名,科学
科学,解释,发现、积累的真理的运用与实践
语法学,外文名,syntactics
语法学,中文名,语法学
物理宇宙学,对象,大尺度结构和宇宙形成
物理宇宙学,时间,二十世纪
物理宇宙学,所属,天体物理学nerBIO训练数据示例如下：清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_PersonsrlCONLL训练数据示例如下，其中各列分别为词、词性、是否语义谓词、角色，每句仅有一个谓语动词为语义谓词，即每句中第三列仅有一行取值为1，其余都为0.宋浩京NR0O
转达VV0O
了AS0O
朝鲜NR0O
领导人NN0O
对P0O
中国NR0O
领导人NN0O
的DEG0O
亲切JJ0O
问候NN0O
，PU0O
代表VV0O
朝方NN0O
对P0O
中国NR0B-ARG0
党政NN0I-ARG0
领导人NN0I-ARG0
和CC0I-ARG0
人民NN0E-ARG0
哀悼VV1rel
金日成NR0B-ARG1
主席NN0I-ARG1
逝世VV0E-ARG1
表示VV0O
深切JJ0O
谢意NN0O
。PU0Ore训练数据示例如下，其中各列分别为实体1、实体2、关系、句子钱钟书辛笛同门与辛笛京沪唱和聽钱钟书与钱钟书是清华校友，钱钟书高辛笛两班。
元武元华unknown于师傅在一次京剧表演中，选了元龙（洪金宝）、元楼（元奎）、元彪、成龙、元华、元武、元泰7人担任七小福的主角。使用krl训练fromlightkg.krlimportKRLtrain_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训练fromlightkg.erlimportNER# 创建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)预测frompprintimportpprintpprint(ner_model.predict('另一个很酷的事情是，通过框架我们可以停止并在稍后恢复训练。'))预测结果：[{'end':15,'entity':'我们','start':14,'type':'Person'}]re训练fromlightkg.ereimportREre=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训练fromlightkg.edeimportSRLsrl_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':'金日成主席逝世'}项目组织结构项目架构baseconfig.pymodel.pymodule.pytool.pycommonentity.pyrelation.pyedesrl, 语义角色标注erere， 关系抽取erlner， 命名实体识别krkrl，知识表示学习modelstransEutilsksqutils架构说明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 LearningWhat's the difference between “hidden” and “output” in PyTorch LSTM?What's the difference between LSTM() and LSTMCell()?深度学习框架技术剖析[转]NLP基于表示学习的信息抽取方法浅析知识抽取-实体及关系抽取知识抽取-事件抽取知识图谱翻译模型(Trans系列)的知识表示学习知识图谱向量化表示Pytorch教程PyTorch 常用方法总结4：张量维度操作（拼接、维度扩展、压缩、转置、重复……）Pytorch中的RNN之pack_padded_sequence()和pad_packed_sequence()pytorch学习笔记（二）：gradienttorch.multinomial()理解Pytorch 细节记录What does flatten_parameters() do?关于Pytorch的二维tensor的gather和scatter_操作用法分析Pytorch scatter_ 理解轴的含义‘model.eval()’ vs ‘with torch.no_grad()’到底什么是生成式对抗网络GAN？torchtext介绍torchtextA Tutorial on TorchtextTorchtext 详细介绍torchtext入门教程，轻松玩转文本数据处理其他工具模块python的Tqdm模块pytorch-crf数据集Chinese-Literature-NER-RE-DatasetChineseTextualInference表示学习TransE-Knowledge-Graph-EmbeddingOpenKE-PyTorch【语料】2500万中文三元组！命名实体识别sequence_tagging关系抽取ChineseNREpytorch-pcnn关系抽取(分类)总结事件抽取这里暂时粗浅的将语义角色标注技术实现等同于事件抽取任务。语义角色标注iobes_iob 与 iob_ranges 函数借鉴BiRNN-SRLchinese_semantic_role_labeling其他打赏如果该项目对您有所帮助，欢迎打赏~