【技术分享】BERT系列(三)-- BERT在阅读理解与问答上应用

本文原作者:梁源,经授权后发布。

原文链接:https://cloud.tencent.com/developer/article/1465005

 

机器阅读理解和问答是自然语言处理领域的一个火热主题。该任务旨在让机器像人类一样阅读理解。前面两篇文章对BERT的官方源码以及在序列标注上的应用进行了介绍,本篇文章将介绍如何利用BERT来解决阅读理解与问答问题。

1. 阅读理解与问答简介

机器阅读理解与问答主要涉及到深度学习、自然语言处理和信息检索。机器阅读理解具有很高的研究价值和多样的落地场景。它能够让计算机帮助人类在大量文本中快速找到准确答案,从而减轻人们对信息的获取的成本。

具体来讲,机器阅读理解和问答任务(QA)指的是给定一个问题和一个或多个文本,训练的QA系统可以依据文本找出问题答案。一般情况下,有以下三种问题:Simple (factoid) questions,即简单的问题,可以用简单的事实回答,答案通常只是一个name entity;Complex (narrative) questions,即稍微复杂的叙述问题,答案略长;Complex (opinion) questions,即复杂的问题,通常是关于观点/意见。对于第一类问题,标准答案一般与文本中的答案完全匹配。本文涉及的问答任务中的问题均为第一类问题。

传统的解决阅读理解与问答任务的方法有基于特征的逻辑回归(一般作为Baseline)。随着深度学习的流行,越来越多的深度学习模型在此类问题上得到SOTA(state of the art) 结果,包括Stanford的博士生陈丹琦提出的融合大规模开源数据库的DrQA模型,百度提出的Neural recurrent sequence labeling model等。但是当Google提出BERT模型之后,只需要进行简单的fine-tuning,便可在英文数据集SQuAD获得SOTA结果,并且超越了人类的表现。同样的,当我们对模型进行修改以适用于中文文本后,我们发现BERT在中文的阅读理解与问答任务上表现十分出色,远高于其他模型。下面我们将分析BERT在阅读理解和问答上的应用。

2. BERT的Fine-tuning原理

在前面的系列内容中我们已经介绍过BERT如何通过Masked Language Model (MSM) 和Next Sentence Prediction (NSP) 来进行预训练。这里我们介绍如何设计fine-tuning来处理阅读理解与问答。如下图所示,模型的输入序列为句子对所对应的embeddings。句子对由问题和包含答案的文本组成,并有特殊分隔符“【SEP】”分隔。同其他下游任务一样,输入序列的第一个token为特殊分类嵌入“【CLS】”,同时输入序列为token embeddings,segmentation embeddings,以及position embedding之和(具体细节参见 BERT在序列标注任务上的应用)。

BERT的输出为每个token所对应的encoding vector。假设vector的维度为D,那么整个输出序列为$T^{N \times D}$,其中N为整个序列的长度。因为答案由文本中连续的token组成,所以预测答案的过程本质上是确定答案开头和结尾token所在的位置的过程。因此,经过全连接层之后,得到 $O^{N \times 2} = FC(T^{N\times D})$ 。其中$FC$ 代表全连接层,$O^{N\times 2}$ 为每一个token分别作为答案开头和结尾的logit值,再经过Softmax层之后就得到了相应的概率值。经过数据后处理之后,便可得到预测答案。

3. 工作流程

3.1 数据集

我们使用百度在2016年开源的中文问答数据集WebQA为该任务的数据集。该数据集由一系列的(问题,证据,答案)组成。所有的数据均来源于网络,并主要来源于问答社区“百度知道”。换句话说,该数据集中所有数据均来自于真实世界而非虚构。数据集有两大特点:(1)所有的问题均为事实类问答(factoid question),(2)问题的答案由一个实体(name entity)构成。该数据集类似于Stanford开源的英文问答数据集SQuAD,数据片段如下图所示:

下图表示数据集的统计情况。其中Positive Annotated Evidence代表所标注的包含标准答案的证据,而Negative Annotated Evidence为所标注的不包含标准答案的证据,但与问题相关。而Retrieved Evidence表示与问题无关且不包含标准答案的证据。

3.2 数据预处理

首先对问题和证据进行tokenization的处理,即将sentence转为character level的sequence。之后将question sequence 和 evidence sequence相连接并以“【SEP】”分隔。在序列的开头增加“【CLS】”,并在连接的sequence后做padding处理。Padding后序列的总长度是一个超参数,可由用户调节。此外还需提供序列对应的segmentation id 和 input mask 信息,其中segmentation id 表征了token所在句子的信息,而input mask 表征了token是否为padding值。经过预处理后,输入序列如下:

对于question+evidence的长度大于BERT 规定的最大序列长度的情况,将evidence以一定的步长分割为若干段分别于question连接。为了保证分割后的evidence尽可能不削减完整evidence的语义。evidence与evidence之间有一定长度的重叠部分,该部分的长度为超参数可供用户调节。

3.3 模型训练

3.3.1 算法参数介绍

  • bert_dir :预训练模型的存放路径,其中包括的重要数据有:
  • vocab.txt: 提供的词表用于输入数据的token embedding 的查找。
  • bert_config.json: 提供预训练模型的配置信息
  • init_checkpoint: 预训练模型的checkpoint
  • max_seq_length: 最大序列长度,长度小于该值得序列将进行padding处理,大于该值得序列将进行分段
  • doc_stride: 文档滑动窗口,当需要对序列分段时,相邻分段序列的重叠长度
  • max_query_length: 最大问题长度,长度大于该值得问题将被截断
  • num_epochs: 训练的epoch数
  • learning_rate: 学习率

