关系提取是指从文本中提取语义关系,这种语义关系通常发生在两个或多个实体之间。这些关系可以是不同类型的。" Paris is in France "表示巴黎与法国之间的" is in "关系。这可以用三元组(Paris, is in, France)来表示。

信息抽取(Information Extraction, IE)是从自然语言文本中抽取结构化信息的领域。该领域用于各种NLP任务,如创建知识图、问答系统、文本摘要等。关系抽取本身就是IE的一个子域。

关系提取有五种不同的方法:

基于规则的关系提取

弱监督关系提取

监督关系提取

模糊监督关系提取

无监督的关系提取

我们将在一个较高的层次上讨论所有这些问题,并讨论每个问题的优缺点。

基于规则的关系提取

许多实体的关系可以通过手工模式的方式来提取,寻找三元组(X,α,Y),X是实体,α是实体之间的单词。比如,“Paris is in France”的例子中,α=“is”。这可以用正则表达式来提取。

句子中的命名实体

句子中的词性标记

仅查看关键字匹配也会检索出许多假阳性。我们可以通过对命名实体进行过滤,只检索(CITY、is in、COUNTRY)来缓解这种情况。我们还可以考虑词性(POS)标记来删除额外的假阳性。

这些是使用word sequence patterns的例子,因为规则指定了一个遵循文本顺序的模式。不幸的是,这些类型的规则对于较长范围的模式和具有更大多样性的序列来说是不适用的。例如:“Fred and Mary got married”就不能用单词序列模式来成功地处理。

句子中的依赖路径

相反,我们可以利用句子中的从属路径,知道哪个词在语法上依赖于另一个词。这可以极大地增加规则的覆盖率,而不需要额外的努力。

我们也可以在应用规则之前对句子进行转换。例如:“The cake was baked by Harry”或者“The cake which Harry baked”可以转化成“Harry bake The cake”。然后我们改变顺序来使用我们的“线性规则”,同时去掉中间多余的修饰词。

优点

人类可以创造出具有高准确率的模式

可以为特定的领域定制

缺点

人类模式的召回率仍然很低(语言种类太多)

需要大量的人工工作来创建所有可能的规则

必须为每个关系类型创建规则

弱监督的关系提取

这里的思想是从一组手工编写的规则开始,通过迭代的方式从未标记的文本数据中自动找到新的规则。或者,你可以从一个种子元组开始,用特定的关系描述实体。例如,seed={(ORG:IBM, LOC:Armonk), (ORG:Microsoft, LOC:Redmond)}表示具有“based in”关系的实体。

Snowball是一个相当古老的算法示例,它可以实现以下功能:

从一组种子元组开始(或使用一些手工规则从未标记的文本中提取一组种子)。

从未标记的文本中提取和元组匹配的共现词,并用NER(命名实体识别器)标记它们。

为这些事件创建模式,例如“ORG is based in LOC”。

从文本中生成新的元组,例如(ORG:Intel, LOC: Santa Clara),并添加到种子集中。

执行步骤2或终止并使用创建的模式进行进一步提取

优点

可以发现比基于规则的关系提取更多的关系(更高的召回率)

更少的人力投入(只需要高质量的种子)

缺点

随着每次迭代,模式的集合更容易出错

在通过元组共现生成新模式时必须小心,例如“IBM shut down an office in Hursley”可能被错误的认为是“based in”关系。

新的关系类型需要新的种子(必须手动提供)

有监督的关系提取

进行监督关系提取的一种常见方法是训练一个层叠的二分类器(或常规的二分类器)来确定两个实体之间是否存在特定的关系。这些分类器将文本的相关特征作为输入,从而要求文本首先由其他NLP模型进行标注。典型的特征有:上下文单词、词性标注、实体间的依赖路径、NER标注、tokens、单词间的接近距离等。

我们可以通过下面的方式训练和提取:

根据句子是否与特定关系类型相关或不相关来手动标注文本数据。例如“CEO”关系:“Apple CEO Steve Jobs said to Bill Gates.” 是相关的,“Bob, Pie Enthusiast, said to Bill Gates.”是不相关的。

如果相关句子表达了这种关系,就对正样本/负样本进行手工的标注。“Apple CEO Steve Jobs said to Bill Gates.”:(Steve Jobs, CEO, Apple) 是正样本,(Bill Gates, CEO, Apple)是负样本。

