《知识图谱-概念与技术》读书笔记
知识图谱基础
知识图谱的概念最初由Google公司提出,指的是Google公司为了支撑其语义搜索而建立的知识库。而随着及技术的深化,知识图谱已经成为了大数据时代最重要的知识表示方式。它是一种大规模语义网络,包含实体,概念以及它们之间的各种语义关系。
知识图谱通常以图的形式存在,其中的节点可能代表了实体、概念或者值。实体指的是对象或者实例,是属性赖以存在的基础;概念又被称为类别,代表了一类实体;值即为每个实体的属性值,可以是常见的数值类型,文本类型等。知识图谱中的边可以分为属性、关系。实体和值之间构成属性关系,而关系可以看作是一类特殊的属性,当实体的某个属性值也是实体,则这个属性就是关系。
与知识图谱相似的概念是传统的知识工程。而相比于传统的语义网络,知识图谱规模巨大并且语义丰富。传统知识工程中,知识获取的环节通常依赖于专家人力来完成,无法做到大规模的要求。而知识图谱的实现通常依赖于大规模的自动化知识获取。随着互联网的兴起,大数据时代的到来,自动化知识获取成为可能。数据、算力和模型的飞速发展也带动了知识图谱的发展。另一方面,高质量的用户生成内容提供了高质量的知识库来源。传统知识工程中知识来源一般是专家学者,而知识图谱的知识来源通常是互联网上的信息。互联网上的信息纷繁杂乱,质量参差不齐,但是包括百科、社区、论坛、问答平台等多种形式在内,互联网上大量高质量内容集中在这些平台上,我们可以通过自动化的方式获取这些高质量知识。
在知识图谱的生命周期中,通常会涉及到下面的过程:知识图谱的构建,其中我们需要完成对知识的获取;知识图谱的管理,其中我们需要完成对知识进行表示与建模,同时将其存储在合适的管理系统中,完成相关的查询;知识图谱的应用,即让其他的应用场景从知识图谱上受益。接下来就简单介绍相关的过程。
知识图谱构建
词汇挖掘与实体识别
从图模型的角度来看,构建知识图谱的第一步是获取图模型中的实体。实体通常使用文本中的词汇或短语来描述,因此我们需要从文本预料中挖掘出尽可能多的高质量词汇,并从这些词汇中筛选出目标知识图谱所需要的实体。前者涉及到的技术包括领域短语挖掘、同义词挖掘和缩略词挖掘等,而后者涉及到的技术包括命名实体识别等。
领域短语挖掘
领域短语挖掘需要解决的问题是从给定的领域语料当中自动挖掘出该领域的高质量短语。它的输入是领域语料,而输出是领域中的高质量短语。一个高质量短语通常独立描述了一个完整的,不可分割的语义单元。短语的质量可以从频率、一致性、信息量和完整性等角度来评估。
- 频率:一个高质量短语通常在文本中出现得较为频繁
- 一致性:组成短语的单词序列搭配频率要明显高于其他组合
- 信息量:高质量短语应该传达一定的信息,表达一定的主题或者概念
- 完整性:高质量短语在特定的上下文中式一个完整的语义单元
早期的领域短语挖掘方法主要式基于规则的。我们针对特定领域手工设计预定义的词性标签规则来识别文档中的高质量名词短语。这种方法存在一定的局限性,它的适用性不高,并且规则定义较为困难,并且难以穷举所有的规则。
而近年来的短语挖掘方法,更多地基于短语的统计指标,并且又可以分为无监督学习和监督学习两大类方法。
无监督方法通过计算候选短语的统计指标特征来挖掘领域短语。第一步我们需要通过文本语料生成候选短语,这些候选短语应该是高频的N-Gram(连续N个词序列)。第二步计算候选短语的统计指标特征,如TF-IDF、C-value、NC-value、PMI、左邻字熵、右邻字熵等。第三步,我们利用得到的统计指标计算每个候选短语的质量评分,用来评估短语的质量。第四步则是对所有候选短语按照分数从高到低进行排序,取排名靠前的短语作为最终输出。
监督方法则是在无监督方法的基础上增加了一些步骤。在监督方法中,我们有一定的标注样本,则可以利用这些标注样本以及对应的统计指标特征来训练一个二元分类器,分类结果即判断该候选短语是否是高质量短语。
前面的方法都需要计算统计指标特征,常用的统计指标特征有TF-IDF、C-value、NC-value、PMI、左邻字熵、右邻字熵。这里我们只对不同的指标进行定性的了解,而不涉及具体的数学定义。
TF-IDF,词频-逆文档频率。它通常用来评价一个短语在语料中的重要性。它考虑到一个短语在内部文档以及外部文档的频率。领域词汇应当在内部文档中出现频率较高,而在外部文档中出现频率相对较低。我们利用TF-IDF来挖掘能够有效代表某篇文档特征的短语。
C-value在词频的基础上考虑了短语的长度以及父子短语对于词频统计的影响,考虑了统计候选短语频率时父短语的重复统计对于短语频次估计所带来的偏差。而NC-value则是在C-value的基础上,额外利用了短语的上下文信息,来挖掘高质量短语。
PMI刻画了短语组成部分之间的一致性程度。如果两个短语联合出现的概率远大于两者在独立情况下随机共同出现的概率,说明这两个部分共同出现是有意义的,预示着两者应该组成一个有意义的短语。通常利用PMI来挖掘一致性较高,经常一起搭配的短语。
左邻字熵和右邻自熵表示一个短语左右搭配的丰富程度。一个高质量的短语应该有丰富的左右搭配,而如果一个短语的左右邻字总是一个固定词汇,则这个短语的质量就不高。通常用左邻字熵和右邻自熵来挖掘自由运用程度较高的短语。
同义词挖掘
同义词指的是意义相同或者相近的词。在大量的文本中,我们通常会遇到同义词,它们在语义上相近,但是对应的是同一个实体,机器需要能够判别这种同义词,因此,同义词挖掘是需要解决的问题。
典型的同义词挖掘的方法有基于同义词资源的方法,以及基于模式匹配的方法。前者的同义词资源来源于字典、百科词条等,上面有许多已经整理好的同义词资源,这些资源虽然质量较高,但是收录不完整。后者指的是利用同义词在句子中被提及的文本模式从句子中挖掘同义词,例如常见的模式有“又称”,“也称为”等。利用这些模式从句子中匹配来获取同义词。模式匹配虽然能够较为准确地获取同义词,但是我们无法穷尽所有的模式。
对于这个问题,自举法是一个较好的解决方案。这是一个迭代循环的过程,我们可以使用事先准备好的模式匹配得到同义词对,然后在语料中搜索同义词对的新模式,来扩充我们的模式,而后循环利用更多的模式从语料中匹配同义词。这种方式虽然可以自动挖掘新模式,但是自动学习获得的新模式质量难以保证。
命名实体识别
命名实体是一个词或者短语,它能够清楚地标识某一个事务。命名实体识别(Named
Entity
Recognition,NER)指的是在文本中定位命名实体的边界,并将其分类到预定义类型的集合中。对于该问题,我们的输入是句子所对应的单词序列,输出一个三元组集合。集合中,每个三元组代表一个命名实体,形式为<开始位置, 结束位置, 实体类型>
。
传统的NER方法主要分为基于规则的方法,监督学习方法和半监督学习方法。
在句子中,实体出现的模式往往具有一定规律性。基于规则的方法指的是由语言专家指定规则,通过匹配规则和模式来从句子中对实体进行识别。不过同其他基于模式的方式一样,这种方法同样面对模式无法穷尽的问题。而在监督学习方法中,NER被看作是序列标注问题,它使用BIO标注法,为单词序列的每个单词标注不同的类型,其中B表示实体的起始位置、I表示实体的中间或者结束位置、O表示对应字符不是实体。这样我们将NER问题转化成输入文本,输出BIO序列。这种方式从大规模序列标注样本中学习实体标注模式,然后利用学习到的模式对新的句子进行标注。在NER中,另一类典型的半监督方法是自举法,它从少量的标注数据、大量未标注数据开始,通过一些初始模式迭代生成更多的标注数据,然后进行监督学习。
近年来,深度神经网络被广泛应用于各类自然语言处理任务中。基于深度学习的方法通常将NER问题建模为序列标注问题。深度学习模型接收句子的词向量或者字向量表示作为输入,通过上下文编码器从输入表示中学习。上下文编码器有两种常用的模型结构,卷积神经网络(CNN)和循环神经网络(RNN),前者能够有效地提取输入数据的局部特征,而后者则考虑了句子中前后字符的相互影响。在之后,由标签解码器将经过编码的上下文表示作为输入,输出对应的标签。
关系抽取
在获取了实体之后,我们相当于获取了知识图谱中的节点。而关系抽取则构成了知识图谱的边。关系抽取指的是从给定的句子中抽取实体以及实体之间的关系,即抽取三元组,三元组的形式为<主体, 谓词, 客体>
,通常一个三元组表达了主体和客体之间的一层关系。通过NER我们可以找到句子中包含的实体作为主客体,于是需要完成的就是利用句子的信息填充其中关系部分。常用的关系抽取方式包括基于模式的抽取、基于学习的抽取以及开放关系抽取。
基于模式的关系抽取通过定义语义模式,将模式与文本进行匹配,来事先关系实例的获取。我们可以根据已知的关系,依据其在文本中的表达方式来构造相关模式,进一步通过模式匹配来抽取关系实例,从而完成关系抽取。进一步,基于模式的关系抽取又分为基于字符模式、基于语法模式和基于语义模式。基于字符模式的关系抽取直接将文本直接视为字符序列,将表达特定关系的字符模式表示为一组正则表达式,从而完成关系抽取。基于语法模式的关系抽取则引入文本所包含的语法信息,词性标签等来描述模式,增强模式的表达能管理。基于语义模式的关系抽取则通过引入语义元素,精确地表达模式适配的范围。而为了解决模式无法穷举的问题,同样可以通过自举法来进行自动化的模式获取。
基于学习的关系抽取主要分为基于监督学习的抽取、基于半监督学习的抽取以及基于远程监督学习的抽取。监督学习的前提是存在大规模的标注数据,但是人工标注成本较高,因此引入半监督学习和远程监督学习。远程监督学习本质上是一种快速构建训练集的方法,它利用外部知识对目标任务实现间接监督。远程监督学习认为,如果一个实体对具有某种关系,那么包含实体对的句子都在某种程度上描述了该实体对之间的关系,据此就可以从大规模知识库中获得对应的数据,实现标注,得到大规模的带标签的自然语言语句。当然,基于远程学习构建的训练集会引入很多噪声,需要利用一些方式来对标注数据进行甄别和筛选。基于深度学习的关系抽取能够自动学习有效特征,但是它需要大量标注数据,因此常与远程学习联合使用,通过大规模标注数据来训练深度学习模型。
不过主流的关系抽取方法通常需要预定义关系类别,然后才能抽取满足给定关系类别的实体对,本质上完成的还是一个分类任务。但是在现实世界中,关系的种类是复杂多样的,难以穷举。开放关系抽取(OpenIE)则希望直接从自然语言文本中抽取出三元组形式的关系实例,抽取出的关系不限于预定义的关系类型,而是文本中可能出现的所有关系实例。OpenIE更多地可以理解为是一种基于浅层语法分析的文本结构化任务。目前的开放关系抽取系统有TextRunner、ReVerb、Ollie等。
知识图谱管理
从文本中获取知识之后,我们需要对这些知识进行有效的管理。知识图谱应用的前提就是对这些知识数据的有效表示和存储。逻辑层面的表示是从人的角度对知识图谱中的数据进行描述,而物理层面的存储则是从计算机的角度对数据进行组织,两者紧密相关,但这里我们更加关注逻辑层面的表示。
数据模型
知识图谱的基本表示模型为三元组模型,即<主体, 谓词, 客体>
。三元组中的谓词可以是两个实体之间的关系,也可以是一个实体的某种属性,如果是后面的情况,三元组的形式为<主体, 属性, 属性值>
。由此,一个知识图谱数据集可以看作是一个三元组的集合。但是基本的三元组模型只讨论了较为简单的二元关系语义,如果需要表达一些相对复杂的语义,如时空信息,多模态知识等,则需要基于三元组扩展为四元组甚至五元组。
另一种常用的知识图谱模型是图模型。通过预先定义的语义关联,三元组数据可以转化为一个或者多个连通图。而知识图谱一个直观的表达形式也是图模型的形式。三元组中的实体作为图模型中的节点,而关系则作为边,每个具体的谓词则看作是边上的属性,这样就得到了知识图谱中基本的有向图模型。除了有向图外,属性图也是另一种常用的数据模型。属性图中支持节点属性和边属性,则可以简化有向图中对于属性的表达。
从基本的有向图中衍生出来的,还有带权重的有向图和带概率的有向图。这种模型的出现主要是对应我们在获取知识过程中可能遇到的情况。我们在获取每条关系的时候,可以附加上该关系在语料中被观察到频率,以此来代表该关系的典型性。或者在获取关系的时候,保留该关系的置信度,表达这种关系是真实事实的概率。这样获得的知识,则可以被建模成带概率的有向图。
查询与检索
查询和检索是知识图谱的重要使用方式,也是知识图谱数据管理系统的核心能力之一。国际标准化组织W3C提出了针对知识图谱的标准化查询语言SPARQL,(类比SQL基于关系型数据库)这是一种声明式的结构化查询语言,用户只需要按照定义的语法规则来描述查询的信息,而不需要明确指定实现查询的步骤。其中,SPARQL提供了一套完整的查询操作符,包括选择、排序、聚集等。
将知识图谱考虑成图结构,我们常用的查询操作可以看作是子图查询。一方面,子图查询匹配返回的结果可能非常多,为了从中找到更有价值的结果,需要进行进一步的处理和筛选。另一方面,常规的子图匹配运算要求查询图中的每个节点映射到图中具有相同标签的节点,此要求过于严格,在实际场景中会丢失很多有意义的匹配。因此,在子图查询上衍生出近似子图查询,意在匹配语义更加丰富的结果。
除了子图查询外,常见的查询还有路径查询、关键词查询、社团搜索等。路径查询表达了两个实体之间的某种关联关系。关键词查询则返回包括指定关键字的子树或者子图,适用于搜索引擎的场景。实际上包含某个关键字的子树或者子图可能会很多,因此需要从中筛选出满足特定条件的结果。社团结构指的是一组内部互相紧密联系的节点,但是它们与社团之外节点的联系则相对松散。社团搜索包括社团挖掘和社团查询,通常应用在团队推荐、风险控制、犯罪团伙发现等领域。传统的社团搜索一般只考虑结构上的特征,而在知识图谱场景下,应该需要考虑相应的语义信息。
图数据管理系统
落地到计算机层面上,知识图谱的存储和管理与图数据管理系统息息相关。知识图谱的应用场景对图数据管理系统提出了新的要求,包括在线查询,离线分析等。在线查询通常服务于实时交互类任务,要求高响应、低延迟,常见的任务有针对实体、属性、关系、子图结构等的查询;而离线分析通常用于批量图分析和处理,要求高吞吐量,常见的任务有基于图结构的计算、基于规则的推理、规则挖掘以及辅助分析等。
有关图数据管理系统的架构和设计的相关内容不进行展开,这里只介绍一些典型的图数据管理系统。对于通用图数据管理系统的考察通常考虑下面的因素:
- 数据是否以原生图的表示形式存在。原生图存储容易实现高效的图数据操作,非原生图则会有性能上的损失
- 是否支持低延迟的在线查询
- 是否支持数据分片和分布式图数据处理
- 是否选择内存为主要存储介质
- 是否支持事务
当前典型的通用图数据管理系统包括Neo4j、Graph Engine、Horton、FlockDB、TinkerGraph、InfiniteGraph、Cayley、Titan、MapReduce、PEGASUS、Pregel、Giraph、GraphLab、GraphChi、GraphX等。
另一种是专门针对知识图谱的图数据管理系统,主要考察点为性能、易用性和可扩展性。当前的知识图谱专用图数据管理系统包括BitMat、TripleBit、gStore、Trinity.RDF、Stylus等。
知识图谱应用
构建知识图谱的最终目的还是落在了应用上,基于知识图谱我们可以发掘多种多样的应用场景。包括数据分析、智慧搜索、智能推荐、人机交互、决策支持等。这里主要关注基于知识图谱的搜索与推荐。搜索与推荐是知识图谱的两类重要应用,也是当前知识图谱落地的重要形态。
搜索和推荐是互联网时代的两类重要信息服务。从目标来看,这两者都是向用户准确提供其希望获取的对象,例如网页、资料、商品等资源。传统的搜索与推荐模型大都是基于用户的历史行为来产生结果,从用户的历史搜索、点击、购物、浏览等行为中来获得用户行为的统计规律。但是这种方式由于数据匮乏,难以捕捉个体行为背后的动机,只能将群体的行为特征简单移植到个体上,而忽略用户的个性特征。尽管也有一些个性化模型,但也是一定程度上细化了统计模型的适用范围,而没有改变用群体行为来服务个体的本质。
知识图谱的引入可以提升系统的效果。第一,知识图谱有助于用户画像的完善,丰富对用户以及各类互联网资源的描述;第二,知识图谱能够发掘用户和物品之间的语义关联;第三,知识图谱能够为搜索和推荐提供可解释依据,提高用户采信结果的可能;第四,知识图谱能够为用户信息探索提供认知框架,使得系统能够在满足用户当前搜索和购物需求的同时,合理组织结果,积极拓展当前实体的其他相关信息。
一次搜索过程应该分为:用户提交查询、系统匹配查询的内容,查询结果经过排序后返回给用户。通常情况下,我们得到的查询结果都会有很多,用户关心的内容很容易淹没在大量结果中,因此,搜索的核心诉求是搜索直达目标。基于知识图谱的实体搜索主要分为四个步骤:搜索意图理解、目标查找、结果呈现以及实体探索。
搜索意图理解即通过用户提供的搜索关键词或者其他文本形式,来准确定位搜索的目标。根据理解的形式,又可以分为主题分类、语法解析和语义解析等任务。主题分类希望得到查询的主题;语法解析希望得到查询中关键词的词性标注或者语法修饰关系;语义解析则希望得到关键字对应的语义角色,比语法解析更加关注查询关键词之间的语义关联。这里的查询文本通常不符合严格的语法规则,并且查询文本往往是短文本,能够从中获取的上下文信息较少。知识图谱的作用主要体现在能够帮助搜索系统提高对于短文本的理解能力。
在获取搜索意图之后,就是目标查找过程。这一步只需要根据不同的查询条件生成查询语句,或者使用特定的算法从知识图谱中找到目标实体即可。
之后的过程是结果呈现,其中又分为结果排序以及结果内容的分类与组织。结果排序的依据可能是结果在知识图谱网络结构中的重要性、实体的流行度、与查询的相关性等。
实体探索指的是呈现目标实体以外的关联内容,拓展相关内容,以此增加搜索结果的多样性。主要内容包括相关实体发现、实体摘要以及相关实体解释。相关实体发现可以依据知识图谱中图结构的相似程度,包括关系和类型的相关性,也可以依据实体共同出现的程度。实体摘要指的是从文本中获取相关信息,可能的形式有文本摘要和图形化摘要,知识图谱的可视化就是一种很好的图形化摘要。相关实体解释指的是对展现结果的合理解释,这是提高结果可信度和用户体验的关键。基于知识图谱我们可以获取实体之间的某种联系,以此作为解释展现给用户。
常见知识图谱列表
【以下数据来源于原书P_31
《知识图谱:概念与技术》】
知识图谱 | 特点 | 构建方式 | 语言 | 类型 |
---|---|---|---|---|
Cyc | 通过人工的方式将上百万条人类常识编码成机器可用的形式,用于智能推断 | 人工 | 英语 | 常识 |
WordNet | 以同义词集合作为基本单元 | 人工 | 英语 | 词汇 |
ConceptNet | 多语言常识知识库 | 自动 | 多语言 | 常识 |
Freebase | 众包编辑 | 半自动 | 英语 | 百科 |
GeoNames | 多语言地理位置信息 | 半自动 | 多语言 | 地理 |
DBpedia | 多语言自动构建 | 半自动 | 多语言 | 百科 |
YAGO | 人工校验,时空维度,多语言 | 自动 | 多语言 | 百科 |
OpenIE | 开放性关系抽取,Never-Ending | 自动 | 英语 | 文本 |
BabelNet | 271种语言,自动编辑 | 自动 | 多语言 | 词汇 |
WikiData | 众包编辑 | 半自动 | 多语言 | 百科 |
Google知识图谱 | 规模最大 | 自动 | 多语言 | 总和 |
Probase | 概念规模最大 | 自动 | 英语 | 概念 |
搜狗知立方 | 侧重于娱乐领域 | 自动 | 汉语 | 百科 |
百度知心 | 支持百度搜索 | 自动 | 汉语 | 百科 |
CN-DBpedia | 实时更新,完整的数据/服务接口 | 自动 | 汉语 | 百科 |