专栏首页腾讯云TI平台【技术分享】BERT系列(三)-- BERT在阅读理解与问答上应用
原创

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

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


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

登录 后参与评论
0 条评论

相关文章

  • 【技术分享】BERT系列(二)-- BERT在序列标注上的应用

    序列标注是NLP中一项重要的任务,它主要包括分词,词性标注,命名实体识别等子任务。通过对预训练后的BERT模型进 行finetune,并与CRF进行结合,可以很...

    腾讯云TI平台
  • Bert时代的创新(应用篇):Bert在NLP各领域的应用进展

    Bert 给人们带来了大惊喜,不过转眼过去大约半年时间了,这半年来,陆续出现了与Bert相关的不少新工作。

    石晓文
  • Bert时代的创新:Bert在NLP各领域的应用进展

    Bert 给人们带来了大惊喜,不过转眼过去大约半年时间了,这半年来,陆续出现了与 Bert 相关的不少新工作。

    机器之心
  • NLP大魔王 · BERT 全解读

    BERT(Bidirectional Encoder Representations from Transformers)来自谷歌人工智能语言研究人员发表的论文

    NewBeeNLP
  • Bert最新进展,继续在NLP各领域开花结果!

    Bert 给人们带来了大惊喜,不过转眼过去大约半年时间了,这半年来,陆续出现了与 Bert 相关的不少新工作。

    昱良
  • 详细解读谷歌新模型 BERT 为什么嗨翻 AI 圈

    今天带来的这篇文章,详细的讲解了 BERT 以及和其他模型之间的区别。由深思考人工智能(iDeepWise Artificial Intelligence)投稿...

    用户1737318
  • 广告行业中那些趣事系列45:你想要的NLP各任务baseline这里都有

    摘要:本篇从业务实践的角度分享NLP各任务的baseline。首先介绍背景以及CLUE社区提供的NLP公共数据集;然后分别介绍了NLP各子任务的公共数据集、技术...

    数据拾光者
  • NLP面试宝典:38个最常见NLP问题答案一文get

    自然语言处理(Natural Language Processing,NLP)是指帮助机器理解和分析自然语言;它是利用机器学习算法从数据中提取所需信息的一个自动...

    新智元
  • 百度正式发布ERNIE 2.0,16项中英文任务超越BERT、XLNet,刷新SOTA

    近两年,以 BERT、XLNet 为代表的无监督预训练技术在多个自然语言处理任务上取得了技术突破。基于大规模数据的无监督预训练技术在自然语言处理领域变得至关重要...

    机器之心
  • 搞算法的妹子们,写出一本1200页的深度学习技术手册!(限时公开下载)

    ‍ ‍ 今天这篇文章不谈技术,给大家分享一些干货!首先来聊聊一个AI圈子里画风清奇的公众号 夕小瑶的卖萌屋。公号的作者中不仅妹子居多,颜值能打,而且喜欢将学术...

    AI科技评论
  • 独家 | 谷歌发布NLP最先进预训练模型:开源BERT

    作者:Jacob Devlin and Ming-Wei Chang, Research Scientists, Google AI Language

    数据派THU
  • 中国AI军团争霸机器阅读理解大赛,搜狗创下全球新纪录

    这不,2018年迭代上线的CoQA机器阅读理解大赛,一番你争我赶之后,最终还是形成了中国AI力量争霸之势。

    量子位
  • 按照时间线帮你梳理10种预训练模型

    本文的主要目的是理清时间线,关注预训练的发展过程,进行模型间的联系和对比,具体原理和细节请参考原论文和代码,不再一一赘述。

    zenRRan
  • 斯坦福NLP课程 | 第13讲 - 基于上下文的表征与NLP预训练模型(ELMo, transformer)

    教程地址:http://www.showmeai.tech/tutorials/36

    ShowMeAI
  • NLP模型BERT和经典数据集!

    对于刚入门NLP的伙伴来说,看到NLP任务很容易觉得眼花缭乱,找不到切入点。总的来说,NLP分为五大类无数小类,虽然种类繁多,却环环相扣。无论我们一开始学习的是...

    abs_zero
  • 斯坦福NLP课程 | 第20讲 - NLP与深度学习的未来

    ShowMeAI为斯坦福CS224n《自然语言处理与深度学习(Natural Language Processing with Deep Learning)》课...

    ShowMeAI

扫码关注云+社区

领取腾讯云代金券