首页 > 编程语言 >机器阅读理解算法集锦

机器阅读理解算法集锦

时间:2022-12-22 11:33:20浏览次数:64  
标签:BERT 机器 答案 question token 算法 集锦 使用 进行


机器阅读理解算法集锦

  机器阅读理解(Machine Reading Comprehension, MRC) 是一项基于文本的问答任务(Text-QA),也是非常重要和经典的自然语言处理任务之一。机器阅读理解旨在对自然语言文本进行语义理解和推理,并以此完成一些下游的任务。具体地讲,机器阅读理解的任务定义是:

给定一个问句(question) 机器阅读理解算法集锦_机器阅读理解,以及对应的一个或多个文本段落(passage) 机器阅读理解算法集锦_词向量_02,通过学习一个模型 机器阅读理解算法集锦_归一化_03 ,使得其可以返回一个具体的答案,记做 机器阅读理解算法集锦_卷积_04。根据具体下游任务的不同,输出也有所不同,通常机器阅读理解包含如下几个下游任务:

  • (1)是非问答:即回答类型为yes或no,通常属于一个二分类的任务;
  • (2)选择式问答:类似于选择题,此时模型的输入除了问句 机器阅读理解算法集锦_机器阅读理解_05 和文本 机器阅读理解算法集锦_归一化_06 外,也会给定候选的答案 机器阅读理解算法集锦_机器阅读理解_07,此时模型的输出可以为得分,并当做一个排序类问题。当为单选时,只取Top1的得分;否则可以设置阈值来进行多选;
  • (3)检索式问答:和选择式问答类似,但候选答案需要通过启发式或端到端方法自动检索(类似于从大规模的答案库中召回一部分相关的答案),并通过语义相似匹配来寻找答案。此时也可以视为排序类任务;
  • (4)区间查找:此时标准答案出现在文本 机器阅读理解算法集锦_归一化_06 内,即答案是 机器阅读理解算法集锦_归一化_06
  • (5)生成式问答:该类是最为复杂的任务,即完全由模型生成答案,任务可以定义为文本生成(或机器翻译类似)的任务;

  通常机器阅读理解还可以分为单跳式问答(one-hop)和多跳式问答(multi-hop)。其中前者指只提供一个文本来寻找答案,此时问题通常比较简单;后者则需要模型能够自主地寻找多个文本,且通常需要进行多跳推理,并从多个文本中寻找答案。后者比较接近真实应用场景,但任务也相对复杂困难。
  本文接下来介绍几种算法和对应的数据。


1、DrQA:Reading wikipedia to answer open-domain questions

GitHub:​​https://github.com/facebookresearch/DrQA​​ 评分:★★★☆☆

动机(Motivations):

  本篇文章是考虑到文本问答的真实场景下,应该是先从大规模的文本库中进行启发式的检索召回,然后通过深度学习模型来对小部分的文本挑选答案。即先检索,再找答案。本文的文本库则选择大规模的维基百科。任务属于上述分类的“(4)区间查找”,但也结合了检索式问答的特点。

机器阅读理解算法集锦_词向量_10


方法(Methodology):

(1)使用Bigrame哈希和TF-IDF方法,在给定一个问句的基础上可以快速找到相关联的文章;具体的做法是:

A simple inverted index lookup followed by term vector model scoring performs quite well on this task for many question types, compared to the built-in ElasticSearch based Wikipedia Search API (Gormley and Tong, 2015). Articles and questions are compared as TF-IDF weighted bag-of-word vectors. We further improve our system by taking local word order into account with n-gram features. Our best performing system uses bigram counts while preserving speed and memory efficiency by using the hashing of (Weinberger et al., 2009) to map the bigrams to 224 bins with an unsigned murmur3 hash.

(2)使用多层神经网络检测答案的区间范围:

<1> 输入特征:

  • word embedding:300维度词向量;
  • exact match:如果passage中的token在question出现过,则该token记为1,否则为0;
  • token feature:NER、POS、TF值;
  • aligned question embedding:passage中的每个token对question进行加权求和,得到question加权后的向量

<2> 表征:
  passage和question均使用3层BiLSTM进行表征,且分别将每一层的隐向量拼接起来。
