写点什么

基于机器阅读理解(MRC)的信息抽取方法

2019 年 11 月 09 日

基于机器阅读理解(MRC)的信息抽取方法

导读:本次分享的主题为基于机器学习阅读理解(MRC)的信息抽取方法。由香侬科技发表在 ACL2019,论文提出用阅读理解的方法对信息抽取这个传统问题进行建模,取得了比较好的效果。


Part1 香侬科技简介

香侬科技的主要研究方向为自然语言处理和深度学习,秉承“让机器读懂纷繁的大千世界”为使命,致力于用人工智能技术消除信息不对称的壁垒,让所有人都能平等获取信息。目前主要业务包括信息抽取、智能文档解析、智能数据聚类分析、文本对比审核等。


Part2 自然语言处理(NLP)

1. 自然语言处理(NLP)是什么?

自然语言处理是研究能实现人与计算机之间,用自然语言进行有效通信的各种理论和方法。(通俗讲就是计算机要理解人说的话,计算机生成的话,人也能够理解)



2. 为什么自然语言处理很难?

自然语言处理的难点在于歧义性。如下面的例子:


  • 同样的表达方式,有不同的含义:

  • “喜欢一个人”:like someone 或者 like to be alone。

  • 虽然表达方式不同,但表达的含义相同:

  • “我刚差点摔着”、“我刚差点没摔着”

  • “苹果多少钱一斤”、“苹果一斤多少钱”、“一斤苹果多少钱”


3. 常见的 NLP 任务


常见的 NLP 任务可以分为简单、中等、困难,分别包含的具体任务如下:


  • 简单任务:分词、词性标注、垃圾邮件分类、句法依存分析

  • 中等任务:词义消歧、情感分类、命名实体识别、信息检索

  • 困难任务:关系 &事件抽取、翻译、自动摘要、问答、对话


今天主要介绍命名实体识别、关系 &事件抽取这两类信息抽取任务。


4. 深度学习与 NLP 结合的范式:

范式 1


第一种深度学习与 NLP 的结合的范式(Bert 出现之前),一般包含以下几步:



-> Embed:该阶段把离散 id 变成稠密向量,可能对以下几个维度特征进行 embedding,包括 word(单词)、char(字符)、pos tag(词性)、position(位 置)。



-> Encode:该阶段使得稠密向量获得上下文信息, 一般方案包括 CNN/RNN/Transformer。



-> Attend:该阶段可以使更远的信息可以互相注意,一般分为加性(sum)、乘性(product)的注意力机制。



-> Predict:NLP 任务一般是预测离散的变量,Classification 分类、Seq Labeling 序列标注、翻译/摘要可以 model 成 seq2seq 的任务。


范式 2


最近有些 Pre-train 的模型出现,打破的了之前的方案,把 embed 到 Attend,基本上都用的类似的方法,通过 Pre-train 得到一个带着上下文信息的向量。算法包括 elmo、gpt、bert、gpt2、xlnet、ernie、roberta 等,在大数据量上进行预训练。



第二种深度学习与 NLP 的结合的范式,一般包含以下几步:


-> Pre-train:刚开始是用大规模的语料进行预训练。


-> Fine_tune:针对特定任务进行微调。


-> Predict:进行 Predict。


Part3 信息抽取

1. 信息抽取简介


信息抽取是将非结构化的文本信息转换为结构化的信息,如上图所示,左边为非结构化文本,通过信息抽取得到右边结构化的信息。



信息抽取可以分为三类:


  • 命名实体识别(NER):从文本中抽取人物、机构、文件名等实体。

  • 关系抽取(RE):得到实体后,抽取实体间的关系,一般抽取得到一个(实体,实体,关系)的三元组。

  • 事件抽取:抽取多个实体和事件关系,一般得到一个 trigger 和多个 arguments 的多元组。


今天主要介绍命名实体识别和关系抽取。


2. 实体关系抽取


大量的信息抽取任务是实体和关系的抽取,举个例子,乔布斯是苹果公司的 CEO。其中"乔布斯"和"苹果公司"是实体,分别是人名、公司名;两个实体之间是雇佣关系。


3. 实体关系抽取的传统做法


实体关系抽取的传统做法:


  • Pipeline 的方法:

  • 先进行命名实体识别,再进行关系识别。

  • joint 方法:

  • 通过共享参数的模型,把实体识别和关系识别联系到一起。


