10.15讲习班:Formulating Different NLP Tasks under the MRC Framework

本讲座主要讲解了如何利用MRC框架解决各种NLP任务,并在以下四个领域进行了尝试:

MRC,即Machine Reading Comprehension,机器阅读理解。是指给定一篇文章以及基于文章的一些问题,让机器再根据文章内容进行回答,从而完成阅读理解的任务。例如:

image

那么,能否考虑将其他NLP的任务套用在MRC数据(框架中)?香侬科技进行了一系列的尝试,将四个任务进行修改和调整,套用在MRC数据集上,取得了良好的效果。


MRC for NER

在NER任务中,经常出现一种成为Nested NER的语言现象,简单来说就是不同的实体间存在着一些重叠关系。例如:“中国人民解放军”是一个ORG实体,这里“中国”也是一个地点实体。

image

传统的sequence model在一个时刻仅能预测一种label,这就造成了对nested NER问题没办法有很好的支持。因此作者提出了利用MRC框架来解决NER问题(即利用现有的MRC数据集并将问题套用在相关数据上)。

也就是说,针对一段文本抽取命名实体的过程转换为:给定文本和query,获取相应的答案的过程。即采用一问一答的方式来进行实体的抽取,例如:

image

我们可以看出,query的质量十分重要,在训练的过程中需要大量的合适的query。这里可以通过一些这样的方法完成query训练数据的构建。

  1. 当构建数据集的时候,通常会对结果进行注释,说明为什么对某个文本做特定的标签。那么标注说明则可以视为对label的自然语言解释。
  2. 还有一种方法是,根据wiki百科的特点,提取每个label对应的wiki的第一段话作为label的自然语言描述。

下面可以给出基本的模型:

image

我们采用bert作为文本的输入,然后我们对于每个query预测token的index,如上图的P_start和P_end。
但是由于这里采用分开计算loss并分开预测的形式,一旦模型出错导致start和end预测出的数量不统一,那么这样结果是很难被继续使用的。所以论文中也增加了一个Start-end matching的并且也作为loss一起计算,最终计算三个loss的均值进行优化

论文也讨论了这么一个问题(这个问题很重要):如何确定NER结果的提升是来自MRC框架而不是因为BERT强大的能力?作者就设计了以下的实验进行对比说明

image

此外,对于zero-shot的问题,证明引入MRC框架效果十分显著:

image

根据上图可以看到在训练预料与测试使用不同数据集的情况下,基于MRC的方法仍然能达到72的成绩,而不采用MRC的方法这时候基本上就已经失效了。


MRC for Relation Extraction

关系抽取问题实际上可以理解为命名实体识别后的任务,现有的方法也存在着一点问题:

  • 实体间隔较远
  • 关系较不明显
  • 一个句子包含多个关系等问题
  • 有时某一个关系很难用单个二元组或三元组甚至四元组完成
  • 实体间存在着一些依赖

所以,我们也可以把关系抽取转化为一个阅读理解的QA问题来解决:

image

进一步来说,我们在这里构建的是一种多轮对话。即上一轮的输出是下一轮问句的一部分:

image


MRC for Coreference Resolution

image

上图为常见的解决指代消解问题的pipeline,其中mention proposal在其他的论文中也叫做mention detection。在讲座中,LiJiwei博士也坦言,Mention proposal其实就是个花哨的名字,就是抽实体的过程,主要是为了削减计算量(?没get到)

上面的pipeline有个问题,如果第一步的抽取结果丢失了结果,那么后面的结果是永远回不来了,所以CR中做mention detection的Recall指标非常重要。

用MRC的框架

image

假设知道“Jingle Bells”是候选mention,那么取包含这个词语的这句话,用<mention>包裹(取上下文,因为囊括了很多的信息)。对于抽取错误的,返回nan就好了

优点:解决了mention detection找不到mention的问题,确保后面能找回来。

image

(上图)处理流程:假设长度为n的文本,那么span有(n-1)*n/2个span,对span打分;取分数最高的0.2n个span作为候选。S_m实际上是match的分数。(Rangking模型)

image

image

对于Coref,如果a是b的答案,那么反过来b也是a的答案,例如把“the song”也作为Query。经过实验发现用单向的可以,用双向的效果会好很多:

image

image

这里重点:用SQuAD的数据集做pretraining。

经验:在Coref领域,推进SOTA 0.5个点就很困难了。本项目对内存要求比较大,可能得四五张卡(这大概是之前CorefQA跑不起来的原因

image

上图解读如果不用spanbert,用bert,会降低3.8,因此spanbert的重要性还是很明显的


MRC for text classification

对于文本分类问题(亦或是情感分析), 也可以套用在MRC框架中,例如在情感分析中可以用“xxx的情感是怎么样的”来构建一个query然后获取结果从而完成分类任务。

image

这里也产生了一个问题, 没有query怎么办呢?这里query可以用label的描述来进行构建:

image

image