知识图谱算法:一文详解知识图谱关键技术与应用
知识图谱算法:一文详解知识图谱关键技术与应用进行融合的时候要考虑各个数据源的数据的可靠性,以及在各个不同数据源当中出现的频度来综合决定选用哪个类别或者哪个属性词。还有一种方法就是是用来自LD(LinkedData),LD是很多人工标记好的数据,是非常准确的,其中有种关联叫owl:sameAs,它表示前后两个是同实体的,利用这个作为训练数据来发现更多相同的实体对,是比较好的方法。最后要说的是,无论用哪种方法,都不能保证百分之百的准确率,所以最后也要有人工审核和过滤。接下来我们讲一下实体的融合,这里最主要就是实体的对齐。首先是实体对齐,也叫实体归一化,是把具有不同的标识的实体,但是在现实世界当中可能是表达同样意思的,把它做归一化。比如中华人民共和国、中国和China,这个三个指的是同一实体,尽管它的表述方式不一样,就把它归一化为具有全局唯一标识的实例对象,然后添加到知识图谱当中去。现在实体对齐普遍采用的还是一种聚类的方法,关键在于定义合
目前进行实体关系抽取有两大类方法,有一类是基于流水线式的抽取,输入一个句子,首先抽取这实体,再对实体进行两两组合,然后再进行分类,最后识别出实体之间的关系。这种做法是有缺点的,第一,它容易造成错误的传播,比如在第一步的时候,实体如果识别错误了,后面的关系肯定也是错误的。第二,会产生没有必要冗余的信息,因为要对实体进行两两的配对,然后再进行关系的分类,很多配对之间实际上就没有这样的关系,就是它会带来了这样非常多的冗余的信息,错误率也会被放大、被提升。
现在用的比较多的另一种方法,是联合学习的方法,输入一个句子,通过实体识别和关系抽取的联合模型,可以直接得到有效的三元组。通常我们是基于神经网络的联合标注的学习的方法,里面涉及到两个关键的工作,一个是模型的参数共享的问题,还有一个就是标注策略,怎么样进行有效的标注。模型共享是指的是在实体训练的时候能够进行实体识别和关系分类这两个任务,都会通过反向传播来匹配来进行关系的分类,然后同时来实现这两个参数之间的依赖,两个子任务之间的依赖。参数共享的方法,它本质上还是两个子任务,只是说它们这两个任务之间通过参数共享有了交互,而且在训练的时候还要预先进行实体识别,识别实体之后再根据预测信息进行两两匹配,来进行关系的分类,所以仍然会产生无关系时候冗余的信息存在。
现在我们新提出了一种端到端序列标注的策略,把原来涉及到序列标注和分类的两个任务变成了完全的端到端的序列标注的问题,通过端到端的神经网络模型,可以直接得到关系的三元组,即实体关系的三元组。
新的标注策略是像下面这张图里面有三个部分来组成的,第一部分是实体中的词的位置,比如b是表示开始,i表示是在实体的内部,e表示是实体的结尾,s表示是单个的实体。第二部分就是关系类型的信息,预定义的关系类型的编码,比如里面的CP、CF,CP是国家总统,CF是公司创立者,这样两种的关系。还有实体的角色的信息,它表示是实体1还是实体2?实体跟关系之外的其它的这些字符都用O来表示,这样就进行了实体的标注。
接下来我们讲一下实体的融合,这里最主要就是实体的对齐。
首先是实体对齐,也叫实体归一化,是把具有不同的标识的实体,但是在现实世界当中可能是表达同样意思的,把它做归一化。比如中华人民共和国、中国和China,这个三个指的是同一实体,尽管它的表述方式不一样,就把它归一化为具有全局唯一标识的实例对象,然后添加到知识图谱当中去。
现在实体对齐普遍采用的还是一种聚类的方法,关键在于定义合适的相似度的阈值,一般从三个维度来依次来考察的,首先会从字符的相似度的维度,基于的假设是具有相同描述的实体更有可能代表同实体。第二个维度,是从属性的相似度的维度来看的,就是具有相同属性的和以及属性词的这些实体,有可能会代表是相同的对象。第三个维度,是从结构相似度的维度来看,基于的假设是具有相同邻居的实体更有可能指向同对象。
进行融合的时候要考虑各个数据源的数据的可靠性,以及在各个不同数据源当中出现的频度来综合决定选用哪个类别或者哪个属性词。还有一种方法就是是用来自LD(LinkedData),LD是很多人工标记好的数据,是非常准确的,其中有种关联叫owl:sameAs,它表示前后两个是同实体的,利用这个作为训练数据来发现更多相同的实体对,是比较好的方法。最后要说的是,无论用哪种方法,都不能保证百分之百的准确率,所以最后也要有人工审核和过滤。
知识存储,就是如何选择数据库,从选择层面,我们有图数据库,有NoSQL的数据库,也有关系型数据库,数据库有很多选择。具体什么样的情况下选择什么样的数据库?通常是如果说知识图谱的关系结构非常的复杂、关系非常的多,这时候建议使用这个图数据库,比如Neo4J这样的数据库。另外一种就是它的关系并不是很复杂,关系可能也就是1度、2度的关系,更多的它是有非常多的属性的数据,这个时候可以考虑关系式数据库,或者是ES这样的存储。如果要考虑到知识图谱的性能、可扩展性、可分布式,是可以结合NoSQL的数据库,比如TiTan。根据实际的情况,一般是综合起来使用的,根据我们的经验,我们会结合Neo4J和ES来综合来使用,同时还结合这关系型数据库MySQL等等,根据不同的数据的特点来进行选型,而不是说一味的追求图数据库。
顺便了解一下目前主流的几款图数据库,Titan、Graph Engine、Neo4J这个三个分别都是开源的,然后Titan是Apache旗下的,Graph Engine是MIT的License,Neo4J是GPL开源的,既有商业版,也有也有开源免费版。然后它们的平台,像Titan是Linux,Graph是windows。而数据的支撑量级,像Titan是后端存储,基于Cassandra/Hbase/BDB这样的分布式存储引擎,可以支持更大的数据量,千亿级的数据量级;Neo4J商业版也可以支持到百亿级的,但是它的非商业版在数据量级比较大的时候,一般是在几千万级的时候就可能会出现一些问题。