当前位置:   article > 正文

知识抽取实现方案——实体抽取

实体抽取

参考地址:知识抽取-实体及关系抽取 - 知乎

目录

摘要:

实体抽取:

标准实现流程(用机器学习方法)

编码方式

深度学习方法

评价指标

实体链接


摘要:

知识抽取涉及的“知识”通常是清楚的、事实性的信息,这些信息来自不同的来源和结构,而对不同数据源进行的知识抽取的方法各有不同,从结构化数据中获取知识用D2R,其难点在于复杂表数据的处理,包括嵌套表、多列、外键关联等。从链接数据中获取知识用图映射,难点在于数据对齐,从半结构化数据中获取知识用包装器,难点在于wrapper的自动生成、更新和维护,这一篇主要讲从文本中获取知识,也就是广义上说的信息抽取。

信息抽取三个最重要/最受关注的子任务:

实体抽取:也就是命名实体识别,包括实体的检测(find)和分类(classify)

关系抽取:通常我们说的三元组(triple)抽取,一个谓词(predicate)带2个形参(argument),如 Founding-location(IBM,NewYork)

事件抽取:相当于一种多元关系的抽取

实体抽取:

实体抽取或者说命名实体识别(NER)在信息抽取中扮演着重要角色,主要抽取的是文本中的原子信息元素,如人名、组织/机构名、地理位置、事件/日期、字符值、金额值等。实体抽取任务有两个关键词:find & classify,找到命名实体,并进行分类。

【蓝色为人名(Person),紫色为时间(Date),红色为机构(Organization)】

标准实现流程(用机器学习方法)

Training:

  1. 收集代表性的训练文档
  2. 为每个token标记命名实体(不属于任何实体就标 Others O)
  3. 设计适合该文本和类别的特征提取方法
  4. 训练一个 sequence classifier 来预测数据的label

Testing:

  1. 收集测试文档
  2. 运行sequence classifier给每个token做标记
  3. 输出命名实体

编码方式

看一下最常用的两种sequence labeling的编码方式,IO encoding简单的为每个token标注,如果不是NE就标为O(other),所以一共需要C+1个类别(label)。而IOB encoding需要2C+1个类别(label),因为它标了 NE boundary,B 代表 begining,NE 开始的位置,I 代表 continue,承接上一个 NE,如果连续出现两个 B,自然就表示上一个 B 已经结束了。

 在 Stanford NER 里,用的其实是 IO encoding,有两个原因,一是 IO encoding 运行速度更快,二是在实践中,两种编码方式的效果差不多。IO encoding 确定 boundary 的依据是,如果有连续的 token 类别不为 O,那么类别相同,同属一个 NE;类别不相同,就分割,相同的 sequence 属同一个 NE。而实际上,两个 NE 是相同类别这样的现象出现的很少,如上面的例子,Sue,Mengqiu Huang 两个同是 PER 类别,并不多见,更重要的是,在实践中,虽然 IOB encoding 能规定 boundary,而实际上它也很少能做对,它也会把 Sue Mengqiu Huang 分为同一个 PER,这主要是因为更多的类别会带来数据的稀疏。

深度学习方法

1、LSTM+CRF

最经典的 LSTM+CRF,端到端的判别式模型,LSTM 利用过去的输入特征,CRF 利用句子级的标注信息,可以有效地使用过去和未来的标注来预测当前的标注。

2、ELECTRA + CRF

详见笔者同事的博客:ELECTRA + CRF 实现中文命名实体识别_huangcy的博客-CSDN博客

3、BERT + CRF

笔者项目中最终采用的方案。哈哈,遇事不决用Bert。事实上是 我们团队比对了在同一份数据集上,用 Bert 的表现还是要比用 ELECTRA 好一点点。


评价指标

评估 IR 系统或者文本分类的任务,我们通常会用到 precision,recall,F1 这种 set-based metrics,但是在这里对 NER 这种 sequence 类型任务的评估,如果用这些 metrics,可能出现 boundary error 之类的问题。因为 NER 的评估是按每个 entity 而不是每个 token 来计算的,我们需要看 entity 的 boundary。

以下面一句话为例:

First Bank of Chicago announced earnings...

 正确的 NE 应该是 First Bank of Chicago,类别是 ORG,然而系统识别了 Bank of Chicago,类别 ORG,也就是说,右边界(right boundary)是对的,但是左边界(left boundary)是错误的,这其实是一个常见的错误。

  1. 正确的标注:
  2. ORG - (1,4)
  3. 系统:
  4. ORG - (2,4)

而计算 precision,recall 的时候,我们会发现,对 ORG - (1,4) 而言,系统产生了一个 false negative,对 ORG - (2,4) 而言,系统产生了一个 false positive!所以系统有了 2 个错误。F1 measure 对 precision,recall 进行加权平均,结果会更好一些,所以经常用来作为 NER 任务的评估手段。另外,专家提出了别的建议,比如说给出 partial credit,如 MUC scorer metric,然而,对哪种 case 给多少的 credit,也需要精心设计。

实体链接

实体识别完成之后还需要进行归一化,比如万达集团、大连万达集团、万达集团有限公司这些实体其实是可以融合的。

主要步骤如下:

1、实体识别

命名实体识别,词典匹配

2、候选实体生成

表层名字扩展,搜索引擎,查询实体引用表

3、候选实体消歧

图方法,概率生成模型,主题模型,深度学习

*补充一些开源系统:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/348971
推荐阅读
相关标签
  

闽ICP备14008679号