社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

带你轻松入门信息抽取|Python 主题月

王大呀呀 • 5 年前 • 972 次点击  
阅读 27

带你轻松入门信息抽取|Python 主题月

本文正在参加「Python主题月」,详情查看 活动链接

什么是信息抽取

定义:自动从无结构或半结构文本中抽取出结构化信息的任务

信息抽取的分类

1.根据抽取结果是否在原文中,可以将信息抽取分类为抽取式和生成式,抽取模型相对比较死板,原文中有什么信息就返回什么信息,而生成模型相对比较人性化,会将目标信息进行整理,本文主要介绍前一种。举例如下:

抽取式:

空腹血糖控制在 7mmol/L  ----->    空腹:7mmol/L 
复制代码

生成式:

肿瘤为隆起溃疡性,位于胃窦处 -----> Borrmann 分型:息肉型
复制代码

2.根据抽取结果结果可以将信息抽取分为:实体抽取、关系抽取、事件抽取。举例如下。

实体抽取:

疾病:间质性肺炎
复制代码

关系抽取:

疼痛 --疾病部位--> 双膝关节
复制代码

事件抽取:

病变事件:描述:类圆;病变大小 27*28 ;病变部位:左下肺背段
复制代码

通用评测标准

  • 精确率 P :模型预测出来的结果准不准,预测正确的个数/预测出的结果个数
  • 召回率 R :模型漏了哪些东西,预测正确的个数/人工标注的个数
  • F1:综合评价指标 ,2*P*R/(P+R)

信息抽取的应用

  • 医疗,从医疗文本中抽取病名,药名,症状等
  • 金融,从金融文件中抽取风险预警相关的信息等
  • 法律,从以往案例中抽取出关键信息辅助判案,或者构建法律知识图谱等
  • 构建知识图谱

信息抽取模型的关键点

信息抽取模型的关键要素就是解码设计,解码设计就是标注标签到结构化信息的转化过程,这是模型的核心。常见的解码设计有三种:

  • 序列标注:单类或者多类别标注,常用的有 BIO 解码或者 BMEO 解码
  • Pointer :标注抽取结果的 start 和 end
  • Token Pair:对句子中的字两两之间标注类别

实体抽取

1.定义:从文本中抽取出文本内容,并识别为预定义的类别,例子如下:

原文:患者出现左侧胸背部持续疼痛,在中西医结合医院查胸部 CT 平扫。
结果:症状 --> 左侧胸背部持续疼痛  
复制代码

2.常用解码设计使用 BIO

3.实际项目中的难点主要有两个:

  • 实体重叠嵌套,指的是文本中多个实体之间共享片段,如“患者出现左侧胸背部持续疼痛”中“左侧胸背部”是部位实体,“持续疼痛”是症状实体,如果要识别完整的“左侧胸背部持续疼痛”可能存在困难
  • 实体不连续,指的是一个实体由多个不连续片段组成,如“前胸、背部包块”我们如果想识别出“前胸包块”和“背部包块”两个实体也存在困难,因为没法通过常规的 BIO 标注

关系抽取

1.定义:从文本中抽取出一对实体和预定义的关系类型,得到包含语义信息的实体关系三元组,默认情况下连接这对实体的关系是有方向的,称为头实体和尾实体。举例:

原文:右下肺少许炎症
结果:(右下肺,部位疾病,炎症)
复制代码

2.解决步骤通常是分为两个步骤,第一步就是基本的实体抽取,第二步就是使用一对实体和句子进行关系判断。第二步又叫关系分类,指的是给定一对实体和文本,判断实体之间的关系类型。通常分多步模型去抽取的模型方案叫做 Pipeline ,只用一个模型抽取的方案叫做 Joint ,本文介绍的是 Joint 。

3.解码方法常见的有 BIO 、Pointer 、TPLinker 等,后面的比前面的更加复杂,但是能力也会更强。

4.常见的难点有两个:

  • 关系重叠,指的是一个实体属于多个关系,如“右下肺少许炎症,见结节”,这里的“右下肺”既和“炎症”有关系,又和“结节”有关系。

  • 实体对组合,指的是实体对有多重组合方式,如“左肺和右肺,各见一小结节”和“左肺和右肺,各见一小结节和磨玻璃影”两句话中的实体对关系抽取方式不同,需要一个更加复杂的模型来 cover 各种不同方式的关系抽取。

5.衍生问题如下:

  • 远监督噪音,因为一般情况不会有很多训练数据,所以可以用来构造训练数据

  • 文档级抽取,文档中的实体很多,但是会发生指代歧义等问题,所以难度也很大

  • 开放域关系抽取,开放领域中的关系都不是预先定义的,需要模型自动识别主谓宾三元组,往往用于构建知识图谱过程中。

事件抽取

1.定义:从一段文本中抽取出预定义的事件触发词和事件要素,组合为响应的机构化信息 ,除了事件,实际应用中信息抽取的结果可能更加复杂,但都可以拆成关系抽取。

2.常见的解决方法就是把事件变成关系抽取问题进行解决

总结

文中主要涉及到的知识点有:

实体抽取:重叠嵌套实体、不连续实体、BIO
关系抽取:重叠关系、实体对组合、BIO、Pointer、TPlinker
事件抽取:复杂结构抽取
复制代码

BIO 、Pointer、TPlinker 这三个模型是基本可以解决所有信息抽取的任务,因为现在这一领域是个大一统状态,一个复杂模型可以解决各种问题。

Python 项目推荐

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/116858