一部问答系统发展史就是一部人工智能发展史。早在1950年的图灵测试就提出:如果人类无法通过问答将机器和人区分开,那么这个机器就可以被认为具有智能。问答系统和人工智能有着密不可分的关系。从基于规则和结构化数据的自动问答,到基于精细设计神经网络的文本问答,再到T5[1]将一切文本任务都转化为问答,我们足以看出自动问答系统在走向机器智能的过程中的重要性。
当前主流的问答系统主要分为几类:FAQ检索型、闲聊型、任务型、知识图谱型、阅读理解型等等。他们之间互相有些区别,但本质上都可以被看作是从庞大的信息中找到想要答案的过程,方法上互相之间也有一些借鉴意义。
陈丹琦的DrQA[2]可以说是利用深度学习解决开放域问答的开山鼻祖了。我们也暂且将目光聚焦在这类开放域问答任务:基于一个巨大的文本库(例如维基百科)建立自动回答知识型问题的系统。这样的系统通常分为两个部分:
今天,我们来看一篇开放域问答系统的最新SOTA。Facebook在这篇paper中提出:在开放域问答中,阅读理解模型的注意力权重可以提供更好的检索模型训练信号,该方法刷新了开放域问答系统的SOTA,同时在EffcientQA榜单上刷新了6GB量级模型的记录。
论文题目: DISTILLING KNOWLEDGE FROM READER TO RETRIEVER FOR QUESTION ANSWERING
论文链接: https://openreview.net/pdf?id=NTEz-6wysdb
Github: https://github.com/lucidrains/distilled-retriever-pytorch
Arxiv访问慢的小伙伴也可以在 【夕小瑶的卖萌屋】订阅号后台回复关键词 【0127】 下载论文PDF~
最开始,DrQA[2]将基于TF-IDF的词频算法用作检索模型,与当时的SOTA阅读模型结合,得到了开放域问答系统的雏形。基于词频的检索模型的一大优点就是简单有效:
但是基于词频的检索模型也有一些很明显的缺点:
为了解决这类检索模型的缺点,常见的问答系统先通过基于词频的检索模型初筛出较大量候选段落,再应用基于BERT的检索模型,将问题和段落拼接在一起进行精细排序。
然而,这类分阶段检索的模型仍然存在一些问题:它始终需要进过基于词频的检索,有信息损失;每次预测都需要将较大量的文本送入BERT进行精排。能否在一开始就用BERT这类效果更好的模型预先编码好所有段落,在检索的时候直接进行向量搜索呢?
陈丹琦组在EMNLP 2020提出了Dense Passage Retrievel(DPR)[3]的方法来解决上述缺陷。由于BERT这类模型太过庞大,在预测的时候无法实时对所有段落进行重编码,因而问题和段落需要分开编码。文中采用两个不同的BERT模型分别编码问题和段落,问题和段落编码向量相似度即为检索模型的打分。
DPR的一大创新点在于线下完成所有段落的编码。训练段落编码器时,将含有标准答案字串的候选段落作为编码器的正例,其他段落作为负例。训练完成后,即可在预测前对所有段落进行编码。预测时只需要编码问题,即可通过向量搜索得到相关段落。
然而,DPR在监督信息的获取上是存在一定问题的——这也是基于网络的检索模型训练的一大难点。DPR[3]是利用答案字符串是否出现在段落中的信号来定义编码器的正负例。这个信号中包含了大量的噪声:
比如对问题 “中国的首都是哪里?”而言,并非所有包含“北京”的段落都能用来回答这个问题。
比如对问题“图灵测试是谁提出的”而言,并非只有“阿兰·图灵”才是正确候选,由于音译,省略等,其他字符串同时也可能是答案。
那么,如何能获得更优质的检索模型训练信号呢?
专门为检索模型训练标注数据固然是一种获得更好训练数据的方法,但我们能否自动获取更优质的监督信号呢?Facebook AI的研究者们提出[4],利用蒸馏阅读模型中的注意力权重可以获得更好的相似度信息。
除了训练检索模型外,开放域问答的另外一个难点在于如何将检索模型和阅读模型的打分结合选出最终答案。阅读模型的打分往往只基于被送入阅读器的段落。想要获得不同段落之间的交互信息,必须将所有候选段落拼接输入阅读器。但由于BERT的复杂度随着序列长度平方级增长,拼接输入并不高效。
在Fusion-in-Decoder model[5]中作者采用生成式(Encoder-Decoder)模型作为阅读模型,他们将不同段落分别输入Encoder获得段落的的表示,然后将这些表示拼接在一起作为Decoder的输入。这样Encoder不需要用平方级的复杂度;Decoder在生成答案的时候也获得了所有段落的信息。
而本文也采用这种阅读模型。作者提出:在生成式阅读模型中,Encoder和Decoder的交互注意力权重可看作预测时不同段落信息的重要度。
作者通过一个简单的实验证明了这一论点:给定一个问题和100个已经由DPR选出的相关段落,筛选出最好的10个段落后再通过阅读理解模型,得到的端到端准确率下降越少说明筛选方法越好。基于前100个相关段落的问答系统准确率可以达到48.2EM;当我们直接选择前10个DPR筛选出的段落时,问答系统的准确率下降到了42.9 EM;但如果根据阅读模型的注意力权重筛选出前10的段落,准确率只下降到46.8 EM。
接下来,作者又进一步利用知识蒸馏的方法,让检索模型学习阅读模型的注意力信号。
我们利用知识蒸馏,让检索模型学习阅读模型的知识。将检索模型在不同段落上的预测概率与阅读模型的注意力权重之间的KL-divergence作为蒸馏训练的损失函数。那么如何将注意力权重转化为数值呢?
将矩阵转化为数值的最直观方法就是池化。公式中
表示Decoder第i个token对Encoder第j个token,在第k层第h个注意力头(head)的注意力权重,
表示的是阅读模型对这个问题,段落对的注意力权重打分,
表示检索模型对问题是
检索出段落
的打分,也就是检索模型的输出。这样,我们就可以让检索模型学习阅读模型的注意力信息了。
文中试验了不同的设置,最终确定:Decoder的第0个token对于Encoder同一段落中所有token的注意力权重平均值是最佳设定。
至此,我们已经确定了训练检索模型的损失函数。那么我们如何开始训练呢?训练采取迭代的方式进行:
从随机初始化的检索模型开始训练无疑是效率很低的,初始的候选段落便显得尤为重要。作者选取了不同的初始筛选方法(BM25,BERT,DPR)来确定第一步的相关段落集合。
实验发现从DPR方法选择的初始相关段落可以让模型达到最好的效果。由于BERT的预训练目标和相关度排序相差甚远,因而用预训练好的BERT作为检索模型的初始参数并选择最初的相关段落集效果不佳。但作者提出的训练方法可以在4个迭代内让检索模型大幅提升效果。
最终,如此构建的问答系统在NQ和TriviaQA数据集上都超越了之前的SOTA。这个方法在TriviaQA上达到了更好的效果,原因是NQ数据集中的段落是人工标注的并用作了DPR的训练,但TriviaQA没有提供段落相似度信息。这正说明了本文方法在没有相似度标注数据的设定下十分有效。
本文利用生成式阅读器中的注意力权重作为相似度信息训练检索模型,刷新了开放域问答系统的SOTA。该方法简单有效地解决了开放域问答系统中训练检索模型缺乏标注数据的问题,为研究者们提供了新思路。 [1]Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer.(https://arxiv.org/pdf/1910.10683) [2]Reading Wikipedia to Answer Open-Domain Questions.(https://arxiv.org/pdf/1704.00051) [3]Dense Passage Retrieval for Open-Domain Question Answering.(https://arxiv.org/pdf/2004.04906) [4]DISTILLING KNOWLEDGE FROM READER TO RETRIEVER FOR QUESTION ANSWERING.(https://openreview.net/pdf?id=NTEz-6wysdb) [5]Leveraging passage retrieval with generative models for open domain question answering.(https://arxiv.org/pdf/2007.01282)