question表征向量加权求和,得到q
  输出层使用q和passage的每个位置进行注意力计算,并得到每个位置被预测为start或end的概率分布。

数据(Data):

  • SQuAD1.1:斯坦福大学2016年公开的单跳式阅读理解数据集
  • CuratedTREC:TREC问答语料;
  • WebQuestions:一种复杂的知识图谱问答数据集;
  • WikiMovies:电影类的问答数据集

2、FusionNet:Fusion via fully-aware attention with application to machine comprehension (2018)

GitHub:​​https://github.com/momohuang/FusionNet-NLI​​ 评分:★★☆☆☆

机器阅读理解算法集锦_归一化_11


动机(Motivations):

  question与passage之间通常通过attention实现信息的融合,作者总结了当前的几种融合方式,主要分为 word-levelhigh-levelself-boosted level 三层,并对先前一些方法进行了分类,如图。:

机器阅读理解算法集锦_卷积_12


(1)word-level fusion:即在输入表征层便实现question和passage在token级别上的相互融合;

(2)high-level fusion:即在编码层上实现融合,代表性的融合方法有Match-LSTM、BiDAF,以及当今比较流行的multi-head attention和BERT等;

(3)self-boosted fusion:即question或passage的token与当前文本的其他token做融合,类似于self-attention;

方法(Methodology):
  作者认为在当时,现有的方法都只使用其中的几种,因此本文决定全部使用来提升阅读理解能力

(1)input:输入context和question,每个token使用预训练的glove词向量。contextualized向量、POS和NER向量以及一个归一化的词频。

(2)word-level fusion:

  • emi:context的第i个token如果出现在question中,则记做1;
  • 对于每一个context的token,使用注意力机制对question进行加权求和;
    结合词向量以及上述两个形成word-level fusion向量

(3)Reading:分别对context和question使用两层双向lstm进行编码。

(4)Question Uderstanding:再次使用一层BiLSTM,对question的两层编码拼接后使用BiLSTM进行编码。

  history-word:每一层进行表征时,都将之前所有层的隐向量拼接起来作为history-word,并使用注意力机制融合question表征信息。

数据(Data):

  • SQuAD1.1:斯坦福大学2016年公开的单跳式阅读理解数据集

3、QANet: Combine Local Convolution with Global Self-Attention for Reading Comprehension(2018 ICLR)

GitHub:​​https://github.com/BangLiu/QANet-PyTorch​​ 评分:★★★★★

动机(Motivations):
  现如今引入端到端的方法用于解决文本问答(机器阅读理解)问题受益于成功地使用了循环神经网络和注意力机制。例如BiDAF。但缺点是其在训练时处理长文本时速度慢,不利于快速迭代、不适用大规模数据集,不利于实时反馈等。为了缓解这个问题,本文去除掉循环神经网络架构,替换为卷积网络和self-attention;

贡献(Contributions):
(1)我们的方法只需要训练3个小时,就可以达到和BiDAF训练15个小时一样的F1值。如果我们的方法继续训练到18小时,F1值则达到82.7;
(2)使用数据增强来提升模型效果。将英文语料翻译为其他语言再重新翻译回英文;

方法(Methodology):

机器阅读理解算法集锦_机器阅读理解_13

(1) Input Embedding Layer

机器阅读理解算法集锦_词向量_14 的context和长度为 机器阅读理解算法集锦_归一化_15

(2) Embedding Encoder Layer

  包括卷积层,自注意力层和前馈网络层(如上图右侧)

  • 卷积层为深度可分离卷积网络(Depthwise Separable Convolutions),相比传统的卷积具有更好的记忆和泛化性能。卷积核大小为7,数量为128,每个encoder block包含4层卷积;
  • 自注意力层为多头注意力机制,头数为8,自注意力公式为:

机器阅读理解算法集锦_自然语言处理_16

  • 前馈网络层:采用一层全连接层

  每个卷积层、自注意力层和前馈层之间均采用残差连接法和layernorm:

