一个比较具有实操性的知识图谱项目来练手,或者明确的路线做牵引对于知识图谱入门而言很重要,尤其是对于刚入门的人来说,对如何构建知识图谱还是相对陌生,这一需求更需要明确的指引。
而当前,知识图谱开源的东西较多,我们可以充分利用好开源的项目,借鉴前人的经验,进行实操,这也是老刘说NLP技术社区多个朋友的一些建议。
而就路线而言,我们可以不妨采用这样的路线:
首先,先了解知识图谱开源课程课件,对知识图谱各项技术有个大致的了解;
然后,实操一些常用的知识抽取关键模块开源项目,掌握目前性能较好的实体识别模型和关系抽取模型;
最后,再实践相对完整的知识图谱开源项目,以及开放性知识抽取开源项目完成整个知识图谱生命周期的全流程。
因此,解决“利用开源项目”来较快地认识知识图谱这一工作,本文主要从相对完整的知识图谱开源项目集合、一些常用的知识抽取关键模块开源项目、一些代表性的开放性知识抽取开源项目以及一些知识图谱开源课程课件四个角度出发,通过收集整理的方式给大家介绍,供大家参考。
目前开源的知识图谱项目主要包括医疗领域、农业领域、金融领域知识图谱,项目相对来说比较完整。
但需要注意的是,目前开放的项目基本上都是采用爬虫方法,经本体定义后存储相应图数据库,最后进行问答、可视化等操作,通过事件操作,可以对知识图谱的全流程能有个比较好的认识,并未涉及到抽取等细节。
项目主要介绍star较多的几个开源项目,包括QASystemOnMedicalKG医疗知识图谱问答、Agriculture_KnowledgeGraph农业知识图谱、Financial-Knowledge-Graphs小型金融知识图谱、stock-knowledge-graph小型的证券知识图谱等四个。
1、QASystemOnMedicalKG医疗知识图谱问答
项目收益:基于该项目,可以了解到如何针对现有的医药网站数据,如何设计知识图谱schema,如何使用cpyher语句插入neo4j数据库,以及如何基于特定领域图谱数据设计图谱问答问题类型,并进行实现。
2、Agriculture_KnowledgeGraph农业知识图谱
本项目是上海市《农业信息服务平台及农业大数据综合利用研究》子课题《上海农业农村大数据共享服务平台建设和应用》的研究成果。华师大课题组在前期国家重点研发计划《大数据知识工程基础理论及其应用研究》研究基础上,在本项目中,基于碎片化农业大数据,构建面向智慧农业的知识图谱及其应用系统。
项目收益:该项目给出了一些农业知识图谱的构建项目案例,包括其中的技术架构,包括数据的定义、基于Neo4j的数据导入、关系抽取、基于knn的实体分类以及数据导入的语句,从中可以熟悉如何设计知识图谱架构,如何进行实体分类以及实体关系抽取的实操;
3、Financial-Knowledge-Graphs小型金融知识图谱
Financial-Knowledge-Graphs小型金融知识图谱构建示例由作者jm199504开源共享,里面介绍了如何使用Tushare工具包获取开源金融数据,包括股票基本信息、股票持有股东信息、股票概念信息、股票公告信息、财经新闻信息、概念信息、沪股通和深股通成分信息、股票价格信息等数据,安装neo4j图数据库,读取csv文件进行图谱读写操作。
项目收益:通过该项目可以大致熟悉如何通过抓取线上数据,然后基于neo4j数据库进行数据导入,生成图谱,可以强化对neo4j图数据库的使用能力,包括如何使用neo4j图数据库的恶内置图算法能力;
4、stock-knowledge-graph小型的证券知识图谱
该项目与2中的项目类似,利用网络上公开的数据构建一个小型的证券知识图谱(知识库)。
该项目分成几个任务:
一个是从页中抽取董事会的信息,如给定的html文件中,需要对每一个股票/公司抽取董事会成员的信息,这部分信息包括董事会成员“姓名”、“职务”、“性别”、“年龄”共四个字段;一个是获取股票行业和概念的信息;一个是设计知识图谱,如创建“人”实体,这个人拥有姓名、性别、年龄;一个是创建可以导Neo4j的csv文件;一个是利用上面的csv文件生成数据库;一个是基于构建好的知识图谱,通过编写Cypher语句回答问题;
项目收益:该项目是个不涉及具体抽取的项目,但其中的图谱构建思想值得大家进行事件,例如,在图谱设计环节,
设计一个这样的图谱:
设计思想如下,可以通过抓取的数据进行设计
所以需要做些处理,并生成能够直接导入Neo4j的csv格式,即需要生成这个文件:executive.csv,stock.csv,concept.csv,industry.csv,executive_stock.csv,stock_industry.csv,stock_concept.csv
最后,在利用上面的csv文件生成数据库任务中,可以学习到如何使用neo4j-import的命令,来进行数据导入:
neo4j_home$bin/neo4j-adminimport--id-type=STRING--nodesexecutive.csv--nodesstock.csv--nodesconcept.csv--nodesindustry.csv--relationshipsexecutive_stock.csv--relationshipsstock_industry.csv--relationshipsstock_concept.csv
知识图谱构建中的关键步骤包括ner实体识别、实体关系抽取、事件抽取等,其中大家讨论最多的就是如何实现即插即用的实体识别和实体关系抽取,下面对一些代表性开源组件进行论述:
1、实体识别NER项目
实体识别模型当前比较主流的是两种,一种是BERT-NER系列,包括BERT+Softmax、BERT+CRF、BERT+Span、BERT+MRC等方法,另一种是基于指针网络的方法,如GlobalPointer、TPlinker:
1)BERT-NER-Pytorch实体识别
以下两个项目提供了BERT+Softmax、BERT+CRF、BERT+Span、BERT+MRC三种算法下的ner方法;
2)GlobalPointer_pytorch实体识别
类似于多头机制来做实体抽取,可以解决嵌套实体和非嵌套实体的问题,抽取的特征是头尾节点的点乘结果,TPlinker是加性特征,另外通过引入旋转位置编码RoPE可以提高了效果。
2、实体关系抽取项目
实体关系抽取,可以分成基于联合的方法以及基于pipeline串行的方法,前者代表的方法为pure,后者比较流行并且验证可行的方法包括casrel以及GPLinker。
1)casrel实体关系抽取
CasRel本质上也是基于参数共享的联合实体关系抽取方法,它通常被大家称作层叠指针网络,将关系作为主语到宾语的映射函数。具体分为两步:第一步识别句中所有可能的主语;第二步针对每个主题探测各种关系及其对应的宾语。最终设计了一个端到端的级联双标签(主语标签,关系宾语标签)框架。有点像多轮问答来做关系抽取,他这里先抽取subject,然后来预测每个p的起始位置。
2)GPLinker实体关系抽取
GPLinker是一种实体与关系联合抽取的方法,与casrel方法有可以匹敌的效果,先利用GlobalPointer抽取subject的首尾(i,j)和object的首尾位置(i,j),然后利用GlobalPointer抽取每一种关系p的实体的head的match的位置(hi,hj)和实体的尾部tail的match的位置(ti,tj)组合,最终输出交集的结果。
3)PURE实体关系抽取
PURE,是pipeline式关系抽取的模型,首先为每一个实体类型生成4个标记token,然后给定一组实体对,取出该实体对对应的4个标记token,接着顺序拼接所有实体对的标记token到文本token后面,之后将token传给特征提取器(一般为Bert),拿到每个token的隐向量输出,最后每4个标记token选择第1个和第3个标记token的隐向量进行拼接,传给分类层进行分类。
开放性知识抽取与预定义schema的抽取不同,其不需要预先定义好知识图谱本体,而是直接通过模型训练或者句法规则进行抽取。
1、spo_extract_platform开放三元组抽取
本项目作为笔者在开放领域的三元组抽取的一次尝试,标注内容大部分为人物头衔,人物关系,公司与人的关系,影视剧主演、导演信息,以句子级别进行标注,标注出句子中的主语,谓语,宾语,形成标注序列;利用标注好的语料,采用bert+dl的方法进行训练;采用序列标注算法(ALBERT+BiLSTM+CRF)进行S,P,O识别,对新的语料,预测主语,谓语,宾语,然后利用一定的策略,如文本二分类(ALBERT+BiGRU+ATT)进行关系抽取,形成实体关系;
例如,给定:
接着,按照各个元素在句子出现的位置进行组合,比如华为的位置,离常务董事挨得近,那么形成一个三元组:
2、基于规则的开放因果抽取项目
基于因果关系知识库的因果事件图谱构建,用于构建因果事理图谱项目,本项目以构造和总结因果模板,结合中文语言特点,构建因果语言知识库的方式代替。本项目是对因果事件抽取以及因果知识图谱构建的一种尝试。
第1讲知识图谱概论、第2讲知识表示、第3讲知识建模、第4讲知识抽取基础:问题和方法、第5讲知识抽取:数据采集;
第6讲知识抽取:实体识别、第7讲知识抽取:关系抽取、第8讲知识抽取:事件抽取、第9讲知识融合;
第10讲知识图谱表示学习、第11讲知识存储、第12讲基于知识的智能问答、第13讲实体链接、第14讲知识推理共14个章节。
为了“利用开源项目”来较快地认识知识图谱这一工作,本文主要从相对完整的知识图谱开源项目集合、一些常用的知识抽取关键模块开源项目、一些代表性的开放性知识抽取开源项目以及一些知识图谱开源课程课件四个角度出发,通过收集整理的方式给大家介绍。
当然,开源的项目其实在复现的过程中兴许会出现一些实际的问题,如环境错误、数据缺失等,这时候我们可以进一步地动用搜索能力去补充,并加以耐心。
最后,感谢开源工作者的无私奉献。
就职于360人工智能研究院、曾就职于中国科学院软件研究所。