Press "Enter" to skip to content

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

 

分享嘉宾:周明昕 博士 香侬科技

 

编辑整理:蔡英杰、Hoh

 

内容来源:2019 DataFun Live 07

 

出品社区:DataFun

 

注:欢迎转载,转载请注明出处

 

导读: 本次分享的主题为基于机器学习阅读理解(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. 多轮问答进行实体-关系抽取

 

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

 

文中提到的人物有哪些?

 

然后是他的公司是什幺?

 

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

 

担任什幺职务?

 

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

 

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

 

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

 

 

这里在做阅读理解的时候有一个问题: 靠前实体的准确 率会影响后续的信息抽取,这样的问题在翻译中也会遇到;训练的时候我们一般会使用前面实体的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中间件可以提升深度学习模型性能。

 

 

嘉宾介绍

 

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

 

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注