残差连接: 某一层的输入为 机器阅读理解算法集锦_词向量_17 ,该层的函数为 机器阅读理解算法集锦_归一化_18 该层的输出则为 机器阅读理解算法集锦_归一化_19
LayerNorm: 在一组batch中,对每个样本分别按照特征进行归一化,均值向量和标准差向量的维度变换为 [batch_size, feature_size] -> [batch_size],如下图。最终原始矩阵归一化后的维度为[batch_size, feature_size]。

机器阅读理解算法集锦_机器阅读理解_20

LN与BN的区别

:BN是按照batch维度进行归一化的,即同一个特征对所有样本进行归一化,均值向量和标准差向量维度变换为 [batch_size, feature_size] -> [feature_size]。而LN则是按照特征维度进行归一化的。


参考:layer normalization讲解(及其与Batch Normal区别)https://zhuanlan.zhihu.com/p/54530247

  在Encoder部分,对应Question和Context,分别只有一个block,输出的维度则是128;

(3) Context-Query Attention Layer

  context-to-query:query的每个token与context进行相似度计算,相似度函数为 机器阅读理解算法集锦_机器阅读理解_21,相似度矩阵 机器阅读理解算法集锦_机器阅读理解_22,按行归一化后表示为 机器阅读理解算法集锦_词向量_23 。context-to-query attention为 机器阅读理解算法集锦_词向量_24机器阅读理解算法集锦_归一化_25

  query-to-context:表示每个context的token与query的注意力。对上面产生的相似度矩阵 机器阅读理解算法集锦_自然语言处理_26 按列归一化得到 机器阅读理解算法集锦_机器阅读理解_27,query-to-context attention为 机器阅读理解算法集锦_词向量_28

(4) Model Encoder Layer

机器阅读理解算法集锦_归一化_29,使用7个Embedding Encoder Block,每个block的卷积层为2,每参数均共享。3个model encoder参数共享;

(5) Output Layer

  输出部分则为start和end的概率分布,公式为:

机器阅读理解算法集锦_机器阅读理解_30

损失函数为:

机器阅读理解算法集锦_归一化_31

  说明:预测的start和end的概率分布中,取出ground truth位置的预测概率。最小化损失函数,即最大化ground truth位置的预测概率。在pytorch中可以写为:

ap = ... # 输入start和end的预测概率分布,维度为 [batch_size, 2, max_len]
y = use_cuda(torch.from_numpy(np.array(y))) # ground truth位置,维度为 [batch_size, 2]
prob = torch.gather(self.ap, -1, y.unsqueeze(-1)).squeeze() # [batch_size, 2] # 根据ground truth 的start和end位置,取出预测的概率值
loss = -torch.mean(torch.sum(torch.log(prob + 1e-10), -1)) # loss函数,1e-10为了防止出现log(0)。

机器阅读理解算法集锦_自然语言处理_32(两个概率的乘积值,机器阅读理解算法集锦_归一化_33),使用动态规划查询。

数据(Data):

  • SQuAD1.1:斯坦福大学2016年公开的单跳式阅读理解数据集

4、Retrospective Reader for Machine Reading Comprehension(2020)

GitHub:无
评分:★★★★☆

动机(Motivations):
(1)先前的工作有些没有考虑到问题是否存在答案,有些工作则是简单的将验证模块(verification,即检测是否存在答案)与答案区间预测结合起来进行多任务训练。
(2)现如今许多机器阅读理解的Reader都关注于编码器Encoder,虽然强大的编码器对机器阅读理解有重大的影响,但现有工作很少关注解码器部分。

贡献(Contributions):

  1. 提出一种新的具有回顾性的阅读器Retrospective Reader充分有效地使用答案验证、answering verification;
  2. 实验表明在benchmark上有较好的的效果;
  3. 利用重要性检验来验证模型比其他方法好

方法(Methodology):

  • 受人类阅读的启发,先粗读,再细查。
  • 粗略阅读整个上下文和问题,以确定这个上下文是否包含答案;
  • 详细阅读验证答案并进行最终的预测
  • 使用预训练语言模型作为编码器

机器阅读理解算法集锦_归一化_34


(1) Sketchy Reading Module

Embedding

  使用预训练语言模型作为编码器,将question和context拼接起来直接喂入encoder中,得到输出。对于每个token将词向量、位置表征向量、token type向量拼接。

Interaction

  使用多层的Transformer,输出最后一层的隐状态H

机器阅读理解算法集锦_词向量_35


External Front Verification(EFV)

  该部分进行二分类。将h1(CLS标签)作为整个序列的表征,并进行二分类,使用cross entropy。

score表示为预测为无答案的得分,其表示预测无答案的概率与预测为有答案的概率差:

机器阅读理解算法集锦_词向量_36

(2) Intensive Reading Module
得到根据上面获得的 机器阅读理解算法集锦_词向量_37
Question-aware Matching
  在细读阶段针对与问题的匹配层,作者在消融实验中来判断重新使用预训练模型效果如何。但在实验提交时则不这么做。
  为了得到question和context的表征,则直接从上面得到的H中获取:
<1>根据question和context位置,获得HQ和HP;
<2>根据设置好的长度限制进行padding
<3>比较两种match方法

  • cross attention:使用multi-head attention。Q为H,K和V为H中context部分;
  • Matching Attention:使用Self-Matching
    最终得到H’。(如果不使用match,则H’=H)
    Span Prediction

使用log计算span预测的损失:

机器阅读理解算法集锦_自然语言处理_38


Internal Front Verification(IFV)

  再次将 机器阅读理解算法集锦_自然语言处理_39机器阅读理解算法集锦_机器阅读理解_40Threshold-based Answerable Verification

  根据start和end的预测概率,来求可能为空答案的得分:

机器阅读理解算法集锦_词向量_41

数据(Data):

  • SQuAD2.0:斯坦福大学2018年公开的单跳式阅读理解数据集,包含无答案的标签;
  • NewsQA:人工生成的100000个QA对

5、Learn to Retrieve Reasoning Paths Over Wikipedia Graph Question Answering (2020 ICLR)

GitHub:​​https://github.com/AkariAsai/learning_to_retrieve_reasoning_paths​​ 评分:★★★★☆

动机(Motivations):
  先前的问答系统是在基于大规模的文本(例如维基百科)上先使用非参数训练的启发式方法(TF-IDF或BM25)来检索固定数量的文档列表,再通过神经网络来寻找答案区间span,例如R3模型等。然而:
(1)这些方法在寻找答案时是对文档进行单独处理(single-hop),忽略了文档之间的关系(multi-hop);
(2)多跳问答中,每个文档通常与原始问题没有多少词汇或语义上面的重叠关系;
(3)以实体为中心的问题面临一些挑战:将必要的信息嵌入在低维度空间中很难捕捉实体之间的语义关系。

方法(Methodology):
  本文引入一种新的循环图检索方法来对相关文档进行检索并对复杂问题进行路径推理。
(1)Construct Wikipedia Graph:根据维基百科的超链接和文档结构构件不同文档段落之间的关系边,形成维基百科段落图;
(2)Retriever:使用循环神经网络来为这张图中的推理路径进行打分,最大化挑选正确的段落的似然估计,并使用BERT进行微调;
(3)Reader:使用多任务学习方法为每个推理路径进行打分并抽取正确的答案区间;
(4)采用数据增强和负采样来提升模型的鲁棒性;

  本文的想法在于,使用RNN来对整个维基百科内构件的文档图进行路径搜索,最终获得一定数量的推理路径。以这种方式检索到的文档,能够保证文档之间是有一定的语义关联性,而相比传统的基于TF-IDF和BM25检索到的文档来说能够避免词法重叠度很低但与答案十分密切相关的文档而未被检索的问题。同时检索模块也是用神经网络,能够比较好地与阅读阶段进行交互。

机器阅读理解算法集锦_卷积_42

Learning to Retrieve Reasoning Path
(1)使用开放的维基百科,将每一篇文章以段落为单位进行划分,最终可以获得百万级别的段落。考虑到两种类型的链接,一种是内部链接,一个段落可以链接到另一篇文章;一种是文档内的链接,一个段落可以链接到同一个文章的另一个段落。最终得到的是一个稠密图,该图是离线构造的;
(2)使用RNN来进行路径的推理。在每个时间步t时,使用BERT对当前所在的候选段落中的每个段落进行编码,编码时输入问句q和段落 机器阅读理解算法集锦_自然语言处理_43,并只取BERT的CLS标签对应的embedding,记做 机器阅读理解算法集锦_卷积_44。其次使用一层线性层来对所有候选段落计算概率分布,对被选择的段落机器阅读理解算法集锦_卷积_44喂入RNN计算下一时刻的隐状态 机器阅读理解算法集锦_归一化_46;当输出EOF时终止;每到一个时刻t时,候选段落集合会更新;
(3)为了能够在大规模的图中快速检索,对初始化的段落结点,选择基于TF-IDF方法初始化最初的候选段落,TF-IDF得分最高的F个作为初始化的段落,在时刻2之后,添加EOF标记;
(4)使用Beam Search方法,最终输出B个路径

机器阅读理解算法集锦_词向量_47

  训练检索器时,根据ground-truth path来作为目标。

(5)数据增强:对训练集进行了增强,添加一个新的训练path,这个path是在ground-truth路径的第一个位置加上TF-IDF得分最大的段落。因为第一个段落都是基于启发式的TF-IDF获得的,因此在ground-truth添加这个初始化的段落有利于在测试阶段进行测试;

(6)使用负采样方法来区分正确和错误的路径。一种是错误的TF-IDF,一种是错误的超链接;

(7)loss:

机器阅读理解算法集锦_自然语言处理_48


前者表示每个时刻段落被预测的概率对应的损失,后者则是负样本被预测的损失;

Reading and Answering Given Reason Paths
  采用多任务学习方法训练阅读器,主要包含机器阅读理解任务(选择传统的方法)和重排序(根据每个路径可能包含答案的概率进行重排序)
(1)将问句和所有推理路径上的段落拼接起来,并使用BERT进行编码,让模型充分学习到交互信息;(BERT的输出层提供了start和end的标记,BERT原文也提供了机器阅读理解的方法,因此本文直接使用BERT)
(2)共享上面的BERT模型,使用CLS标记对应的向量喂入线性层计算当前路径可以回答答案的概率:

机器阅读理解算法集锦_词向量_49


选择概率最大的路径,并返回对应的答案区间

机器阅读理解算法集锦_机器阅读理解_50

  因为在检索阶段,会获得许多路径,而只有一条路径是正确的(或者概率最大的),因此在多任务训练阶段,要分别对每个路径计算概率,并且对每个路径根据ground-truth start和end计算概率,因此总的损失为:

机器阅读理解算法集锦_自然语言处理_51


前者表示当前路径的答案区间的概率,后者表示该路径的概率。如果该路径包含答案,则 机器阅读理解算法集锦_自然语言处理_52,否则 机器阅读理解算法集锦_词向量_53 (机器阅读理解算法集锦_机器阅读理解_54表示推理路径,机器阅读理解算法集锦_词向量_55为问句)

数据(Data):

  • SQuAD2.0:斯坦福大学2018年公开的单跳式阅读理解数据集,包含无答案的标签;
  • HotpotQA:人工标注的大规模多跳问答数据集;
  • Natural Question:基于Natural Question和谷歌搜索API构建的问答语料;

6、SG-Net:Syntax-Guided Machine Reading Comprehension (2020 AAAI)

GitHub:​​https://github.com/cooelf/SG-Net​​ 评分:★★★★★

动机(Motivations):
(1)传统的基于注意力机制的机器阅读理解方法将所有的token都进行了加权,导致模型会关注一些可有可无的没用的token;
(2)当问句或上下文很长时(lengthy question/passage context)或者包含的细节过多时(detailed riddled),传统的神经网络方法会效果会下降,因为此时神经网络很难理解句子,且过度的关注一些没用的词而不是与答案十分密切相关的;
(3)另外,对于上下文(passage)的理解时,将多个句子一同作为输入,对所有句子的每个token施加权重过于囫囵吞枣,而忽略了句子内部的语法结构;
(4)基于上述的几个因素,促使我们寻找一个更有价值的方案,来根据每个token的语法重要性来选择重要的token,提出syntax-guided方法来提升注意力的性能,降低无关的token产生的噪声影响;
(5)现如今基于RNN和Transformer的编码器常用于句子理解编码方面,由于Transformer广泛使用了self-attention,且以其为核心的BERT在各个下游任务上均达到非常好的结果,因此使用BERT作为句子编码成为首选;

