文章首发于博客du_ok’s Notes,本文链接为知识图谱入门——知识抽取与挖掘(I)
本文主要介绍了面向非结构化数据、半结构化数据和结构化数据的知识抽取。
知识抽取任务定义
对于知识图谱来说,我们需要从不同来源、不同结构的数据中进行抽取,形成知识存入到知识图谱。
知识抽取的技术与难点:
- 从结构化数据库中获取知识:D2R
- 难点:复杂表数据的处理
- 从链接数据中获取知识:图映射
- 难点:数据对齐
- 从半结构化(网站)数据中获取知识:使用包装器
- 难点:方便的包装器定义方法,包装器自动生成、更新与维护
- 从文本中获取知识:信息抽取
- 难点:结果的准确率与覆盖率
知识抽取的子任务
- 命名实体识别
- 检测:西瓜书的作者是周志华。→[西瓜书]:实体
- 分类:西瓜书的作者是周志华。→[西瓜书]:书籍
- 术语抽取
- 从语料中发现多个单词组成的相关术语。
- 关系抽取
- 抽取出实体、属性等之间的关系。
例子:王思聪是万达集团董事长王健林的独子。→[王健林] <父子关系> [王思聪]
- 抽取出实体、属性等之间的关系。
- 事件抽取
- 相当于多元关系抽取
例子:
- 相当于多元关系抽取
- 共指消解
例子:
非结构化数据的知识抽取
实体抽取
实体抽取的任务是抽取文本中的原子信息元素,包括人名、组织/机构名、地理位置、时间/日期、字符值、金额值等(原子根据场景来定义)。
例子:
非结构化数据的实体抽取可以认为是一个序列标注问题,于是我们可以使用序列标注的方法,例如使用HMM、CRF等方法,也可以使用LSTM+CRF的方法,几种方法通过F1值的比较如下:
实体识别与链接
识别非结构化数据(文本)中的实体,并将它们链接到知识库中,是让机器理解自然语言的第一步,也是至关重要的一步。实体识别出来的实体名可能是有歧义的,可能有多个实体都对应着某个实体名,也可能摸个实体对应着多个实体名,如china可能是中国也可能是瓷器,此时我们需要对实体进行消歧与链接。
实体链接的流程如下:
实体链接的例子:
关系抽取
关系抽取是从文本中抽取出两个或者多个实体之间的语义关系。关系抽取主要有基于模板的方法、监督学习方法和弱监督学习方法。
基于模板的方法
基于触发词的Pattern
首先确定一个触发词(trigger word),然后根据触发词做pattern的匹配及抽取,然后做一个映射。
例子:
基于依存句法分析的Pattern
文本一般具有一些句法结构,如主谓结构、动宾结构、从句结构、这些结构可以是跨多个词所产生的。最常见的情况是动宾短语,所以我通常以动词为起点,构建规则,对节点上的词性和边上的依存关系进行限定(可以理解为泛化的正则表达式)。具体的流程如下:
例子:董卿现身国家博物馆看展优雅端庄大方。
依存分析:
上图中,我们可以看出这个例子中的依存关系路径中“-1”代表谓语,同时可以看出“董卿”这个词依存关系路径为1,说明此处的董卿是和词顺序为“1”的现身关联,于是可以得到“董卿,现身”;接着看“国家博物馆”也是和“现身”所关联,所以可以得出一个动宾关系“现身,国家博物馆”。
抽取结果:
(董卿, 现身, 国家博物馆)→位于(董卿, 国家博物馆)
监督学习的方法
确定实体对的情况下,根据句子上下文对实体关系进行预测,构建一个监督学习应该怎么做?
- 预先定义好关系的类别
- 人工标注一些数据
- 设计特征表示
- 选择一个分类方法 (SVM、NN、Naive Bayes)
- 评估结果
上述步骤主要需要考虑特征的选择,特征的选择往往使用如下做法:
常规做法
- 轻量级特征
- 实体前后的词
- 实体的类型
- 实体之间的距离(也就是实体之间的相似度)
- 中等量级特征
- Chunk序列:如词组
- 重量级特征
- 实体间的依存关系路径
- 实体间树结构的距离
- 特定的结构信息
深度学习方法——Pipeline
识别实体和关系分类是完全分离的两个过程,不会相互影响,关系的识别依赖于实体识别的效果
-
CR-CNN模型
- 仅使用词向量和位置向量作为输入
- F1值84.1,超过现有的非深度学习方法 -
Att-CNN模型
- 应用注意力机制(表现为不同的词对上下文来说有不同的权重)
- 目前最好的方法(F1值88.0) -
Att-BLSTM模型
存在的问题:存在错误传递
深度学习方法——Joint Model
实体识别和关系分类的过程是共同优化的。同时整合前面的两个任务,是全局最优化,效果一般情况下优于Pipeline,但是参数空间会提高。
- LSTM-RNNs模型
该模型将依存关系使用Bi-TreeLSTM的树型模型表示。
监督学习的方法小结
- 优点:准确率高,标注数据越多越准确
- 缺点:标注数据成本太高;不能扩展新的关系
弱监督学习的方法
当我们的标注数据不足或数据量又特别大的情况下,关系的抽取可以采用弱监督学习方法。
远程监督方法
知识库与非结构化文本对齐来自动构建大量训练数据,减少模型对人工标注数据的依赖,增强模型跨领域适应能力。
若两个实体在知识库中存在某种关系,则包含该两个实体的非结构化句子均能表示出这种关系。
例子:
在某知识库中存在: 创始人 (乔布斯, 苹果公司)
则可构建训练正例:乔布斯是苹果公司的联合创始人和CEO
具体的步骤:
- 从知识库中抽取存在关系的实体对
- 从非结构化文本中抽取含有实体对的句子作为训练样例
这里需要有标注的数据给定一些关系,这些数据该如何得到是其中的一个问题。可以通过已有的知识库的三元组出发,将实体进行实体链接或实体发现,也就是使用现有的知识库去标注数据。但是这些标注数据不一定都满足我们需要的关系(即可能含有噪声),于是我们需要训练处一个抗噪模型。
缺点: 假设过于肯定,引入大量噪声,存在语义漂移现象;很难发现新的关系。
Bootstrapping
在前面的方法是基于手工书写的模板(如基于dependency的模板)来做的,在Bootstrapping中,我们使用并需要自己定义模板,而是是去学习模板。
整体步骤如下:
假设给定了一个种子集合,种子词一般都是实体对,如:<姚明,叶莉>
- 从文档中抽取出包含种子实体词的新闻;
如图,将原来的种子词替换成一个置位词(如图中的X, Y),同时可以利用互联网的冗余性对每个学到的pattern进行计数并算出频率,由于会有许多相似的pattern,可以对这样的pattern做聚类来学出一个更加抽象的pattern。
- 将抽取出来的Pattern与文档集中匹配;
- 根据Pattern抽取出的新文档如种子库,迭代多轮直到不符合条件。
优点: 构建成本低,适合大规模构建;可以发现新的关系 (隐含的)。
缺点: 对初始给定的种子集敏感;存在语义漂移问题;结果准确率较低;缺乏对每一个结果的置信度的计算。
事件抽取
事件抽取的概念
从自然语言中抽取出用户感兴趣的事件信息,并以结构化的形式呈现出来,例如事件发生的时间、地点、发生原因、参与着等。
事件抽取的相关术语:
- 事件描述 (Event Mention):描述事件的词组或句子
- 事件触发 (Event Trigger):表明事件出现的主要词汇
- 事件元素 (Event Argument):事件的重要信息
- 元素角色 (Argument Role):元素在句子中的语义角色
事件是可以嵌套的,可以做事件的检测与跟踪:
事件抽取的任务:
- 事件抽取任务最基础的部分包括:
- 识别事件触发词及事件类型
- 抽取事件元素同时判断其角色
- 抽出描述事件的词组或句子
- 此外,事件抽取任务还包括:
- 事件属性标注
- 事件共指消解
事件抽取的Pipeline方法
有监督的事件抽取方法的标准流程一种pipeline的方法,将事件抽取任务转化为多阶段的分类问题,需要的分类器包括:
- 事件触发次分类器(Trigger Classifier)
- 用于判断词汇是否是是事件触发词,以及事件的类别
- 元素分类器(Argument Classifier)
- 判别词组是否是事件的元素
- 元素角色分类器(Role Classifier)
- 判定元素的角色类别
- 属性分类器(attribute classifier)
- 判定事件的属性
- 可报告性分类器(Reportable-Event Classifier)
- 判定是否存在值得报告的事件实例
分类器模型可以是机器学习方法中的各种分类器模型,比如MaxEnt、SVM等。
典型的分类特征:
存在的问题:
- 误差从前面的环节传播到后面的环节,使得性能急剧衰减
- 各个环节的预测任务是独立的,之间没有互动
- 无法处理全局的依赖关系
事件抽取的联合方法
Joint Inference(联合推理方法):
是一种集成学习的方法,构建n个模型,最后对n个模型的结果进行求和等方法来预测。
可以基于以下方法:
- Constrained Conditional Models
- ILP Re-ranking (整形规划重排序)
- Dual decomposition
Joint Modeling:
实际上是一种多任务学习,在不同任务中共享一些隐层特征,如word特征、embedding特征、句法特征等。
可以基于如下方法:
- Probabilistic Graphical Models
- Markov logic networks
Joint Modeling with Structured Prediction:
- 使用一个模型同时抽取出所有的信息的联合。
- 将问题建模成结构预测问题,使用搜索方法进行求解。
- 避免了误差传播导致的性能下降。
- 全局特征可以从整体的结构中学习得到,从而使用全局的信息来提升局部的预测。
基于深度学习的事件抽取方法
基于动态多池化卷积神经网络的事件抽取方法:
动态多池化层:
- 传统的神经网络利用最大池化层
- 事件抽取中,一个句子可能包含多个事件
结构化数据的知识抽取
结构化数据即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据,如关系数据库。如下将左边的结构化ER模型转换成右边的结构化模型就是从结构化数据中进行知识抽取的例子。
Direct Mapping
通过明确在关系模式中编码的语义,将关系数据转换为RDF。如下按照一些简单的规则创建uri:Map
- table to class
- column to property
- row to resource
- cell to literal value
- in addition cell to URI
- if there is a foreign key constraint
例子:
R2RML
R2RML: RDB to RDF Mapping Language
映射的任务是将逻辑表作为输入,然后依据规则“triples map”将其转换成三元组的集合。
逻辑表:
- a database table
- a database view, or
- an SQL query
Triples Maps:
triples are produced by:
- subject maps
- predicate maps
- object maps.
例子:
- The subject IRI is generated from the empno column by the template(http://data.example.com/employee/{empno})
- The predicate IRI is the constant ex:name
- The object is the literal "SMITH”, that is copied from the ENAME column
半结构化数据的知识抽取
百科类知识抽取
接下来以从维基百科抽取图灵奖获得者Tim Berners-Lee来介绍。
抽取出Label,将短摘要(第一段)作为comment,长摘要作为abstract;
通过Wikimedia Commons抽取出图像信息作为depiction;
将infobox的数据转换成一些property;
接下来还包括抽取内链、类别、歧义以及重定向等。
WEB网页数据抽取:包装器
互联网中的数据往往也具有一定的结构,我们可以通过包装器等方法进行知识的抽取。
包装器是一个能够将数据从HTML网页中抽取出来,并且将它们还原为结构化的数据的软件程序。包装器抽取流程如下:
对于包装器的生成我们可以使用手工方法、包装器归纳方法和自动抽取的方法。
包装器生成:手工方法
手工方法需要查看网页结构和代码,通过人工分析,手工写出适合这个网站的表达式,这个表达式的形式可以是XPath表达式,也可以是CSS选择器的表达式等。
包装器生成:包装器归纳
包装器归纳是基于有监督学习的,他从标注好的训练样例集合中学习数据抽取规则,用于从其他用相同标记或相同网页模板抽取目标数据。
- 网页清洗
有些网页结构不规范,例如前后标签不对成,没有结束标签符。不规范的网页结构容易在抽取的过程中产生噪声。清洗可以用Tidy来完成。 - 网页标注
网页标注是在网页上标注你需要抽取数据的过程。标注的过程可以是给网页中的某个位置打上特殊的标签表明这是需要抽取的数据。例如我们要抽取上面举例的“华为P10”搜索页面的商品信息和价格信息,就可以在通过在他们所在的标签里打上一个特殊的标记作为标注。 - 包装器空间的生成
对标注的数据生成XPath集合空间,对生成的集合进行归纳,形成若干个子集。归纳的规则是在子集中的XPath能够覆盖多个标注的数据项,具有一定的泛化能力。 - 包装器评估
评估规则一:准确率。将筛选出来的包装器对原先训练的网页进行标注,统计与人工标注的相同项的数量,除以当前标注的总数量。准确率越高评分越高。
评估规则二:召回率。将筛选出来的包装器对原先训练的网页进行标注,统计与人工标注的相同项的数量,除以人工标注的总数量。召回率越高评分越高。 - 包装器归纳结果
经过前面一系列的工作之后,得到“华为P10”搜索结果页面最后价格信息的XPath的路径。
例子:
包装器生成:自动抽取
网站中的数据通常是用很少的一些模板来编码的,通过挖掘多个数据记录中的重复模式来寻找这些模板是可能的。
- 包装器训练
自动抽取网页中的信息不需要任何的先验知识和人工数据的标注。将一组网页通过聚类将相似的网页分成若干个组,每组相似的网页将获得不同的包装器。 - 包装器应用
将需要抽取的网页与之前生成包装器的网页进行比较,在某个分类下则使用该分类下的包装器来获取网页中的信息。
例子:
三种方法比较:
WEB TABLE 抽取
为了解释Web table中隐含的语义,一些工作将其中的内容标注为RDF三元组。这种标注的第一步就是实体链接 (entity linking ), 即将表格中各单元格的字符串映射到给定知识库的实体上。
表格实体链接步骤:
- 候选生成
针对表格单元格中的每个字符串,从给定的知识库中识别候选实体。(token匹配 ,字符串匹配,同义词匹配……)
例子:
- 实体消岐
从给定字符串所对应的实体集中选择唯一的一个实体作为链接实体。
例子:
位于相同行或者列的字符串可能相关,换句话说,出现在同一表格中的任意两个字符串都存在某种潜在的关联。
构建实体消岐图:
对每张给定的表格建立一个实体消岐图每个图由如下的元素构成:
- 字符串节点, 实体节点
- 字符串-实体 边: 字符串与候选实体间的无向边,
- 实体-实体 边: 实体间的无向边。
例子:
计算实体链接影响因子:
两类实体链接影响因子:
- 每个字符串的初始重要性(importance of each mention);
- 不同节点间的语义相关度(semantic relatedness between different nodes)。
实体消岐算法—PageRank:PageRank算法 (Iterative probability propagation) 用来整合不同的实体链接影响因子从而做出最终的实体链接决定.
生成三元组: