前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【技术分享】BERT系列(三)-- BERT在阅读理解与问答上应用

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

原创
作者头像
腾讯云TI平台
修改2021-12-20 15:14:06
22.7K4
修改2021-12-20 15:14:06
举报
文章被收录于专栏:腾讯云TI平台腾讯云TI平台

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


机器阅读理解和问答是自然语言处理领域的一个火热主题。该任务旨在让机器像人类一样阅读理解。前面两篇文章对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的模式在今后都会是自然语言处理领域的主流。

参考文献

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在序列标注上的应用

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 阅读理解与问答简介
  • 2. BERT的Fine-tuning原理
  • 3. 工作流程
    • 3.1 数据集
      • 3.2 数据预处理
        • 3.3 模型训练
          • 3.3.1 算法参数介绍
          • 3.3.2 训练细节
        • 3.4 模型预测及后处理
        • 4. 模型比较
        • 5. 总结
          • 参考文献
            • 系列文章传送门
            相关产品与服务
            腾讯云 TI 平台
            腾讯云 TI 平台(TencentCloud TI Platform)是基于腾讯先进 AI 能力和多年技术经验,面向开发者、政企提供的全栈式人工智能开发服务平台,致力于打通包含从数据获取、数据处理、算法构建、模型训练、模型评估、模型部署、到 AI 应用开发的产业 + AI 落地全流程链路,帮助用户快速创建和部署 AI 应用,管理全周期 AI 解决方案,从而助力政企单位加速数字化转型并促进 AI 行业生态共建。腾讯云 TI 平台系列产品支持公有云访问、私有化部署以及专属云部署。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档