3.3.2 训练细节

在训练过程中的objective function则定义如下。

其中$\tilde y_i$ 为标准答案开头结尾所在位置,$T = {(\tilde y_i, x^e_i)}$ 表示训练集,我们通过BERT+全连接层来建模$p_\theta(y|x)$。

同其他BERT的下游任务一样,训练的优化器采用Adam optimizer。

3.4 模型预测及后处理

同训练数据一样,待预测的问题+文本输入到模型后得到的输出为每个token为答案开头或者答案结尾的logits值,对数据进行后处理便可得到预测的答案,其本质为确定答案片段在文本中开头和结尾的位置。后处理过程相对冗余,在此不展开讨论,其主要逻辑是选择位置合理(start position 和 end position要在文本所在范围,且前者位置要在后者之前等),以及开头和结尾的logits之和尽可能大的结果。

此外模型支持 “no answer” 的预测,即判断证据中不存在问题答案。如果最优预测结果的start 和 end 都指向序列的开头,即“【CLS】“,则可判断为”no answer“。但为了调节模型预测”no answer“的能力,我们提供一个超参数"null_score_diff_threshold",只有 “no answer”对应的score (logits 之和) 与最优的非 “no answer”对应score 的差值大于该 threshold,模型才判断为 “no answer”。该值可以由用户自行调节。

在预测阶段参数如下所示:

  • max_answer_length: 预测答案的最大长度
  • version_2_with_negative: 如果为 “True“,模型将考虑“no answer”的情况
  • null_score_diff_threshold: 只有 "no answer" 的score 与 非 “no answer” 的score大于该值,判断答案为 “no answer”,该值可以为负。

4. 模型比较

为了展示BERT的优势,我们将其与Bi-LSTM,以及百度在开源WebQA时提出的模型进行比较。在训练BERT及Bi-LSTM时我们采用单块Tesla V100。我们并未重新训练百度提出的模型,而是直接引用其在论文中展示的结果。比较如下:

如图所示,相较于百度提出的Sequence Labeling model,BERT在validation dataset 和 test set的成绩均有大幅度的提升。以Test set 为例,BERT在Accuracy的绝对值提升了16.17个百分点,在F1的绝对值则提升了 19.22个百分点。其中Accuracy和F1的计算公式如下:

其中 $|C|$ 表示数据集中预测答案与标准答案完全匹配的数量,$|A|$ 表示数据集的大小。$F1$ 衡量的是单个数据$F1$ 的平均值。上述式子中的 $P_i, R_i$ 计算的是单个数据的值,将标准答案和预测答案分别看做一个序列,计算其准确率和召回率。

5. 总结

Google在开源BERT模型时已经在英文问答数据集SQuAD上获得SOTA值,经过我们的实验,BERT在处理中文问答任务时同样有十分出色的表现。这证明了BERT作为一种强大的预训练模型,的确可以很好地表征token的词义特征、语义特征、及句法特征。

BERT以及预训练模型例如ELMO,GPT等出色的表现轰动了自然语言处理领域,现如今有很多的学者和机构基于Transformer及BERT提出更强大的模型,例如百度及清华分别提出的ERNIE模型,这两个同名模型均将知识图谱信息(Knowledge Graph)融入BERT,使得BERT在大规模先验知识的加成下表现更进一步,又如Google最近提出的基于 Autogressive Model 的 XLNet,在英文数据集上的表现已经全面超越BERT。由于种种原因(无中文预训练模型等),我们在本次实验当中无法得到这些模型在中文数据上的表现,从而与BERT进行横向对比。但未来我们一定会研究这些前沿模型在中文文本上的表现,做更进一步的分析。此外我们可以断言,Pre-trained Model + Fine Tuning的模式在今后都会是自然语言处理领域的主流。

BERT处理阅读理解的算子已经在智能钛平台上部署,并会在最新的版本中与大家见面。有兴趣的小伙伴可以动手搭建属于自己的智能问答模型。欢迎大家与我们交流。

参考文献

Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Krisina Toutanova.2018.BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding.

Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N Gomez, Lukasz Kaiser, and Illia Polosukhin. 2017. Attention is all you need. In Advances in Neural Information Pro- cessing Systems, pages 6000–6010.

Peng Li, Wei Li, Zhengyan He, Xuguang Wang, Ying Cao, Jie Zhou, and Wei Xu. Dataset and neural recurrent sequence labeling model for open-domain factoid question answering. arXiv preprint arXiv:1607.06275, 2016.

Danqi Chen, Adam Fisch, Jason Weston, and Antoine Bordes. 2017. Reading Wikipedia to Answer Open-Domain Questions. CoRR abs/1704.00051 (2017)

系列文章传送门

BERT系列(一)——BERT源码分析及使用方法

BERT系列(二)-- BERT在序列标注上的应用

 

更多优质技术文章请关注官方微信公众号:

【技术分享】BERT系列(三)-- BERT在阅读理解与问答上应用_第1张图片

专业AI开发者社区,期待您的光临!

智能钛AI开发者 - 云+社区 - 腾讯云​cloud.tencent.com

 

 

你可能感兴趣的:(【技术分享】BERT系列(三)-- BERT在阅读理解与问答上应用)