知识抽取的概念
知识抽取,即从不同来源、不同结构的数据中进行知识提取,形成知识(结构化数据)存入到知识图谱。大体的任务分类与对应技术如下图所示:
知识抽取的子任务
命名实体识别
检测: 北京是忙碌的城市。[北京]:实体
分类:北京是忙碌的城市。[北京]: 地名
术语抽取
从语料中发现多个单词组成的相关术语。
关系抽取
王思聪是万达集团董事长王健林的独子。→ → [王健林] <父子关系> [王思聪]
事件抽取
例如从一篇新闻报道中抽取出事件发生是触发词、时间、地点等信息,如图二所示。
共指消解
弄清楚在一句话中的代词的指代对象。例子如图三所示。
面向非结构化数据的知识抽取
实体抽取
实体抽取抽取文本中的原子信息元素,通常包含任命、组织/机构名、地理位置、时间/日期、字符值等标签,具体的标签定义可根据任务不同而调整。如:
单纯的实体抽取可作为一个序列标注问题,因此可以使用机器学习中的HMM、CRF、神经网络等方法解决。
实体识别与链接
实体识别即识别出句子或文本中的实体,链接就是将该实体与知识库中的对应实体进行链接。其中涉及到了实体的识别与消岐技术。实体识别技术刚刚介绍过,下面把重点放在实体链接部分。
实体链接的流程如下图所示:
文字表述为,首先输入的是非结构化的文本数据,经由命名实体识别或词典匹配技术进行实体的指称识别。由于刚刚识别出来的实体可能是实体的部分表示或另类表示,因此需要结束表层名字扩展、搜索引擎、构建查询实体引用表等技术来对候选实体进行生成。经过该步骤生成的实体可能有多个候选项,因此需要对候选实体进行消岐,此处可使用基于图的方法、基于概率生成模型、基于主题模型或基于深度学习的方法。经过实体消岐后得到的唯一实体候选后就可以与知识库中的实体进行连接了。
举个例子:
关系抽取
关系抽取是从文本中抽取出两个或多个实体之间的语义关系。它是信息抽取研究领域的任务之一。如:
- 王健林谈儿子王思聪:我期望他稳重一点。
- 父子 (王健林, 王思聪)
根据关系抽取方法的不同,可以将其分为:基于模板的方法(触发词的Pattern, 依存句法分析的Pattern)、基于监督学习的方法(机器学习方法)、弱监督学习的方法(远程监督、Bootstrapping)。
基于模板的方法
基于模板的方法在小规模数据集上容易实现且构建简单,缺点为难以维护、可移植性差、模板有可能需要专家构建。
基于触发词的Pattern
首先定义一套种子模板,如:
其中的触发词为老婆、妻子、配偶等。根据这些触发词找出夫妻关系这种关系,同时通过命名实体识别给出关系的参与方。
基于依存分析的Pattern
以动词为起点,构建规则,对节点上的词性和边上的依存关系进行限定。一般情况下是形容词 名字或动宾短语等情况,因此相当于以动词为中心结构做的Pattern。其执行流程为:
监督学习
在给定实体对的情况下,根据句子上下文对实体关系进行预测,执行流程为:
预先定义好关系的类别。
人工标注一些数据。
设计特征表示。
选择一个分类方法。(SVM、NN、朴素贝叶斯)
评估方法。
其优点为准确率高,标注的数据越多越准确。缺点为标注数据的成本太高,不能扩展新的关系。
Pipeline训练
即识别实体和关系分类是完全分离的两个过程,不会相互影响,关系的识别依赖于实体识别的效果,这样的好处的各模型相互独立,设计上较为容易,但误差会逐层传递,步骤太多有可能导致后续不可用。
联合模型
将实体识别和关系分类一起做,在一个模型中完成。
半监督学习方法
前面的监督学习效果虽好,但有标注数据集的获取困难。因此可以借助半监督学习的方法,此处又分为远程监督学习和Bootstrapping方法两种。
所谓远程监督方法就是知识库与非结构化文本对齐来自动构建大量训练数据,减少模型对人工标注数据的依赖,增强模型跨领域适应能力。Bootstrapping是通过在文本中匹配实体对和表达关系短语模式,寻找和发现新的潜在关系三元组。
远程监督
该方法认为若两个实体如果在知识库中存在某种关系,则包含该两个实体的非结构化句子均能表示出这种关系。如在某知识库中存在“创始人(乔布斯,苹果公司)”。那么就认为出现乔布斯和苹果公司的句子就是表述创始人这项关系。因此可构建训练正例:乔布斯是苹果公司的联合创始人和CEO。
远程监督流程为:
- 从知识库中抽取存在关系的实体对。
- 从非结构化文本中抽取含有实体对的句子作为训练样例。
远程监督可以利用丰富的知识库信息,减少一定的人工标注,但它的假设过于肯定,如乔布斯被赶出苹果公司。这句话表达的就不是创始人的例子,因此会引入大量的噪声,存在语义漂移现象。同时由于是在知识库中抽取存在的实体关系对,因此很难发现新的关系。
Bootstrapping
这个方法在很多任务中都有提到,其执行流程为:
从文档中抽取出包含种子实体的新闻,如:
姚明老婆 叶莉 简历身高曝光
X 老婆 Y 简历身高曝光
姚明 与妻子 叶莉 外出赴约
X 与妻子 Y 外出赴约
将抽取出的Pattern去文档集中匹配
小猪 与妻子 伊万 外出赴约
根据Pattern抽取出的新文档如种子库,迭代多轮直到不符合条件
该方法的优点为构建成本低,适合大规模的构建,同时还可以发现新的(隐含的)关系。缺点为对初始给定的种子集敏感,存在语义漂移现象,结果的准确率较低等。
事件抽取
从自然语言中抽取出用户感兴趣的事件信息,并以结构化的形式呈现出来,例如事件发生的时间、地点、发生原因、参与者等。如:
时间抽取任务最基础的部分包括:
- 识别事件触发词及事件类型
- 抽取事件元素同时判断其角色
- 抽出描述事件的词组或句子
此外,事件抽取任务还包括:
- 事件属性标注
- 事件共指消解
对于事件抽取,也可分为Pipeline方法和联合训练的方法。
事件抽取的pipeline方法
有监督的事件抽取方法的标准流程一种pipeline的方法,将事件抽取任务转化为多阶段的分类问题,需要的分类器包括:
事件触发次分类器(Trigger Classifier)
用于判断词汇是否是是事件触发词,以及事件的类别
元素分类器(Argument Classifier)
判别词组是否是事件的元素
元素角色分类器(Role Classifier)
判定元素的角色类别
属性分类器(attribute classifier)
判定事件的属性
可报告性分类器(Reportable-Event Classifier)
判定是否存在值得报告的事件实例
可以看到,这个流程还是蛮长的,因此Pipeline存在的误差传递问题在这里格外严重,因此我们需要联合训练:
基于深度学习的事件抽取方法
传统的方法需要借助外部NLP工具,还需要人工设计特征,但深度学习可以自动提取句子特征,减少对外部NLP工具的依赖。
下图给出一个典型的基于动态多池化卷积神经网络的事件抽取方法:
面向结构化数据的知识抽取
所谓结构化数据就是指类似于关系库中表格那种形式的数据,他们往往各项之间存在明确的关系名称和对应关系。因此我们可以简单的将其转化为RDF或其他形式的知识库内容。一种常用的W3C推荐的映射语言是R2RML(RDB2RDF)。一种映射结果如下图所示:
现有的工具免费的有D2R,Virtuoso、MOrph等。
面向半结构化数据的知识抽取
半结构化数据是指类似于百科、商品列表等那种本身存在一定结构但需要进一步提取整理的数据。
百科类知识抽取
对于百科类数据我们都较为熟悉,下面着重介绍怎么从百科里抽取知识:
上图给出从百科里抽取知识的流程介绍。(待补)
Web网页数据抽取:包装器生成
现在我们的目标网站是部分结构化的,如:
包装器是一个能够将数据从HTML网页中抽取出来,并且将它们还原为结构化的数据的软件程序。使用它提取信息流程为:
包装器归纳
对于一般的有规律的页面,我们可以使用正则表达式的方式写出XPath和CSS选择器表达式来提取网页中的元素。但这样的通用性很差,因此也可以通过包装器归纳这种基于有监督学习的方法,自动的从标注好的训练样例集合中学习数据抽取规则,用于从其他相同标记或相同网页模板抽取目标数据。其运行流程为:
自动抽取
对于监督学习我们知道标注数据是它的短板,因此我们想到自动抽取的方法。网站中的数据通常是用很少的一些模板来编码的,通过挖掘多个数据记录中的重复模式来寻找这些模板是可能的。自动抽取的流程如图所示: