首发于NLP工作站
阅读笔记:开放域检索问答(ORQA)

阅读笔记:开放域检索问答(ORQA)

之前一直在思考阅读理解技术应该如何落地,现实应用场景中,不会有人把具体的文档片段给摘出来,我们直接通过预测span,得到最终答案。在现实场景中,我们往往依靠检索方法,将多个文档或者一个较长的文档进行筛选,得到最终进入到阅读理解模型中的片段文档。而传统检索任务效果又不是很理想,上深度学习模型对性能又是一大考验。正好,看到了这篇论文《Latent Retrieval for Weakly Supervised Open Domain Question Answering论文地址,从中受到一些启发。其中,反向完型填空任务(Inverse Cloze Task,ICT)刷新了我对预训练任务的认知(可能以前就了解不够,呜呜呜~~~)。

好久没有写知乎了(都怪自己太懒,很多论文都没有好好总结一下),今天分享一下这篇论文,有错误的地方,还请多多指教。

目前在开放域得QA问答的研究一般都假设有强监督的支持样本(evidence),或者假设有一个信息检索系统可以检索出需要的候选样本。但这两种方法都不是最优的,因为金标准的样本并不是总存在的,并且QA问答和信息检索是有本质区别的。ORQA证明了在没有任何信息检索系统的情况下,仅从Q-A句子对中联合学习检索器阅读器是有可能的。但是由于从头开始学习是不切实际的,因此通过ICT任务预训练了一个检索器。发现,学习得到的检索器在精准匹配率上,比BM25高出19%

我们从论文中的Introduction、Overview、Open-Retrieval Question Answering、Inverse Cloze Task、Inference、Learning和Hyperparameters七个部分进行介绍。

Introduction(引言)

由于最近阅读理解系统的进步,开放域的QA问答(即依据样本必须从开放的语料库中检索得到,而不是人为输入)又重新引起了人们的兴趣。这为实际应用提供了一个更现实的场景。目前的方法,一般都是依赖于信息检索系统来大量减少搜索空间或减少虚假信息,先从语料库中筛选出问题对应得有效样本,再通过阅读理解技术从筛选后得样本中找到问题对应得答案。但是QA问答和信息检索是有本质区别的,尽管信息检索关注了词汇和语义匹配,但本质上来说,问题是非具体的,需要更多的语言理解,因为用户是在显式地寻找未知信息。我们应该直接学会使用问答数据进行检索,而不是依赖于信息检索系统召回率得上线。

作者提出了开放检索问答系统(ORQA)。ORQA学习从开放域中检索所需样本,并且仅依赖于Q-A句子对进行监督学习。而无监督反向完形填空任务预训练出的检索器是端到端学习变成可能的关键点。在反向完形填空任务中,一个句子被当作问句,它的上下文被当作预测样本。给定一个问题,反向完形填空任务要求从一批候选对象中选择相应的预测样本。反向完形填空任务预训练提供了足够强大的初始化,使ORQA(联合检索器和阅读器模型)可以通过简单地优化找到正确答案的边际,进行端到端的微调。

Overview(概述)

在开放域QA问答中,输入 q 是问题字符串,输出 a 是答案字符串。与阅读理解任务不同,文本的来源是模型的选择,而不是任务定义的一部分。作者比较了表1中不同阅读理解任务和QA任务的假设。

其中,阅读理解任务的训练集和测试集一般都是直接给出,以往的QA任务的训练集和测试集是通过启发式方法检索得到的封闭文档集合。而ORQA的训练集和测试集都是通过学习得到的。

QA模型定义:模型是根据非结构化文本语料库定义的,语料库被分成 B 块样本文本。答案推导是一个 (b,s) 对,其中 1\leq b \leq B ,表示B块样本文本中的一个索引, s 代表在 b 内的一个span,开始和结束的token表示为 START(s)END(s)

模型定义一个评分函数 S(b,s,q) ,表示针对给定问题 q 的答案推导 (b,s)分数,这个评分函数可以分解为检索器分数 S_{retr}(b,q) 和阅读器分数 S_{read}(b,s,q) 。在推理过程中,模型输出得分最高的答案串 a^{*}=TEXT(\argmax_{b,s}{S(b,s,q)})

任何开放领域的QA系统都有一个必将面临得挑战,那就是数据得处理规模。而在作者对英语维基百科语料库的实验中,共分割了1300万块样本文本,每个超过2000个可能的答案跨越s。

Open-Retrieval Question Answering (ORQA)

ORQA的一个重要方面是它的表现力,它能够检索开放语料库中的任何文本,而不是局限于信息检索系统所返回的封闭集。模型框架如图1所示。

检索器采用向量内积得方法,公式如下:

h_{q}=W_{q}BERT_{Q}(q)[CLS]

h_{b}=W_{b}BERT_{B}(b)[CLS]

S_{retr}(b,q)=h_{q}^{T}h_{b}

即,使用BERT对问题和样本文本进行分别编码,再对其向量进行维度变换到128( W_{q}和W_{b} 是768*128得矩阵),最后将得到得问题向量和样本文本向量进行点积,得到检索器分数。这一步的思想应该是参考了Sentence Bert的思想,论文地址。(个人看法)

阅读器采用span抽取的方法,公式如下:

h_{start}=BERT_{R}(q,b)[SRART(s)]

h_{end}=BERT_{R}(q,b)[END(s)]

S_{read}(b,s,q)=MLP([h_{start};h_{end}])

即,使用BERT对问题和样本文本进行共同编码,预测答案的起始位置和结束位置,最终得分为阅读器的得分。

描述的模型在概念上很简单。然而,推理和学习是具有挑战性的,因为(1)开放的语料库提供了一个巨大的搜索空间(超过1300万个样本文本),并且(2)针对问题存在大量模糊的模棱两可的样本文本包含答案。因此,作者通过在无监督的预训练的模型初始化检索器参数,来应对这些挑战。预训练的检索器可以(1)预训编码好所有的样本文本,从而在微调阶段实现动态快速的top-k检索;(2)减少模糊的模棱两可的样本文本。

Inverse Cloze Task (ICT)

完形填空任务是根据上下文来预测被掩盖掉的文本。反向完型填空任务则是,通过一句话,来预测一批句子是否是该句话的上下文。如图2所示。

目标函数与下游检索任务一致如下:

P_{ICT}(b|q)=\frac{exp(S_{retr}(b,q))}{\sum_{b^{'}\in BATCH}{exp(S_{retr}(b^{'},q))}}

其中, q 是一个被当作伪问题处理的随机句子, b 是围绕q的文本,而 BATCH 是批处理中的一组样本文本b。由于伪问题不存在与样本文本中,因此ICT任务将学习到比单词匹配更多的特征信息,即从未指定的信息中推断语义,这也是QA任务与传统信息检索任务的区别。同时,为了使检索器依然可以学习到简单的匹配特征,因此作者只在90%的样本中从上下文中删除句子,鼓励模型在需要时学习抽象表示,剩余样本可用在学习低级单词匹配特性。

ICT任务预训练模型的目的是:

(1)尽管预训练期间的句子(伪问题)与微调期间的问题不匹配,但作者希望zero-shot样本文本检索性能足以引导潜伏变量学习。

(2)在预训练的样本文本和下游的样本文本之间没有这种不匹配。期待在没有进一步训练的情况下,编码器对样本文本的编码可以很好。只有问题的编码需要在下游数据中进行微调。

Inference

语料库中的所有样本文本使用预训练好的ICT模型进行预先编码,这样可以将向量索引化,实现快速的内积搜索。

我们检索前k个样本文本,只计算这k个样本文本的阅读器分数。虽然我们在单个推理步骤中只考虑top-k样本文本,但是这个集合在训练期间会动态变化,因为问题的编码器是根据弱监督进行微调的。

Learning

由于ICT提供比较优秀的检索结果,因此学习相对也是比较简单。定义生成答案的概率,如下:

P_{ICT}(b,s|q)=\frac{exp(S(b,s,q))}{\sum_{b^{'}\in TOP(k)}{\sum_{s^{'}\in b^{'}}{exp(S(b^{'},s^{'},q))}}}

其中 TOP(k) 表示基于 S_{retr} 检索到的前 k 个块。作者在实验中使用 k = 5 。定义损失函数如下:

L_{full}(q,a)= -log\sum_{b\in TOP(k)}{\sum_{s\in b,a=TEXT(s)}{P^{'}(b,s|q)}}

其中, a 是标准答案字符串, a = TEXT(s) 表示标准答案字符串 a 是否与span  s 完全匹配。为了鼓励更积极的学习,我们还包括了一个早期的更新,在那里我们考虑一个更大的 c 证据块集合,但只更新检索分数,这是廉价的计算

P_{early}(b|q)=\frac{exp(S_{retr}(b,q))}{\sum_{b^{'}\in TOP(c)}{exp(S_{retr}(b^{'},q))}}

L_{early}(q,a)= -log\sum_{b\in TOP(c),a\in TEXT(b)}{P_{early}(bq)}

其中, a 属于 TEXT(b) 表示答案字符串a a 是否出现在证据块 b 中。我们在实验中使用 c = 5000 。最终的损失函数为:

L(q,a) = L_{full}(q,a) + L_{early}(q,a)

如前面所述,除了证据块编码器中的参数外,我们对所有参数进行了微调。由于查询编码器是可训练的,因此模型可以学习检索任何证据块。

Hyperparameters

在BERT的所有使用中(包括检索器和读取器),我们都是由uncased base model初始化的,模型由12个transformer层组成,隐藏的大小为768。

如OQRA一节所述,问题和文本块检索表示,即 h_{q}h_{b},具有128个维。缩小维度的目的是以便最终的QA模型可以在一台普通机器上可以轻松运行。

使用BERT提供的默认优化器。在使用ICT对检索器进行预训练时,使用Google Cloud TPUs,学习速率为10e−4,批量大小为4096,步骤为100k。当进行fine-tuning时,在单台机器上12GB GPU,使用的学习速率为10e−5,批量大小为1。答案长度范围限制为10个token。

对较大的数据集执行了两个epoch的微调(Natural Questions, TriviaQA, 和 SQuAD),而对于较小的数据集(WebQuestions和CuratedTrec)执行20个epoch的微调。


以上就是我对该篇论文的理解,如果有不对的地方,请大家见谅并多多指教。如果喜欢的话,希望可以多多点赞关注(好久不写东西啦,写完一篇很开心,嘻嘻嘻~~~)。

下面是我之前分享过的,感兴趣的同学,可以看一看,点一点赞。

刘聪NLP:NEZHA(哪吒)论文阅读笔记

刘聪NLP:文本蕴含之孪生网络(Siamese Network)

刘聪NLP:论文阅读笔记:文本蕴含之ESIM

刘聪NLP:论文阅读笔记:文本蕴含之DIIN

刘聪NLP:论文阅读笔记:文本蕴含之BiMPM

编辑于 02-18

文章被以下专栏收录