学习一个二分类器来确定句子是否与关系类型相关

在相关的句子上学习一个二分类器,判断句子是否表达了关系

使用分类器检测新文本数据中的关系。

有些人选择不训练“相关分类器”,而是让一个单一的二分类器一次性确定这两件事。

优点

高质量的监督信号(确保所提取的关系是相关的)

我们有明确的负样本

缺点

标注样本很贵

增加新的关系又贵又难(需要训练一个新的分类器)

对于新的领域不能很好的泛化

只对一小部分相关类型可用

模糊监督的关系提取

我们可以将使用种子数据(比如弱监督的RE)和训练分类器(比如有监督的RE)的思想结合起来。但是,我们可以从现有的知识库(KB),比如Wikipedia、DBpedia、Wikidata、Freebase、Yago中得到种子,而不是自己提供一组种子元组。

模糊监督的关系抽取方法:

对于知识库中我们感兴趣的每个关系类型进行循环

对于知识库中该关系的每个元组进行循环

从我们的未标记文本数据中选择可以匹配到这些元组的句子(元组的两个单词在句子中是共现的),并假设这些句子是这种关系类型的正样本

从这些句子中提取特征(如词性、上下文词等)

训练一个有监督的分类器

优点

更少的人力

可以扩展使用大量的标注数据和大量的关系

不需要迭代(相比于弱监督关系抽取)

缺点

训练语料库的标注噪声(句子中同时具有这两个单词可能并没有描述这种关系)

没有明显的负样本(可以通过匹配没有关系的实体来解决)

受限于知识库

需要在任务上进行非常仔细的调试

无监督的关系提取

在这里,我们从文本中提取关系,而不需要标注任何训练数据、提供一组种子元组或编写规则来捕获文本中不同类型的关系。相反,我们依赖于一组非常普遍的约束和启发。这算不算是无监督的,是有点争议的,因为我们使用的“规则”是在一个更普遍的层面上。此外,在某些情况下,甚至可以利用小的标注文本数据集来设计和调整系统。然而,这些系统一般需要较少的监督。开放信息提取(Open Information Extraction, Open IE)通常指的是这种范式。

TextRunner是属于这类关系提取方案的一种算法。其算法可以描述为:

1.  在一个小语料库上训练一个自监督分类器

对于每一个解析过的句子,找出所有名词短语(X, Y),它们之间由一系列单词r连接起来。如果它们满足所有的约束条件,就将它们标注为正样本,否则就将它们标注为负样本。

将每个三元组(X、r、Y)映射到一个特征向量表示上(例如,对POS标注进行聚合、r中的停止词数量、NER标注等)。

训练二分类器来识别可靠的候选

2. 遍历整个语料库并提取可能的关系

从语料库获取潜在的关系

根据分类器的到的候选的置信度,保留/丢弃候选

3.  基于文本冗余度的关系排序评估

规范化(忽略不必要的修饰词)和合并相同的关系

计算关系中出现的不同句子的数量,并为每个关系分配概率

OpenIE 5.0和Stanford OpenIE是这样做的两个开源系统。它们比TextRunner更现代(这里只是用它来演示范例)。我们可以期望从这样的系统输出许多不同的关系类型(因为我们没有指定我们感兴趣的关系类型)。

优点

不需要/几乎不需要标注训练数据

不需要我们手动预先指定每个甘心去的关系,而是考虑所有可能的关系类型

缺点

系统的表现在很大程度上取决于约束和启发法的构造有多好

关系不像预先指定的关系类型那样规范化

