实体关系的抽取详解

引言

前面我们讲到了命名实体识别,在信息抽取领域是非常重要的,那么今天我们来说一下另一个比较重要的领域实体关系抽取,也就是我们再抽取完实体之后,再抽取他们之间的关系,举个例子:”张三毕业于北京大学,工作在北京。”首先我们可以抽取实体“张三”、“北京大学”和“北京”,下面我们就是得进行关系的抽取。如下图:
在这里插入图片描述
因此我们在信息抽取后一般就会形成这样的三元组{张三,毕业于,北京大学},{张三,工作在,北京},我们在使用这样的三元组进行我们相应的任务。下面我们来看一下关系抽取相关的技术有哪些:

1、基于规则

2、监督学习

3、半监督学习/无监督学习
− B o o t s t r a p \quad\quad-Bootstrap Bootstrap
− D i s t a n t s u p e r v i s i o n \quad\quad-Distant supervision Distantsupervision

基于规则的关系抽取

基于规则的关系抽取的方法是人工定义好某种关系的实体集合,然后遍历文本,找到符合的实体,将实体之间的关系抽取,举个例子:
在这里插入图片描述
我们现在定义了is-a的实体,也就是属于关系的,下一步我们就开始遍历文本,在文本中我们发现这么一句话:“苹果是一种水果”,这里我们找到了实体“苹果”,和“水果”,那么我们就将“是一种”提取出来。如果又遍历到“香蕉属于水果”同理我们可以将“属于”提取出来就这样根据我们的规则将遍历内部实体,将对应的关系提取出来。这种方法实现起来比较简单 我们来分析一下它的优缺点:
优点:
1、也就是它只返回我们想要的结果,不会出现其他不正确的结果,比较准确。

2、不需要训练数据

缺点:

1、大量关系未覆盖

2、人力成本比较高

3、规则本身就很难设计

基于监督的学习方法

这种方法也就是我们比较常用的利用训练数据计算出一个比较优秀的模型。然后利用模型提取实体关系。一般的流程是:

1、定义实体关系

2、定义实体类型

3、训练数据的准备

举个例子:
“中国是沉睡的雄狮,拿破仑曾经这么说过”

在这里我们要有实体"中国”和“拿破仑”那么我们怎么训练呢?

就是我们将特征向量<“中国”,”拿破仑”>输入到模型中,然后让模型输出出这个向量属于每个关系的概率,所以这里的关键点是特征向量,也就是我们怎么定义向量<“中国”,“拿破仑”>这里就用到了我们在命名实体识别时提到的特征工程

特征工程:我们尽可能的将特征向量体现出两个实体之间关系的特点,因此特征工程可以:

1、将两实体之间的词,前后词作为特征

2、将当前词前后词的词性考虑为特征

3、将实体类别作为特征

4、位置相关的信息:实体之间的数量,实体的在文本中的位置

5、句法分析:两词之间的最短路径

6、依存文法:最短路径

等等你能够想到的能够体现两词之间的关系的特征

下面我们将特征输入到模型中进行分类如下图:
在这里插入图片描述

当然现在还有中模型时这样的
在这里插入图片描述
加一个二分类模型判断是否有关系,如果有关系在进行分类。因为数据集中很多实体都是无关系的,所以加上一个二分类的模型进行预判一下。

分类模型有很多种选择:SVM,HMM,LSTM等都行

基于半监督的学习方法

在这里我们主要介绍Bootstrap算法:利用算法生成规则

Bootstrap算法

刚开始与基于规则类似,我们先设置一个基于某种关系的实体库:
在这里插入图片描述
第一步:生成规则

1、文本:李航写了统计分析

规则:xx写了xx

2、机器学习是由周志华写的

规则:xx是由xx写的

第二步:将规则加入规则库

xx写了xx

xx是由xx写的

3、利用规则库搜索其他实体

文本:王五写了数据结构

实体:王五,数据结构

文本:算法基础是由赵六写的

实体:算法基础,赵六

4、将实体加入实体库
在这里插入图片描述
然后循环上面的步骤,让计算机自己寻找规则以及相应的实体

我们来分析一下这个算法的优缺点:
优点很明显:
不需要训练数据
不需要人工成本
规则自己生成
关系提取的范围比较广
缺点:
精度不够,一旦某一环节发生错误,错误会随着循环不断扩大,举个例子:我们在第一步一旦提取了一个”苹果”,”水果”这样的实体。随着循环我们提取的规则会跑偏。
所以我们为了解决这个问题,我们在循环的过程中会加入评估和过滤这也就是Bootstrap的改进算法:snow Ball

snow Ball算法

snow Ball算法是基于Bootstrap算法的只是在循环中加入了评估和过滤机制,我们来看一下对应的流程:

首先我们还是设计一个关于某种关系的实体库:
在这里插入图片描述

根据实体生成规则

第一步根据实体生成规则:
我的都知道微软(部署在)美国地区

优秀的知音(建立在)中国的广州

某某年IBM(成立于)德国南部

这个时候我们希望对这些规则做一个相似度的匹配,下面问题来了,怎么计算规则之间的相似度:
这里采用的是转换向量的形式,我们将规则设计成一个五元组的形式:

左边 实体 中间 实体 右边

比如:优秀的知音(建立在)中国的广州我们将其设置为

“优秀的”,“知音”,“建立在”,“中国”,“的广州”

然后分别将“左边”,“中间”,"右边”转换成向量,这样对于一个规则那就是:

<左>,实体,<中间>,实体,<右>

那我们在计算规则之间的相似度就是计算对应<左>,<中间>,<右>的相似度。例如:

我的都知道微软(部署在)美国地区

优秀的知音(建立在)中国的广州

转换为:

<左1>,微软,<中间1>,美国,<右1>

<左2>,知音,<中间2>,中国,<右2>

s i m = u 1 s i m ( 左 1 , 左 2 ) + u 2 s i m ( 中 间 1 , 中 间 2 ) + u 3 s i m ( 右 1 , 右 2 ) sim=u_1sim(左1,左2)+u_2sim(中间1,中间2)+u_3sim(右1,右2) sim=u

  • 11
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值