相关工作(Related Works):
(1)机器阅读理解包含许多核心任务包括完形填空答案抽取以及多项选择,本文主要关注的是后两者;
(2)Attention-based的方法在机器阅读理解上广泛使用,包括attention sum reader、self-matching、gated-attention等;
(3)预训练语言模型在诸多benchmark上达到SOTA效果,尤其是现如今的BERT模型,本文也以BERT作为encoder;
(4)语法解析树成功应用在各个自然语言处理任务中。在这项工作中,我们形成了一种通用方法,可以从语法指导的表示中受益,这是我们尽最大努力在Transformer编码器中改进SAN架构的尝试。 语言学上的动机是,用依赖树中来自其邻居的信息更新一个单词的表示,这种想法得益于显式句法约束。

方法(Methodology):
(1)直接提取SAN(Self-Attention Network)的Transformer-based Encoder的输出标签;
(2)根据依存关系构建语法树并构建syntax-based SAN(Self-Attention Network)模型;
(3)将SAN和syntax-SAN和SAN 结合起来输入到预测层

机器阅读理解算法集锦_机器阅读理解_56

(1) Syntax-Guided Network

  • 将输入embedding喂入Transformer-based Encoder获得表征,并喂入到syntax-guided network中;
  • syntax-guided network的输出与原始的Transformer-based Encoder的输出合并

机器阅读理解算法集锦_词向量_37

  在syntax-guided self-attention layer中,根据依存语法树,每个token都会有一个head node,和多个child node,因此我们每表征一个token时,只会让其关注具有句法重要性的token,即从child node的角度来编码head node。简单地来说,就是不像先前的注意力机制那样对所有的token进行加权求和,而是对依存关系限制的部分token进行加权求和,例如如图,credit单词只会与其自身、losses和reflects进行加权求和。

机器阅读理解算法集锦_自然语言处理_58

机器阅读理解算法集锦_卷积_59的矩阵机器阅读理解算法集锦_机器阅读理解_60机器阅读理解算法集锦_归一化_61 的元素代表第i个token是第j个token的祖先。例如上图中每个,credit(i=4)和reflects(j=2)和losses(j=5)以及其自身是有关系的,即机器阅读理解算法集锦_机器阅读理解_62,其余机器阅读理解算法集锦_机器阅读理解_63

  根据这个Mask,直接喂入到传统的Transformer的Encoder架构中,并使用多头注意力

机器阅读理解算法集锦_机器阅读理解_64

机器阅读理解算法集锦_卷积_65

机器阅读理解算法集锦_词向量_66

最后得到两个表征向量 机器阅读理解算法集锦_词向量_37机器阅读理解算法集锦_自然语言处理_39,最后采用加权求和方法进行合并 机器阅读理解算法集锦_卷积_69

机器阅读理解算法集锦_卷积_70

(2) Task-Specific Adaptation

  本文在两个机器阅读理解任务上进行测试,一个是以SQuAD2.0为主的答案区间抽取任务,一个是以RACE为主的选择题。
(1)SQuAD2.0

  在输出层部分,使用一个全连接线性层和softmax,得到start和end的输出概率分布,并使用ground-truth aware的cross entropy作为目标函数。另外有些问题可能没有答案,因此还需要对是否存在答案进行预测,得分为:

机器阅读理解算法集锦_归一化_71

采用动态规划来判断当前答案是否可回答。当可回答时,返回答案区间,否则返回null
(2)RACE:
  将 机器阅读理解算法集锦_卷积_72

数据(Data):

  • SQuAD2.0:斯坦福大学2018年公开的单跳式阅读理解数据集,包含无答案的标签;
  • RACE:多项选择题数据集;

7、Enhancing Pre-Trained Language Representations with Rich Knowledge for Machine Reading Comprehension(2019ACL)

摘要:
  机器阅读理解是一个重要和富有挑战的自然语言处理任务。最近包括BERT等预训练语言模型得以成功应用,并在机器阅读理解任务上达到最佳效果。本文我们调查充分利用外部知识库对提升机器阅读理解的潜力,并提出KT-Net,使用一个注意力机制动态从知识库中选择知识并充分利用到BERT提取的文本特征中进行预测。

