引言
开放式对话问答可以被视为两种任务:段落检索和对话问答,前者依赖于从大型语料库中选择候选段落,后者需要更好地理解问题的上下文来给出答案。针对开放式问答,本文提出ConvADR-QA框架方法,即利用历史答案提高检索性能,从而提升问答效果。在基准数据集OR-QuAC上的实验结果表明,在检索和问答生成阶段下都优于现有的基线模型。
背景介绍
对话信息检索和对话问答(CQA)是对话系统的基本任务。会话agent有望成为满足用户信息需求的接口,即通过多回合的自然语言交互为用户提供信息答案。正是因为CQA的多回合特性,也使其具有挑战性,因为需要它对上下文进行检索并解决指代和歧义问题。随着语言理解和对话建模方面的发展以及大规模数据集的整理,例如QuAC和CoQA,同时也看到了CQA研究的实质性进展。
虽然最先进的(SOTA)模型在QA和CQA数据集上实现了与人类相当甚至更好的效果,但这种对比存在局限性,因为它需要提供包含答案的源文档,而在现实应用场景中是不太可能出现这种情况的。为了解决这一问题,研究人员将CQA方案扩展到开放域,其中包含答案信息的文档必须从一个大型候选池中检索。在开放域场景中,通常有数百万个候选文档,使得传统的联合编码查询和文档的方法不可用。应对这一挑战的主要技术是密集检索,它将查询和文档分别编码为密集表示,并执行最近邻搜索,这是高效的,可扩展到数百万个文档。在多个QA基准测试中,它已被证明优于传统的稀疏检索方法。
然而,对对话进行密集检索可能需要考虑对话的上下文和结构,这是一个不容忽视的问题。为此,Qu等人提出ORConvQA将之前的问题纳入同一对话,因为问题上下文信息是非常有用的。Yu等人提出ConvDR通过使用特定教师模型对重新表述的问题进行知识蒸馏,进一步提高了检索性能。然而,简单地把历史问题串在一起是不理想的。本文采用的方式是:不是依靠模型从历史问题中推断有用的知识,而是在输入中添加历史答案知识,因为此本文提出ConvADR-QA(Conversational Answeraware Dense Retrieval),利用历史答案,为开放域CQA提供更好的检索和回答效果。
ConvADR-QA框架方法
开放域CQA的难点在于当前问题通常需要之前对话的上下文信息,这使得系统比开放域QA任务更难捕获潜在的信息。「之前关于开放域对话检索的工作着重将当前问题和历史问题连在一起而并没有将问题答案考虑进来」。本文则指出,历史答案也可以为当前问题提供重要的信息输入来获得答案。如下图所示:
为了更好地利用开放域CQA的历史答案,本文提出了如下图所示的ConvADR-QA,其中包括一个用于从大量集合中获取相关段落的检索器和一个用于CQA的阅读器。
检索方法
「本文应用了一种密集检索方法」,该方法比稀疏检索方法表现出了优势。具体来说,该模型使用双编码器体系结构将段落和问题映射到相同的嵌入空间。本文问题编码器的输入是历史问题和答案的串联:
然后将检索得分定义为文章嵌入和问题嵌入的点积:
最后使用负对数似然损失对ConvADR-QA进行优化:
知识蒸馏(KD)
其中多任务学习的检索损失是NLL损失和KD损失的总和:
阅读器Reader
通过将检索器得分
和开始/结束标记得分的和相乘作为Reader得分
来选择最终答案:
实验结果
如下表所示,本文提出的ConvADR-QA在检索和回答阶段都优于几乎所有现有的基线模型,实现了开放域CQA新的SOTA性能。
论文&&源码
Paper:https://arxiv.org/pdf/2211.09401v1.pdf
Code:https://github.com/miulab/convadr-qa