知识图谱
一、知识图谱的概念
图谱图谱,首先是个图,那就必须要有节点和边。我们都知道计算机里的“图”,是由同种类型的节点和同种类型的边组成的。那么知识图谱呢?
可以将“知识图谱”看成是“多关系图Multi-relational Graph”,由不同类型的节点和不同类型的边组成。
二、知识图谱的表示方法
- 第1种:属性图。图中有实体(节点)+关系(边)+(属于实体的)属性property。
- 第2种:RDF(Resource Description Framework资源描述框架)三元组SPO(Subject Predicate Object)。
三、知识信息的抽取
知识信息有2种来源:
- 第1种:业务数据库中本来就存在的结构化数据。
- 第2种:抓取/爬取出的非结构化数据。
知识信息抽取的难点在于:如何将非结构化的数据转换为结构化的数据:
- 实体命名识别Name Entity Recognition
- 关系抽取Relation Extraction
- 实体统一Entity Resolution
- 指代消除Coreference Resolution
四、知识图谱的存储
Neo4j系统是目前使用率最高的图数据库,它拥有活跃的社区,而且系统本身的查询效率高,但唯一的不足就是不支持准分布式。
五、知识图谱的应用
一般来说,知识图谱会应用在问答、搜索、个性化推荐等场景中。知识图谱的类型决定了其能够发挥作用的领域。总的来说,知识图谱分为通用型知识图谱(Open Domain)和领域型/垂直型/行业性知识图谱(Domain-Specific)。
六、知识图谱的创建
好比一个业务系统的设计,关键在于数据库表的设计一样。知识图谱系统的设计,一个是要对业务有深入的了解,另一个就是要对业务未来的变化有充分的预估。因此,有大神总结出知识图谱的构建有以下几个步骤:
1、具体业务问题的定义
在具体情境下,不是为了使用知识图谱而使用知识图谱,而是确实有以下强烈的需求和条件需要使用知识图谱,才可以选择构建一个知识图谱系统:
- 有强烈的可视化需求
- 常常涉及到对关系的深度搜索
- 对关系的查询有非常严格的实时性要求
- 数据类型多样化,不希望出现数据孤岛的情况
- 有条件搭建知识图谱系统
2、数据的收集&预处理
比如数据源的确认、把非结构化的数据处理成结构化的数据,这个过程中可能会用到自然语言处理技术(NLP)等等。
3、知识图谱的设计
通常要考虑的因素包括:实体,实体的属性,实体间的关系,可以作为属性的实体,可以作为实体的属性。知识图谱的设计要遵循“BEAF”原则:
- Business Principle业务原则:这个知识图谱的出发点肯定是要解决的业务问题,不仅要贴近业务现状,还要适应业务未来的变化。
- Analytics Principle分析原则:让这个知识图谱轻量化。类比内存的概念,只有命中率高的数据存在内存中才有意义,同理,只有经常要用于关系查询的数据存储在知识图谱中才有意义。
- Efficiency Principle效率原则
- Redundancy Principle冗余原则
4、知识图谱数据的存入
要根据不同的业务情况使用不同的图数据库:
5、上层应用的开发
使用知识图谱来解决实际问题。从算法的角度看,知识图谱有2种不同的使用方式:①基于规则的方式,②基于概率统计的方式,③基于动态网络的分析。
在数据量不大时或者专业性较强的领域,通常会基于规则进行。因为一来数据量不大,基于概率统计会使得知识图谱变得稀疏(Sparse),二来专业性较强的领域规则的制定会相对容易一些。
在数据量很大的时候,通常会基于概率统计进行。一来是因为数据量大,概率统计不会使知识图谱很稀疏,二来是因为在大量数据中进行规则制定也是一件成本极高的事情。
5.1基于规则的方式:
- 不一致性验证:用一些人为定义的规则去找出潜在的矛盾点。
- 基于规则提取特征:通常这些特征都是要从知识图谱的2度/3度/4度/n度关系中提取出来,绝不是一眼就可以观察出来的特征。具体要依赖对业务的理解。
- 基于模式判断:通过一些模式来找出具有特定特征的子图(sub-graph),然后对这个子图做进一步分析。比如这个子图是多个实体的公共部分,或者这个子图是一个具有很强关系的强连通图(Strongly Connected Component)。
5.2基于概率统计的方式:
- 社区挖掘:社区内部节点的关系密度明显大于社区外部节点的关系密度。
- 标签传播:节点之间信息的传递对节点本身的影响,有点像“近朱者赤近墨者黑”。
- 聚类。
5.3基于动态网络的分析:
上述2种方式是基于静态的知识图谱进行分析的,也就是说,关注点只在当前的图谱形状,并未考虑到图谱结构未来的变化。但往往图谱结构的变化中是蕴藏着一些隐含信息的。