知识抽取方法

2024-08-20 21:32
文章标签 方法 知识 抽取

本文主要是介绍知识抽取方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://pelhans.com/2018/03/16/xiaoxiangkg-note2/

本节介绍了针对结构化数据、非结构化数据、半结构化数据的知识抽取方法。

  • 知识抽取的概念
    • 知识抽取的子任务
  • 面向非结构化数据的知识抽取
    • 实体抽取
    • 实体识别与链接
    • 关系抽取
      • 基于模板的方法
        • 基于触发词的Pattern
        • 基于依存分析的Pattern
      • 监督学习
        • Pipeline训练
        • 联合模型
      • 半监督学习方法
        • 远程监督
    • 事件抽取
      • 事件抽取的pipeline方法
      • 联合训练
      • 基于深度学习的事件抽取方法
  • 面向结构化数据的知识抽取
  • 面向半结构化数据的知识抽取
    • 百科类知识抽取
    • Web网页数据抽取:包装器生成
      • 包装器归纳
      • 自动抽取
  • Ref

知识抽取的概念

知识抽取,即从不同来源、不同结构的数据中进行知识提取,形成知识(结构化数据)存入到知识图谱。大体的任务分类与对应技术如下图所示:

知识抽取的子任务

  • 命名实体识别
    • 检测: 北京是忙碌的城市。 [北京]: 实体
    • 分类:北京是忙碌的城市。 [北京]: 地名
  • 术语抽取 
    从语料中发现多个单词组成的相关术语。
  • 关系抽取 
    王思聪是万达集团董事长王健林的独子。 →  [王健林] <父子关系> [王思聪]
  • 事件抽取 
    例如从一篇新闻报道中抽取出事件发生是触发词、时间、地点等信息,如图二所示。
  • 共指消解 
    弄清楚在一句话中的代词的指代对象。例子如图三所示。

P3

面向非结构化数据的知识抽取

实体抽取

实体抽取抽取文本中的原子信息元素,通常包含任命、组织/机构名、地理位置、时间/日期、字符值等标签,具体的标签定义可根据任务不同而调整。如:

单纯的实体抽取可作为一个序列标注问题,因此可以使用机器学习中的HMM、CRF、神经网络等方法解决。

实体识别与链接

实体识别即识别出句子或文本中的实体,链接就是将该实体与知识库中的对应实体进行链接。其中涉及到了实体的识别与消岐技术。实体识别技术刚刚介绍过,下面把重点放在实体链接部分。

实体链接的流程如下图所示:

文字表述为,首先输入的是非结构化的文本数据,经由命名实体识别或词典匹配技术进行实体的指称识别。由于刚刚识别出来的实体可能是实体的部分表示或另类表示,因此需要结束表层名字扩展、搜索引擎、构建查询实体引用表等技术来对候选实体进行生成。经过该步骤生成的实体可能有多个候选项,因此需要对候选实体进行消岐,此处可使用基于图的方法、基于概率生成模型、基于主题模型或基于深度学习的方法。经过实体消岐后得到的唯一实体候选后就可以与知识库中的实体进行连接了。

举个例子:

关系抽取

关系抽取是从文本中抽取出两个或多个实体之间的语义关系。它是信息抽取研究领域的任务之一。如:

  • 王健林谈儿子王思聪:我期望他稳重一点。
    • 父子 (王健林, 王思聪)

根据关系抽取方法的不同,可以将其分为:基于模板的方法(触发词的Pattern, 依存句法分析的Pattern)、基于监督学习的方法(机器学习方法)、弱监督学习的方法(远程监督、Bootstrapping)。

基于模板的方法

基于模板的方法在小规模数据集上容易实现且构建简单,缺点为难以维护、可移植性差、模板有可能需要专家构建。

基于触发词的Pattern

首先定义一套种子模板,如:

其中的触发词为老婆、妻子、配偶等。根据这些触发词找出夫妻关系这种关系,同时通过命名实体识别给出关系的参与方。

基于依存分析的Pattern

以动词为起点,构建规则,对节点上的词性和边上的依存关系进行限定。一般情况下是形容词+名字或动宾短语等情况,因此相当于以动词为中心结构做的Pattern。其执行流程为:

监督学习

在给定实体对的情况下,根据句子上下文对实体关系进行预测,执行流程为:

  • 预先定义好关系的类别。
  • 人工标注一些数据。
  • 设计特征表示。
  • 选择一个分类方法。(SVM、NN、朴素贝叶斯)
  • 评估方法。

其优点为准确率高,标注的数据越多越准确。缺点为标注数据的成本太高,不能扩展新的关系。

Pipeline训练

即识别实体和关系分类是完全分离的两个过程,不会相互影响,关系的识别依赖于实体识别的效果,这样的好处的各模型相互独立,设计上较为容易,但误差会逐层传递,步骤太多有可能导致后续不可用。

联合模型

将实体识别和关系分类一起做,在一个模型中完成。

半监督学习方法

前面的监督学习效果虽好,但有标注数据集的获取困难。因此可以借助半监督学习的方法,此处又分为远程监督学习和Bootstrapping方法两种。

所谓远程监督方法就是知识库与非结构化文本对齐来自动构建大量训练数据,减少模型对人工标注数据的依赖,增强模型跨领域适应能力。Bootstrapping是通过在文本中匹配实体对和表达关系短语模式,寻找和发现新的潜在关系三元组。

远程监督

该方法认为若两个实体如果在知识库中存在某种关系,则包含该两个实体的非结构化句子均能表示出这种关系。如在某知识库中存在“创始人(乔布斯,苹果公司)”。那么就认为出现乔布斯和苹果公司的句子就是表述创始人这项关系。因此可构建训练正例:乔布斯是苹果公司的联合创始人和CEO。

远程监督流程为:

  • 从知识库中抽取存在关系的实体对。
  • 从非结构化文本中抽取含有实体对的句子作为训练样例。

远程监督可以利用丰富的知识库信息,减少一定的人工标注,但它的假设过于肯定,如乔布斯被赶出苹果公司。这句话表达的就不是创始人的例子,因此会引入大量的噪声,存在语义漂移现象。同时由于是在知识库中抽取存在的实体关系对,因此很难发现新的关系。

#### Bootstrapping

这个方法在很多任务中都有提到,其执行流程为:

  • 1.从文档中抽取出包含种子实体的新闻,如:
    • 姚明老婆 叶莉 简历身高曝光 
      X 老婆 Y 简历身高曝光
    • 姚明 与妻子 叶莉 外出赴约 
      X 与妻子 Y 外出赴约
    1. 将抽取出的Pattern去文档集中匹配
      • 小猪 与妻子 伊万 外出赴约
    1. 根据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选择器表达式来提取网页中的元素。但这样的通用性很差,因此也可以通过包装器归纳这种基于有监督学习的方法,自动的从标注好的训练样例集合中学习数据抽取规则,用于从其他相同标记或相同网页模板抽取目标数据。其运行流程为:

自动抽取

对于监督学习我们知道标注数据是它的短板,因此我们想到自动抽取的方法。网站中的数据通常是用很少的一些模板来编码的,通过挖掘多个数据记录中的重复模式来寻找这些模板是可能的。自动抽取的流程如图所示:

Ref

王昊奋知识图谱教程


这篇关于知识抽取方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1091228

相关文章

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行