python实体关系抽取_【关系抽取】从文本中进行关系抽取的几种不同的方法相关推荐

  1. 文献阅读:神经网络提取生物医学文本中的关系

    文献阅读:神经网络提取生物医学文本中的关系 题目 1 背景 2 相关工作 3 方法 3.1 生物医学关系提取 3.2 Dependency graphs and SDPs 3.3 句子嵌入表示 3.4 ...

  2. python提取关键词分类_用Py做文本分析5:关键词提取

    1.关键词提取 关键词指的是原始文档的和核心信息,关键词提取在文本聚类.分类.自动摘要等领域中有着重要的作用. 针对一篇语段,在不加人工干预的情况下提取出其关键词 首先进行分词处理 关键词分配:事先给 ...

  3. 《利用条件随机场实现中文病历文本中时间关系的自动提取》——阅读笔记

    摘要 提出一种基于CRF的时间关系提取算法.以经过医学问题和时间信息语义标注的病历为训练内容,时间关系结果标注采用以医学问题为中心的模式.以63份实际病历作为实验文本. 引言 时间关系非常重要,如,哥 ...

  4. python 文字识别 准确率_关于OCR图片文本检测、推荐一个 基于深度学习的Python 库!...

    大家好,我是 zeroing~ 1,前言 之前谈到图片文本 OCR 识别时,写过一篇文章介绍了一个 Python 包 pytesseract ,具体内容可参考 介绍一个Python 包 ,几行代码可实 ...

  5. Stream流、FiLe和IO流、IO流(字节流-拷贝文件_和_字符流-读取文本中的数据写入文本文件中)9-10-11

    package com.streamdemo; import java.util.ArrayList; import java.util.List; /*** 体验Stream流** 创建一个集合,存 ...

  6. python统计重复的数_python统计一个文本中重复行数的方法

    本文实例讲述了python统计一个文本中重复行数的方法.分享给大家供大家参考.具体实现方法如下: 比如有下面一个文件 2 3 1 2 我们期望得到 2,2 3,1 1,1 解决问题的思路: 出现的文本 ...

  7. python 词库 匹配_python从一段文本中找出存在于词库的词语

    python从一段文本中找出存在于词库的词语 有现成的库吗? 可能不是最佳答案,只是提供一个思路. 个人觉得这个问题并不需要什么库,先把词库载入,弄成列表什么的.然后再把你需要匹配的文本读入,反过来想 ...

  8. python人文社科研究_人文社科实证研究中问题与模型的关系

    在人文社科实证研究中,问题与模型的关系说起来大家都懂,但认识未必深刻,就像社会生活中的很多问题一样,别人一说,意思都懂,但要深刻领会,可能需要很长的时间.比如父母对子女的爱,孩子10几岁肯定能懂,但要 ...

  9. mysql图书管理数据库的三个关系模式_数据库 考虑如下关于图书馆的关系模式,用关系代数写出查询(数据库系统概念第六版6.14)...

    贝尔梅尔娜美 2019.03.15 采纳率:60%    等级:39 已帮助:91565人 数据库系统的基本概念 数据:实际上就是描述事物的符号记录. 数据的特点:有一定的结构,有型与值之分,如整型. ...

最新文章

  1. 控制~Control System 线性系统
  2. setTimeout 和 setInterval
  3. 分布式计算框架Gearman原理详解
  4. 自从我上了数据结构课之后……
  5. ACM一类方程问题的求解[最短路建模] bzoj2118
  6. keil c语言绝对值函数,keil编写C程序是不是不能在函数内定义变量啊,求大神
  7. IntegrityError at ** NOT NULL constraint failed: learning_logs_topic.owner_id
  8. Java 读取txt文件,读取结果保存到数据库
  9. 我是如何获取新知识的?
  10. C#、JS、HTML - 转义字符
  11. exception(359): error C2220: 警告被视为错误 - 没有生成“object”文件
  12. 程序员面试逻辑题解析
  13. C/C++求职者必备的20道面试题
  14. 有关计算机计算类教案,计算教案
  15. CS《Combining Label Propagation and Simple Models Out-performs Graph Neural Networks》理论与实战
  16. 分水岭算法c语言,Opencv分水岭算法学习
  17. Cortex M3 Bit-banding简介
  18. 软件设计师证书的作用有多大?
  19. 采样率与频率之间的关系
  20. 电脑和手机连接同一个无线,电脑不能上网,手机能上网?

热门文章

  1. array_sum的用法
  2. Objective-c的内存管理MRC与ARC
  3. hdfs里的文件下载HDFS之fsimage、metadata、edits、fstime(二十七)
  4. git 提交代码的步骤
  5. 构建执法阅读笔记06(总结)
  6. 通过分析nginx的日志来过滤出访问过于频繁的IP地址,然后添加到nginx的blockip.conf,并重启nginx...
  7. linux反汇编时乱码,Linux反汇编代码理解 标准例子 很好
  8. C++之文件IO操作流
  9. sql 计算单行数据字段空值比例_如何利用工具,迅猛定位低效SQL? | 1分钟系列...
  10. NOI2015 荷马史诗