命名实体识别(NER)



NER 也可以分为 4 步:


-> Embed:把 Michael Jeffrey Jordan was born in Brooklyn,变成一个稠密向量。


-> Encode:在 NER 中主要是 RNN 相关的;


-> Attend:把注意力集中在“一个人在布鲁克林出生”


-> Predict:主要用 CRF 做序列标注。


也可以用 BERT,把 Embed 到 Attend 之间都用过 BERT 来初始化,然后进行 fine_tune,然后在最上层加一个 Predict 的神经网络。


关系抽取(RE)



RE 一般被 model 成 Classification 任务,同样分为以下 4 步:


-> Embed:还是将字或者词变成一个稠密的向量,这里还会多一个 position,一般认为待变成稠密向量的词与实体之间的位置是一个相对位置,如下图中 hired 和第一个人它的位置可能是-1,然后逗号和它的位置是 1,这样的一种 Embedding。



-> Encode:对于关系识别来说,即包含 CNN 相关的,也包含 RNN 相关的,把上下文的信息考虑进来。如上图是一个 PCNN,通过两个实体把句子分为三部分,每部分分别做 CNN 的 max pooling(由于这三部分的用处不同,直接做 max pooling 可能会有一些信息的损失),再经过 Softmax classifier 进行分类。



上图为 BI-LSTM,同样用了 RNN base 的网络结构,可以学习到更长距离的依赖。


-> Attend:Attention 可以 Attend 到两个实体是由于哪个词分辨出是顾佣的关系,比如“CEO”就可以认为“苹果公司”和“乔布斯”之间是雇佣关系,有比较大的一个权重。


-> Predict:对定长的向量进行 Predict 分类。


刚刚说的都是 Pipeline 的方法,Joint 方法也是类似的,主要是把两部分的一些模型的参数在底层被共享起来。


4. 传统方法的问题


Pipeline 和 Joint 两种方案都存在一些问题:


① 很难处理层级关系:建模困难。如右侧第 1 张图所示,“乔布斯在 1977 年至 1983 年担任了苹果公司的 CEO,在 1986 年至 1996 年担任皮克斯动画工作室的 CEO”。这里存在 7 个实体,相互间都有关系,非常复杂。


② 准确率问题:


  • 两个实体离得比较远,尤其当一个实体与另外一个实体发生关系时,其实是它的缩写与另外一个实体比较近,而本体与另外一个实体比较远的时候,这样两个实体之间的关系往往很难预测得到。

  • 一个实体包含多个关系对,比如这里的“苹果公司”,既和“CEO”产生关系,又和“乔布斯”产生关系, 包含多个关系,是关系的分类比较复杂。

  • 实体跨越的 span 有重叠。如右侧第 2 张图所示,“比尔盖茨和乔布斯分别担任微软和苹果公司的 CEO”,“比尔盖茨”是和“微软”产生关系,“乔布斯”是和“苹果公司”产生关系对于刚刚说的 PCNN 或者 RNN 来说都会产生混乱的情况,导致识别准确率下降。


Part4 机器阅读理解(MPC)

1. 机器阅读理解简介


机器阅读理解是给定上下文 c,和问题 q,得到答案 a,a 是原文中的一个或多个 span<Question,Context> -> <Answer>。


如图所示,通过提问“郑强什么时候就职于越秀会计事务所?”,我们可以发现,是在 1998 年到 2000 年时就职于越秀会计事务所。这样就得到郑强、越秀会计事务所、时间等多个实体间关系。


2. MRC 做法


MRC 的做法也是分为 4 步:


范式 1,传统的方案



先 Embed,把字和词变成稠密向量,通过 Contextual 进行 Encode,这里通过的是 LSTM 或者 GRU 之类的方案,通过上下文一起考虑进来,然后进行 Attend,question 和文章互相注意,最后是 Predict,进行分类和序列标注。


范式 2



Bert 出现之后,可以通过 Bert 方案,把前 3 步换成 Bert,最后预测一个 start 和一个 end,或者通过序列标注的方案来做。


如上图,Bert 时,会在 Question 的 Tok 前加一个 CLS,后面加一个 SEP,然后把 Paragraph 的 Tok 放在后面。然后预测 Paragraph 中哪位置的 Tok 是 start,哪个位置的 Tok 是 end,来预测阅读理解问题。


3. 使用 MRC 做实体关系抽取


在 ACL2019 的论文中,我们提出了使用一种 MRC 的新的范式来做实体和关系抽取。


三元组:(头实体,关系,尾实体)例如(乔布斯,受雇于,苹果公司)


对于“乔布斯是苹果公司的 CEO”可以提两个问题:


① 首先提的是头问题,Q:人名是什么?A:乔布斯


② 基于上一步的答案提出第二个问题,Q:乔布斯受雇于哪家公司?A:苹果



上图为,我们算法的详细流程图,首先得到 head Entity 头实体,对于头实体提问完之后,可以得到头实体的答案,把头实体的答案填入问题模板中,再获得后面的实体。



目标函数就是 head-entity 的 Loss+tail-entity 的 Loss,然后进行一个加权。


问题模板如上图所示,对于郑强或者马斯克的例子,我们可以问四个问题:


第一个问题是谁在这段话里被提及了,也就是马斯克或者郑强。


第二个问题是郑强在哪个公司任职,得到很多公司。


第三个问题是郑强在这个公司的职务是什么,得到职务。


最后,把上面三步的答案拼在一起得到最后一个问题,E1 在 E2 担当 E3 的任职时间是什么,得到 E4。


4. 多轮问答进行实体-关系抽取

接下来就是刚刚举得例子,首先是第一个问题:


文中提到的人物有哪些?



然后是他的公司是什么?



再分别问在每个公司的工作时间?



担任什么职务?



在越秀会计事务所工作的时间?



在其他公司担任的职务,等等问题。



这样通过阅读理解的方案就得到了这样一张表,也就是完成了从非结构化文本到结构化文本的转换。



5. 强化学习


这里在做阅读理解的时候有一个问题:靠前实体的准确率会影响后续的信息抽取,这样的问题在翻译中也会遇到;训练的时候我们一般会使用前面实体的 ground truth 填入后面实体的模板;在预测的时候,我们会使用实际预测出的答案,这样就产生了一个训练和预测的 gap,第三阶段错误的实体,原因很有可能是第一阶段的实体就错了,这样的 Loss 并没有回传给第一阶段的实体。


所以,我们采用了强化学习的方法:


  • 每轮的动作:在所有可能中选取该轮的答案。

  • 策略:预先用 ground truth 训练多轮 QA 的概率作为强化学习的初始策略,避免策略不稳定的情况。

  • 奖励:


  • 得到的奖励就是这个公式,得到这个公式之后就可以将 Loss 回传,这样后面轮数的 Loss 可以反馈给前面的轮数,使前面的轮数更加准确。


6. 实验结果


我们发现在 ACE2004 和 2005 数据集上,Multi-turn 的方式相比于传统的方式分别有 1 个点和 0.6 个点的提升。


Part5 性能优化

刚刚讲了使用阅读理解的方式来做信息抽取,使用的阅读理解是基于 BERT 模型,由于 BERT 参数非常庞大,会遇到一些性能的问题:


1. 深度学习模型性能问题


在做 web service 时,由于用户的请求是离散的,且大小不定,不易 batch 运算。


以 MASK LM 任务为例,一个 64 个字的句子做 MASK-LM 任务,封装为 web service,我们发现 QPS 只有 12。因此,我们开发了 Service Streamer。


2. Service Streamer


Service Streamer 将服务请求排队组成完整 batch,其好处有:


  • 简单易用:只需要添加两三行代码即可让模型提速上十倍;

  • 处理速度快:低延迟,专门针对速度做了优化;

  • 可扩展性好:可轻松扩展到多 GPU 场景,处理大量请求;

  • 适用性强:它是一个中间件,适用于所有深度学习框架和 web 框架。


Github 链接如下,感兴趣的小伙伴可以仔细研究下:


https://github.com/ShannonAI/service-streamer#develop-bert-service-in-5-mintues



我们做了一个 benchmark,在一个普通的 Web Service 情况下,QPS 是 12,latency 是 8s,使用 ThreaedStreamer 可以增加到 208,继续使用多进程的 Streamer 可以做到 321,使用 RedisStreamer 会在 350 左右,根据每次测量会有些区别。


在多 GPU 场景下,可以继续提升性能,且非常容易扩展,当使用 2 张或者 4 张卡的时候,QPS 可以成比例的增加。


Part6 总结

最后小结下此次分享的主要内容:


  • 自然语言处理,重点介绍了 NLP 与深度学习结合的两个范式。

  • 信息抽取,重点介绍了实体关系抽取的传统做法及传统做法的问题,传统做法很难处理层级关系及准确率问题。

  • 机器阅读理解,基于机器阅读理解的信息抽取方法在结果上优于传统做法。

  • 性能优化,利用 service streamer 中间件可以提升深度学习模型性能。


作者介绍


周明昕博士,香侬科技信息抽取团队负责人,负责香侬科技信息抽取领域算法研发和落地。在北京大学获得理学学士和工学博士学位,已发表十余篇国际会议和期刊论文,拥有多项国际国内专利。曾任职于百度核心搜索部,负责搜索智能问答算法研发。


本文来自 DataFun 社区


原文链接


https://mp.weixin.qq.com/s?__biz=MzU1NTMyOTI4Mw==&mid=2247495035&idx=1&sn=18bc02c224c262fdd2db291332d802b6&chksm=fbd75f17cca0d60192e1a88410f07b2008872d264678fefa7729ab0ee74bb14b08618537e439&scene=27#wechat_redirect


2019 年 11 月 09 日 08:003681

评论

发布
暂无评论
发现更多内容

如何防止手机被盗刷

石云升

2月春节不断更 手机盗刷

作业之用例

踏凌霄

填补国内空白!建信金科携手本源量子发布国内首批量子金融算法

金科优源汇

工具介绍 | 百度分布式配置中心BRCC正式开源

百度开发者中心

百度 开源框架

Kafka设计实现与最佳实践之客户端篇

梦朝思夕

kafka 客户端

「吉」移动APP, InfoQ 春节不打烊

InfoQ写作平台官方

InfoQ 牛年特别策划

「年」InfoQ 编程语言2月排行榜

InfoQ写作平台官方

InfoQ 牛年特别策划

「新」春节新用户注册福利

InfoQ写作平台官方

InfoQ 牛年特别策划

LeetCode题解:74. 搜索二维矩阵,二分查找,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

【史上最全】Hadoop 核心 - HDFS 分布式文件系统详解(上万字建议收藏)

五分钟学大数据

大数据 hadoop 2月春节不断更

阿里内部热捧“Spring全线笔记”,不止是全家桶,太完整了

Crud的程序员

spring 程序员 架构

Go 1.16新特性embed打包静态资源文件

八两

go embed

过年不放假

Tango

七日更 2月春节不断更

产品 0 期 - 前三周大作业

Jxin

【LeetCode】最长湍流子数组

HQ数字卡

算法 LeetCode 2月春节不断更

「乐」话题王者第二季,欢乐开赛

InfoQ写作平台官方

InfoQ 牛年特别策划

「快」2月春节不断更

InfoQ写作平台官方

InfoQ 牛年特别策划

RocketMQ生产者原理

郝志杰

RocketMQ

某挂号平台在线挂号用例

🌸 Nancy ma🌸

产品经理训练营

利用 IComparable<T> 以及 IComparer<T> 定义顺序关系

喵叔

2月春节不断更

SRT协议初识

Changing Lin

2月春节不断更

「大」极客时间新春充值福利活动

InfoQ写作平台官方

InfoQ 牛年特别策划

这个技术把时间切开,让生命愈合

脑极体

Linux Lab 进阶: 自动化测试

贾献华

Linux 测试 Linux Kenel

「春」写作平台春节精选话题

InfoQ写作平台官方

InfoQ 牛年特别策划

话题讨论 | 程序员表白,不光需要“技术”,更需要勇气!

孙叫兽

程序员 话题讨论 情人节 表白

第一性原理

熊斌

学习笔记 2月春节不断更

架构进阶之路:复杂业务开发与领域驱动设计

程序员架构进阶

架构 方法论 七日更 28天写作 2月春节不断更

XSKY助力湖南省交通规划勘察设计院有限公司IT架构转型

XSKY融合存储

「牛」鲲鹏会海报拜年,福利大放送

InfoQ写作平台官方

InfoQ 牛年特别策划

20210208—这是个开始

Victor

2月春节不断更

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

基于机器阅读理解(MRC)的信息抽取方法-InfoQ