动机:
(1)语言模型在MRC任务上得以成功达到SOTA,得益于其大规模在无监督语料上使用深度Transformer进行训练,因此其可以捕捉比较复杂的语言背景信息,并比先前的表征方法更好的理解语言;
(2)除了语言模型外,还需要引入外部的知识来支撑复杂的推理;因此我们引入外部知识做增强;使用包括WordNet以及NELL两个知识库。

方法概述:

  • 使用BERT编码层为question和passage进行深度编码;
  • knowledge integration层动态挑选KB的embedding的信息并融合到BERT的编码层中;
  • self-matching层充分利用融合后的BERT和KB信息;
  • 输出层预测最终结果

贡献:

  • 调查并展示了引入外部知识库和预训练模型进行增强对MRC任务提升的灵活性和效果;
  • 提出KT-Net并在benchmark上达到最优解效果;

机器阅读理解算法集锦_卷积_73

方法:

BERT Encoder Layer

机器阅读理解算法集锦_词向量_74,每个token包括word-piece emebdding,position embedding和segment embedding;

Kowledge Integration Layer

机器阅读理解算法集锦_词向量_75

机器阅读理解算法集锦_词向量_76

机器阅读理解算法集锦_卷积_77 防止当所有KB embedding都与token不相关时。对所有的KB embedding以及 机器阅读理解算法集锦_卷积_77 一同进行加权求和,得到 机器阅读理解算法集锦_机器阅读理解_79,最终每个token将BERT和KB得到的向量拼接机器阅读理解算法集锦_词向量_80

Self-matching Layer

机器阅读理解算法集锦_机器阅读理解_81 计算self-attention,得到任意两个token之间的权重,并进行加权求和;

机器阅读理解算法集锦_卷积_82


机器阅读理解算法集锦_词向量_83


作者还考虑对于两个token i和j,可以通过中间结点k实现交互。

机器阅读理解算法集锦_卷积_84

Output Layer

  使用BERT自带的原始的方法,输出start和end的概率分布

knowledge embedding检索策略

  首先映入WordNet和Nell知识库,并使用KBE进行知识表示预训练;其次进行检索,对于question或passage中的每个token,在WordNet中,直接根据token返回对应的候选三元组;对于NELL中,则使用实体识别和链接(字符串匹配)从而获得候选实体。

  相比先前工作(先检索,在根据检索得到的子图进行表征),我们的工作是先在整个图上预训练表征,在检索,这样获得的子图的embedding包含了全局信息

小计

  需要说明的是,SQuAD2.0版本的数据集相比SQuAD1.1的差别在于其新增了大量的QA样本,这些新增的样本是没有答案的(no answer),因此这需要模型除了具备挑选答案区间的能力外,还要有判断该问题是否存在答案,或是否是answerable的。上述的几个算法以及先前的方案总结出两种启发式的判别方法:

(1)第一阶段的判断: 不进行答案区间的预测,只用来判断是否存在答案:
  假设我们使用BERT来对Question和Passage进行了表征后,其输出部分记做 机器阅读理解算法集锦_卷积_85 ,其中第一个token 机器阅读理解算法集锦_词向量_86 对应的是[CLS],根据BERT原文,该隐状态向量可作为整个序列的聚集向量,我们可以将 机器阅读理解算法集锦_归一化_87 喂入一个线性层和softmax层获得两维度的概率分布 机器阅读理解算法集锦_机器阅读理解_88,其中前者表示存在答案的概率,后者为不存在答案的概率,并可以使用二元的交叉信息熵作为目标函数进行反向梯度计算,同时用两者的差值表示一个得分 机器阅读理解算法集锦_卷积_89 ,这个得分其实很好理解,如果存在答案的概率远远大于不存在答案的概率,理应得分很高,如果存在答案的概率小于不存在答案的概率,得分是负数。我们可以设置一个阈值 机器阅读理解算法集锦_归一化_90

