1. Open-Domain Question Answering(ODQA)
开放域问答问题是自然语言处理领域的一项长期任务。具体来说,该任务给定一个文档集和一系列问题,模型需要在文档集中检索需要的内容,并根据检索的内容来回答这一系列问题。易见,该类任务在现实生活中有着非常重要而广泛的应用。这项任务在“零样本”设置中尤其具有挑战性,因为在“零样本”设置下,没有可用的数据来训练专门的检索-阅读模型。
该任务的模型大致分为Retriever和Reader两部分:Retriever从以万计的文档中,检索出每个问题所需的文档;Reader根据检索文档的内容,来回答问题。自深度学习盛行以后,人们开始尝试用神经网络进行文档检索。然而由于计算复杂度高,直接对规模巨大的文档集应用深度学习方法的时间开销巨大,所以很多模型会在Retriever和Reader之间添加Rerank结构。在这种三层结构模型中,Retriever会使用计算速度快但召回率低的方法,例如BM25,检索50到100篇文档;Rerank会对这些文档和问题拼接,喂给BERT等预训练模型,来进行打分,最终选取分数前10的文档,作为最终的检索文档送到Reader。
1.1 Retriever
常规模型使用稀疏检索方法:
Term Frequency-Inverse Document Frequency(TF-IDF)
TF-IDF评分的计算分为两个部分:
- Term Frequency (TF) - 词频:这是指某个词在文档中出现的次数。词频越高,说明该词在文档中的重要性越大。然而,仅仅使用词频并不总是最佳的选择,因为一些词(如“的”,“是”等)在文本中频繁出现,但它们对于文档的内容区分度不大。因此,TF通常会被归一化,例如除以文档中总词汇数,来减少常见词的影响。
- Inverse Document Frequency (IDF) - 逆文档频率:这是指在整个文档集合中包含特定词的文档数量的倒数,并通常取对数来平滑数据。IDF的值越大,说明含有这个词的文档越少,词的信息量越大,反之亦然。IDF的引入是为了减轻过于常见词汇的影响,使那些较少见但在特定文档中出现的词汇得到更高的权重。
- TF-IDF=TF*IDF 用于文本的特征抽取
Best Matching 25(BM25)
是一种用于信息检索中的评分函数,用于估计文档与查询之间的相关性。
它是一种改进版的TF-IDF(Term Frequency-Inverse Document Frequency)模型,主要在两个方面进行了优化:一是考虑了查询中各个词的重要性,二是考虑了文档长度对词频的影响。
预训练语言模型编码的表示向量的密集检索:
Dense Passage Retrieval(DPR)
通过Bert等预训练模型生成文档以及查询的密集向量表示,进而通过比较这些向量的相关性来查找与查询最相关的文档。这种方法能捕捉到语义上的相似性,而不仅仅是词汇上的匹配。此外,由于文档和查询都被转换成了稠密的向量表示,因此可以在大规模文档集合上高效地执行近似近邻搜索,从而加速检索过程。
- 文档编码:首先,使用预训练的语言模型来编码文档集合中的每一份文档。这个过程通常涉及将文档输入到模型中,模型输出一个固定长度的向量表示,这个向量包含了文档的关键信息。
- 查询编码:类似地,当用户提交一个查询时,查询也会通过相同的预训练模型来编码,产生一个向量表示。
- 相似度计算:接着,通过计算查询向量与所有文档向量之间的相似度得分来确定哪些文档与查询最为相关。常见的相似度度量方法包括点积(dot product)或余弦相似度(cosine similarity)。
- 检索结果排序:最后,根据相似度得分对所有文档进行排序,并返回得分最高的几个文档作为检索结果。
1.2 Reader
Extractive Reader
Extractive Reader主要用于从给定的文档中提取出包含答案的文字片段。BERT是由Google的研究人员在2019年提出的一种基于Transformer架构的预训练模型,它是Extractive Reader的一个典型代表。
在开放域问题回答(ODQA)任务中,BERT可以作为提取式阅读器来工作,其工作流程如下:
- 检索:首先,使用检索器从大量文档中选出与问题相关的文档或段落。
- 输入:将检索到的文档和问题一起输入到BERT模型中。
- 编码:BERT模型会对输入的文本进行编码,生成每个单词的嵌入向量表示。
- 输出:模型将根据输入的问题和文档内容,识别出文档中最有可能包含答案的文字片段,并将其作为答案输出。
Generative Reader
Generative Reader能够生成新的文本作为答案,而不只是从现有文档中提取片段。这种模型的一个典型例子是T5(Text-to-Text Transfer Transformer)是基于transformer的text2text架构,由Raffel等人在2020年提出。
在开放域问题回答(ODQA)任务中,T5作为生成式阅读器的作用如下:
- 输入:给定一个问题和一系列相关的文档或段落。
- 编码:T5模型将输入文本编码成一个内部表示。
- 解码:基于编码后的表示,模型生成一个连贯的文本作为答案。
生成式阅读器不仅限于从文档中摘取现有的句子作为答案,而是可以根据输入的信息创造新的句子或段落。这意味着T5可以综合多个来源的信息来构造一个完整的答案,这对于需要合成来自不同地方的信息来构造答案的任务尤其有用。
2. Zero-Shot ODQA
虽然Retriever-Reader模式效果很好,但其依赖大量的训练数据和庞大的外部知识语料库,因此很难将这些方法扩展到没有零样本的ODQA 领域
零样本ODQA的目标是在没有任何先验训练数据的情况下,让模型能够理解问题并给出合理的答案。这通常涉及到利用大型语言模型(LLMs)的内在知识和指令理解能力。例如,研究者已经探索了通过让LLMs生成思维链(chain-of-thought)或相关的背景信息来提高模型的回答质量。这种方法试图激发LLMs内部存储的知识,并利用这些知识来生成高质量的答案。(研究怎么更好的利用LLMs来生成更高质量的答案)
但现有的这些简单的提示方法(诱导LLMs生成解决问题的中间步骤或背景知识作为基础)在OQDA领域依然无法与经过定制微调的模型相比
3. Self-Prompting LLMs for Zero-Shot ODQA
本文主要研究zero-shot ODQA,提出自我提示LLM显式地激活LLM的不同能力,并组合这些能力以提高性能。
self-prompting分为preparation和inference两个阶段。
3.1 Preparation
分四步生成伪QA数据集:
1. Passage Generation:写一篇简短的维基百科风格的段落,摘录这个段落中的命名实体作为答案A;
具体步骤:
- 抽象和总结实体:首先对TriviaQA数据集(question-answer-evidence triples)中答案部分的实体进行抽象和总结,定义了一系列高层次的主题,如政治、体育、地理、电影、电视等。
- 细分主题:在每个高层次的主题下,进一步细分为几个子主题。例如,在体育这个高层次主题下,可以细分为运动员、运动队和体育赛事等。
- 设定数量:对于每个高层次主题,经验性地设定了需要100个示例,并将这个数量均匀分配给所有下属主题。随后手动调整这些数值,最终得到表9(附录B)中的数据。
- 生成段落:对于每个主题,大型语言模型(LLM)被要求列出一些示例,指示如“列举一些{主题}:”。重复这个步骤直到收集到一定数量的不同示例(子主题)。
- 生成维基风格段落:通过收集到的示例,利用提示“这是一篇关于{主题}的维基百科段落,{示例}:”来生成短小的维基百科风格的段落。需要注意的是,生成的文章不需要是维基百科页面的确切副本,只需是一段包含足够事实信息的维基风格的段落。
2. Named Entity Recognition:根据上一步生成的段落,通过LLMs生成段落中的命名-实体;
例:“Here is a passage: Albert Einstein was born in Ulm, Germany in 1879. Extract the named entities in it:” ---->“Albert Einstein”,“Ulm”,“Germany”
3. Question Generation:根据段落以及上一步生成的实体,通过LLMs产生问题Q;
“{passage}{entity}is the answer to the question:”
4. Explain the QA pair:基于之前产生的段落,用一个短句解释产生的每一个QA对,给一个QA对更细粒度的注释。
“Passage:{passage}Question:{question}Answer:{answer}You can refer to the passage and write a short explanation to this Question-Answer pair:”
3.2 Selection
采用了基于聚类的检索方法来平衡相似性和多样性。
- 向量化编码:首先,使用Sentence-BERT模型对整个伪问答对池中的每个问答对进行编码,得到每个问答对的向量表示。
- 聚类:假设我们需要选择kk个示例作为上下文演示(in-context demonstrations),则将所有伪问答对通过K-means算法聚类成kk个类别。这样每个类别就代表了具有某些相似特征的问答对群组。
- 检索:对于一个新的问题,我们同样使用Sentence-BERT对其进行编码,并计算该问题向量与每个类别中QA向量的余弦相似度。然后从每个类别中选择与新问题最相似的示例。这里使用的是简单的余弦相似度来衡量两个向量之间的相似性。
- 平衡相似性和多样性:通过上述方法,我们既能保证所选示例与新问题有一定的相似性,又能确保这些示例来自不同的类别,从而增加了多样性。这种方法有效地平衡了相似性和多样性,避免了只选择最相似的几个示例可能导致的单一性问题。
3.3 Inference
将所选的问答对,包括问题、答案以及解释性的句子,将会与待解决的问题一起按照问题->答案->解释的顺序组合起来,之后把测试的问题放到最后形成一个输入序列。这个输入序列被送入LLMs,LLMs则基于这些信息来生成最终的答案。这种方法不仅提供了具体的例子来帮助LLM理解问题,而且还提供了背景信息和解释,有助于模型更好地理解问题的上下文并作出回答。
思维链方法通常涉及在生成答案之前先生成一系列中间推理步骤或理由,特别适用于解决数学问题等复杂推理任务。然而,对于常识性问题,思维链的效果并不如人意。
self-prompt方法在ODQA任务表现优异,能够多方面有效地生成背景信息和支持材料来辅助答案的生成。
self-prompt方法强调的是生成结构化的信息,包括问题、答案以及解释,而思维链方法更关注逻辑推理过程本身。
通过这种方法为LLMs提供与问题最相关的上下文信息以及背景知识,帮助LLMs在没有额外训练的情况下,基于先前生成的伪数据集来生成高质量的答案。
self-prompt可以看作通过一系列步骤生成规则的QA数据集,通过引导LLMs产生更多信息,为question产生更多的相关背景知识以及解释这样的上下文信息,用于上下文学习,促进LLMs产生更加高质量的答案。
4. Contributions
- 提出Self-Prompting来利用Zero-Shot ODQA的LLM的多种能力。它可以预先自动构建一个伪但高质量的ODQA数据集,并选择显著的QA实例进行上下文学习。
- 提出了一种基于聚类的检索方法,以有效地利用所建立的伪问答数据集来为每个测试样本选择语义相似和不同的样本。
rompting来利用Zero-Shot ODQA的LLM的多种能力。它可以预先自动构建一个伪但高质量的ODQA数据集,并选择显著的QA实例进行上下文学习。 - 提出了一种基于聚类的检索方法,以有效地利用所建立的伪问答数据集来为每个测试样本选择语义相似和不同的样本。
- 进行了大量的实验来证明Self-Prompting在三个ODQA任务中的有效性。它实现了Zero-Shot ODQA的新SOTA,并可与一些微调的Retriever-Reader模型和Few-Shot提示方法相媲美。