本文介绍知识图谱,首先会讲一段知识图谱的综述作为开场,然后就知识图谱的构建,存储,还有应用进行具体说明。
知识图谱和我们的资源页比较类似,都是需要先构建,然后存储,之后应用。
知识图谱应用广泛,我会以推荐系统为例子,说明知识图谱在推荐系统中的应用。
知识图谱综述
我们首先对知识图谱做一个简短的综述。
计算机为什么需要知识?
比如数字110,对机器来说,110就是一个字符串,与其他数字没有太大的差别。
当然可以借助关联分析,分析出110跟警察,抢劫等相关。但是关联分析比较复杂,需要借助数据挖掘等相关技术。
如果采用知识库,只需要构建一条知识,即110是报警电话。
人工智能分为三个层次,分别是运算智能,感知智能和认知智能。
运算智能是让机器能存会算;感知智能是让机器能听会说、能看会认;认知智能是解决机器能理解会思考的问题。
认知智能需要知识图谱。
知识图谱是一个大规模语义网,包含实体和关系,比如章子怡的丈夫是汪峰;
也包含实体和属性,比如章子怡的出生日期是1979年2月9日。
还包含实体和概念,比如章子怡是一个女演员;
还包含概念之间的关系,比如女演员是演员的子类。演员是人物的子类。
百科图谱一般由标题,摘要,信息框,标签,图片等部分组成。
可抽取信息框的内容构建知识图谱,并进行可视化展示。
其中,对于题目理解来讲,函数的提出者,提出时间这些属性不是我们所关心的。
表达式,表示法,三要素是我们关心的属性。
知识图谱可以使能搜索与问答,比如搜索函数的三要素,可以直接得到结果:定义域,值域,对应法则。
知识图谱还可以使能Query补全,比如输入函数的,推荐的候选Queries为函数的定义,函数的三种表示方法等。
知识图谱强调世界是由实体而不是字符串组成的,比如题目中的函数,f(x), 定义域等在知识图谱中都是一个个实体,而不是字符串。
那么什么是知识图谱呢?
知识图谱是一个大规模语义网,由实体,概念等节点和属性,关系,类型等边构成。
是许多三元组的集合。每一个三元组是由主语(subject),谓语(predicate),宾语(object)构成。
比如中国,上海,姚明,叶莉等是实体。
比如地理位置,人物是概念。
比如姚明的身高226厘米,身高是属性。
比如姚明的配偶是叶莉,配偶是关系。
知识图谱三元组基本类型有四种,分别是实体,关系,实体,比如好未来,创始人,张邦鑫老师;
还有实体,属性,属性值,比如好未来,成立时间,2003年;
还是实体,is-a,概念,比如好未来,is-a,上市公司;
还有子概念,subclass-of,父概念,比如上市公式,subclass-of,公司;
不能把is-a和subclass-of进行混淆,就好像不能把集合的属于和包含进行混淆一样。
知识图谱分为模式层和数据层。
模式层是数据的模式,是对数据层的提炼。
数据层是具体的数据。
模式层是知识图谱的数据模型,是对数据层的约束。
我们以教学图谱为例,可以有staff, professor, course, laborary, student, PhD student等概念,以及professor 和course之间的联系,professor teach course。
还有professor 和PhD student之间的联系 Professor supervise PhD student。
这些概念以及概念之间的关系,构成了知识图谱的模式层。
然后在模式层下添加实体,比如Professor Xu和PhD student Wang,以及实体之间的关系,比如Xu supervise Wang.
知识图谱的构建
接下来,我们介绍知识图谱的构建。
知识图谱的构建,从数据来源来说,包括从结构化,半结构化和非结构化的海量数据中抽取知识,构建图谱。
按构建者分,可以分为众包构建和自动化构建。众包构建,就是利用许多人进行编辑,构建知识图谱,维基百科,百度百科都是众包构建的。
自动化构建,就是利用机器进行自动构建。
按构建方式分,可以分为自上而下的构建和自下而上的构建。
自上而下的构建先确定模式层,然后添加实体数据到知识库。
自下而上的构建先确定知识图谱的数据层,然后提取数据的模式。
行业知识图谱规模小,比如容易确定模式层,多采用自上而下的构建方式。
通用知识图谱规模大,数据模式随数据的增长而变化,多采用自下而上的构建方式。
知识图谱可以只有数据层,没有模式层。
知识图谱模式层构建,也叫本体(ontology)构建。需要先确定知识图谱的领域,比如大学领域。
然后列出领域内的术语,比如教职工,行政人员,技术支持人员,本科生,研究生等术语。
然后确定类和类之间的层级关系,比如教职工是在职教师和研究人员的父类。学生是本科生,研究生的父类。
然后定义术语外延的规则。比如概念的属性,概念之间的关系,属性或者关系的定义域(domain)和值域(range)等。
知识图谱的构建分为众包构建和自动化构建。由于众包构建涉及技术较少。我们这里主要介绍自动化构建。
这是知识图谱自动化构建的流程。
首先从数据库,百科网站,垂直网站等数据来源获取结构化,半结构化,和非结构化数据。
对非结构化数据和半结构化数据进行实体抽取,关系抽取,属性抽取,并与结构化数据进行整合,形成初步的三元组知识。
然后通过实体消歧得到标准知识表示。
对标准知识构建本体,形成数据模型。
对知识进行推理,发现新的知识。
对知识进行质量评估,从而进行质量控制。
对知识图谱添加新的实体,或者修改旧的实体,对知识图谱进行更新。
对构建好的知识图谱进行存储,方便下游应用。
对知识图谱进行表示学习,将知识图谱离散的符号转化为连续的数值。
对知识图谱进行应用,主要包括内容理解,搜索,推荐,问答等应用。
这里描述了从半结构化数据抽取三元组的例子,主要涉及网页爬取与解析。这里根据信息框(infobox)和标签(tags)来抽取三元组。
对于非结构化数据,先经过预处理,比如全角转半角等,然后进行分词,词性标注,语法解析,依存分析等NLP工具对文本进行解析,进一步进行实体识别,然后关系抽取,实体消歧,事件抽取等构成三元组知识。
比如文本:已知函数f(x)的定义域,抽取出函数,f(x), 定义域等实体,然后对实体对进行关系分类;比如函数和f(x)分类为表达式,比如函数和定义域分类为要素。
形成三元组知识:函数,表达式,f(x),函数,要素,定义域。
由于函数可能是数学中的函数,也可能是计算机中的函数,还需要进行实体消歧。根据上下文判断函数为数学中的函数。
实体识别是识别出文本中的人名,地名,组织机构名,时间,日期,货币等类型的字符串。
比如左边这条新闻,识别出时间3月23日0时50分,识别出人名特朗普等。
对于学科图谱来讲,需要识别出相关术语。比如函数,数集等术语。
实体识别一般建模成序列标注任务。输入一个序列,经过词嵌入,和双向LSTM编码,然后用CRF进行解码。
其中函数预测的标签是B-Noun, E-Noun, B和E分别表示mention的开始和结束,Noun表示类型。
f(x)预测为表达式,其中I-Expr, I表示Inside, Expr表示表达式。
当BERT出现后,由于BERT效果好,常采用BERT来对句子进行编码。
当识别出了文本中的实体,还需要对文本中的实体,两两进行关系分类。
一般我们会收集并标注一个关系分类的训练集,来训练一个模型,然后用模型对测试数据进行预测。
比如我们训练好模型后,对测试数据,集合中的元素有多种特性,包括确定性,互异性,无序性进行预测。
我们需要预测元素与确定性之间的关系,预测结果为特性。也就是集合有一个特性是确定性。
由于BERT的兴起,常用BERT来做关系分类。
识别出文本中的mention后,比如识别出函数,定义域等mention,还需要对mention进行实体消歧(entity disambiguation)。也就是这个mention提及的是哪一个实体。
比如函数可以是数学术语,也可以是计算机中的函数,根据上下文,判断指代的是数学中的函数。
注意到实体链接就是先识别出来文本中的mention,然后将识别出来mention链接到知识库中实体,所以说实体链接=实体识别+实体消歧。
除了实体链接以外,还可以有公式链接。比如题目或者解析中某个公式使用了某个定理,可以将这个公式链接到它运用的定理上。
构建好了知识图谱后,我们需要对构建好的知识图谱进行规模和质量的评估。
规模一般用知识图谱中有多少个实体,有多少个关系来描述。
质量一般可以用准确率来衡量。由于知识图谱三元组数量多,我们一般抽取若干个三元组,比如500个,对每一个三元组进行真假判断,然后统计准确率。
右表展示了抽取8个三元组,计算准确率的过程。
一般来讲,众包构建的准确率较高,自动化构建的准确率相对较低。
领域知识图谱准确率较高,通用知识图谱准确率相对较低。
知识图谱存储与查询
接下来我们介绍知识图谱存储与查询。
知识图谱存储和查询可以分为两类,一类是基于图数据库的,一类是基于关系型数据库的。
我们先介绍基于图数据库的管理系统。
属性图(property graph)是图数据库中最常用的数据模型,由节点和边构成。
比如下面这幅图,有三个节点,每个节点表示一个对象。
第一个节点的标签是Employee,这个节点的属性用键值对存储,比如姓名为Amy peters, 出生日期为1984年3月1日,ID为1。
Company 和 Employee之间有边HAS_CEO,边上也可以有属性,比如Company has CEO 开始日期为2008年。
下面是一个图数据库查询1号节点认识的节点中,年龄大于30的节点参加过的项目。
其中Gremlin和Cypher是图数据库两种查询语言。
Gremlin是过程式(procedural)语言;用户需指明具体的导航步骤,也就是在图上怎么走;它是业界标准查询语言,除了Neo4j外,几乎所有图数据库均支持。
Cypher是Neo4j专用语言,它是声明式(declarative)语言;用户只需声明“查什么”, 无需关心“怎么查”;
当然我们也可以利用关系型数据库对知识图谱进行存储。我们可以将图数据用三元组表示,将每一个三元组作为表中的一行记录。
下面是查询生于1850年,死于1934年,创建过公司的人。
采用关系型数据库存储,多跳查询会产生自连接(self-join)操作。
比如A->B为一跳,A->B->C为两跳。
也可以采用水平表的方式进行存储,每一行存储一个主语对应的所有的谓语和宾语。
这种存储方式适合于谓词较少的知识图谱。
主语一般只在极少的列上有值,导致存储空间浪费。
并且这种存储方式很难存储多值属性或者一对多关系。
比如函数的三要素是定义域、值域和对应法则,用水平表存储这种多值属性,需要对值拼接后才能存储。
也可以按照实体的类型对知识图谱进行划分,这种方式适合于实体类别较少的情况。
同样地,存储多值属性或一对多关系需要对值进行拼接。
也可以根据谓词对知识图谱进行划分。对每一个谓词创建一张表。这种方式解决了数据存储稀疏性问题,也可以存储多值属性。
但是涉及多个谓词的查询会导致多表连接操作。
知识图谱的应用
知识图谱的应用有很多,我们主要介绍知识图谱在推荐系统中的应用。
如图是一个新闻推荐的例子,假设某个用户看过一条新闻,这个新闻的内容是:
Boris Johnson Has Warned Donald Trump To Stick To The Iran Nuclear Deal(鲍里斯·约翰逊警告唐纳德·特朗普坚持伊朗核协议)。
从这条新闻中提取出4个实体,然后对这些实体做一跳,两跳,三跳扩展,会发现这些实体都指向另外一条新闻:
North Korean EMP Attack Would Cause Mass U.S. Starvation, Says Congressional Report(国会报告称,朝鲜电磁脉冲攻击将导致美国大规模饥荒)。
这2条新闻的单词都不一样,利用知识图谱可以发现他们底层之间的关联。
KG能给推荐系统带来什么?
首先知识图谱可以提高推荐系统的精度(Precision),更准确地发现item之间的关联,比如Cast Away 和 Forrest Gump 都是Tom Hanks 主演的。
知识图谱还可以提高推荐系统的多样性(Diversity)。电影可以通过主演扩展,也可以通过电影类型扩展,还可以通过导演来扩展,找到相似的电影。
知识图谱还可以提高推荐系统的可解释性(Explainability),知识图谱中的路径可以用来解释为什么会推荐这部电影。比如某个用户喜欢Cast Away这部电影,系统推荐了The Terminal这部电影,因为他们有相同的主演。
已知一个用户的集合Users,一个物品的集合Items,用户和物品的交互矩阵YYY,yuv=1y_{uv}=1yuv=1表示用户点击过某个物品,0表示未点击。
每个物品vvv在KG中对应一个实体。物品是实体的一个子集。
目标是学习一个函数FFF,给定uuu,vvv,预测点击率y^uv\hat y_{uv}y^uv,Θ\ThetaΘ是模型的参数。
DKN方法是给出一段新闻,提取新闻中的实体,根据这些实体,构建一个知识图谱子图,对子图做embedding,得到每个实体的embedding。
另外,实体的邻居节点可以作为该实体的上下文信息。将这些邻居实体的embedding求平均,得到该实体的上下文表示。如上图公式中e¯\bar ee¯就是实体eie_iei的上下文embedding。
前面介绍了实体表示,实体上下文表示,另外结合词向量,形成三个通道,进行卷积和池化,得到这个句子的表示,我们管这个方法叫KCNN。
假设用户点击过3条新闻,来了一个候选新闻,需要预测用户对候选新闻的点击概率。
用KCNN对这4条新闻做embedding,得到4个特征向量。
用Attention Net计算用户看过的每一条新闻与候选新闻之间的相似性。
用相似性得分对观看记录求加权平均,得到用户表示(User embedding)。
将用户表示和候选新闻表示拼接,用多层感知机(MLP)预测的点击率。
刚才DKN模型仅融入了实体的一跳信息,RippleNet除了融入一跳信息外,还融入了实体的两跳,三跳信息。Ripple是水波的意思。
另外还有直接利用**图神经网络(GNN)**对知识图谱进行表示。
用图神经网络处理知识图谱需要先将知识图谱中的关系转化为数值。对于每一个用户,引入一个打分函数,用于对知识图谱中每一个关系进行打分。不同用户同一个关系打分不一样,分值高低跟用户的偏好相关。
然后利用图神经网络进行前向传播。其中AuA_uAu是某个用户uuu对应的邻接矩阵。
DuD_uDu是顶点的度矩阵,这是一个对角矩阵。
WlW_lWl是训练参数矩阵。
HlH_lHl,Hl+1H_{l+1}Hl+1是实体对应的embedding矩阵。
σσσ是一个非线性函数。
我们总结一下。
谢谢阅读!如有错误,请批评指正~
资源推荐
作者简介
岳祥为好未来自然语言处理高级工程师
招聘信息
好未来技术团队正在热招前端、算法、后台开发等各个方向高级开发工程师岗位,大家可扫描下方二维码或微信搜索“好未来技术”,点击本公众号“技术招聘”栏目了解详情,欢迎感兴趣的伙伴加入我们!
也许你还想看
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。