(2)第二阶段的判断: 在预测答案区间之后,根据答案区间的概率启发式判断是否存在答案:
  另一种是去预测答案区间。如果使用BERT对Q和P进行表征,则输出部分记做 机器阅读理解算法集锦_卷积_85 ,我们可以直接将其喂入一个线性层和softmax层得到每个位置的概率分布,即预测start和end的概率分布。我们可以根据start和end的ground truth来作为损失函数,即:机器阅读理解算法集锦_机器阅读理解_92 。此时我们可以利用预测的start和end的概率作为得分。假设序列长度为 机器阅读理解算法集锦_词向量_14, 则start和end的概率可记做 机器阅读理解算法集锦_机器阅读理解_94 ,其中 机器阅读理解算法集锦_归一化_95

机器阅读理解算法集锦_自然语言处理_96

机器阅读理解算法集锦_归一化_97

第一个式子表示所有的start和end组合中,概率和最大的值作为存在答案的得分,而第一个位置的token(即[CLS])的概率则认为是不存在答案的得分,两者差作为最终认为存在答案的概率 机器阅读理解算法集锦_归一化_98,同样可以设置阈值 机器阅读理解算法集锦_归一化_90

(3)两者合并? 如果可以的话,可以在第一阶段进行一次打分,第二阶段进行一次打分,两个阶段的loss进行加权求和训练模型,两个阶段的score也加权求和与阈值进行判断。最终大于阈值的返回预测的start和end位置区间,否则返回一个null。这也是上面第4篇文章的思路。

标签:BERT,机器,答案,question,token,算法,集锦,使用,进行
From: https://blog.51cto.com/u_15919249/5962446

相关文章

  • 工业视觉检测项目的算法实现
    一、基本情况在较好的成像质量下,可以通过ROI直接完成初略定位;而后通过手工定义特征提取信息;完成量化和评价。  这次项目能够实现的首要原因:一是因为在已经布置了......
  • GOCVHelper图像处理算法库
      GOCVHelper(GreenOpenComputerVersionHelper)是我在这几年编写图像处理程序的过程中积累下来的函数库。主要是对Opencv的适当扩展和在实现Mfc程序时候的功能增......
  • 简单算法题-完美数
    对于一个正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为「完美数」。输入:num=28输出:true解释:28=1+2+4+7+141,2,4,7,和14是28的......
  • 基于朴素贝叶斯算法实现垃圾邮件分类
    一、背景垃圾邮件的问题一直困扰着人们,传统的垃圾邮件分类的方法主要有"关键词法"和"校验码法"等,然而这两种方法效果并不理想。其中,如果使用的是“关键词”法,垃圾邮件中如......
  • 机器学习——信用分数分类
    一、选题的背景假设一家金融公司需要对用户的信用进行快速的评分,并对其信用等级进行分类,如果使用人工进行分类无疑是需要耗费大量的人力和时间。该公司收集了用户的银行详......
  • [机器学习] t-SNE聚类算法实践指南
    ​ 转载于比PCA降维更高级——(R/Python)t-SNE聚类算法实践指南-阿里云开发者社区作者介绍:Saurabh.jaju2  Saurabh是一名数据科学家和软件工程师,熟练分析各种数据集和......
  • 【算法实践】他山之石,可以攻玉--利用完全二叉树快速实现堆排序
    前言什么是堆堆是一种数据结构,它是完全二叉树或者是近似完全二叉树的一种数据结构,树中每个结点的值都不小于(或不大于)其左右孩子结点的值。何为完全二叉树完全二叉树是一种......
  • 一文看懂什么递归(算法小结)
    前言递归是算法中一种非常重要的思想,应用也很广,小到阶乘,再在工作中用到的比如统计文件夹大小,大到Google的PageRank算法都能看到,也是面试官很喜欢的考点最近看了不少......
  • 机器学习--是否佩戴口罩图片识别
    (一)选题背景:秋冬季本就是流感的高发期,叠加近年来势汹汹的肺炎病毒疫情。个人防护工作显得更加重要。流感多数以人体唾沫传播。此时口罩就起到了非常重要的作用,可以在源头进......
  • 算法-如何理解递归,写好递归函数
    不是每个程序员天生对递归理解深刻,刚入大一时候,当别人写出第一个求最大公约数的递归函数时,对其多么的惊叹,竟然可以不用循环,竟然代码可以这么简洁,确实递归在大多数情况下实......