生成式知识库问答是生成式模型结合外部知识库进行回答的一种算法。随着算力资源的发展,目前使用大语言模型(生成式模型)进行微调,并外挂知识库,在垂直领域问答取得了不错的效果。生成式知识库问答首先需要对用户的问题以及知识库中的信息进行嵌入表示,在知识库中匹配相关信息,然后将匹配得到的相关信息作为问题的上下文一起输入到模型中生成答案。按照执行过程,生成式知识库问答可以分为信息匹配前和信息匹配后两个阶段,如下图所示。
其中信息匹配前阶段涉及知识库优化、索引优化、原始问题优化、嵌入优化,信息匹配后阶段设计信息上下文优化、模型微调。下面将对这些优化研究按照下图的顺序进行分析、归纳和梳理。
信息匹配前
在生成式知识库问答中,从知识库中高效地匹配相关信息是至关重要的。其中在信息匹配前涉及到知识库优化、索引优化、原始问题优化、嵌入优化,下文将分别展开进行分析和梳理。
知识库优化
针对知识库优化而言,信息源和信息粒度是两个重要因素。信息源是指知识库信息的结构,信息粒度是指知识库信息的存储单元。
(一)信息结构
起初,文本是检索的主要来源,随着研究的深入,检索源扩展为包括半结构化数据和结构化数据。除了从原始的外部来源进行检索之外,在最近的研究中也有一个增长的趋势,即利用大语言模型自身生成内容进行匹配。
文本等非结构化数据是目前应用最广泛的信息源,它们主要是从语料库中获取的。对于问答任务,主要信息源是维基百科,包括HotpotQA 4以及DPR 5。除了维基百科的数据外,常见的非结构化数据还包括跨语言文本和特定领域的数据。
半结构化的数据,通常是指包含文字和表格信息组合的数据。处理半结构化数据在生成式知识库问答存在以下两个挑战:一、文本拆分过程可能错误的将表分开,导致信息匹配过程中数据损坏;二、将表合并到数据中会使语义相似性搜索复杂化。当处理半结构化数据时,Zha等人提出了TableGPT模型,TableGPT通过微调大语言模型来对齐表格信息和语义,使得模型可以理解表格信息的含义。Luo等人将表格转换为文本格式,以便使得模型更加容易理解半结构化数据。
结构化数据,如三元组,通常可以提供更精确的信息。Wang等人提出了一个大语言模型在知识库中的搜索模型KnowledGPT,该模型可以根据用户问题生成一个搜索指令,然后在知识库中执行搜索,最后判断搜索内容的有效性,增强了大语言模型的知识丰富性。为了增强文本图和知识图的推理能力,He等人提出了集成图神经网络的G-Retriever模型,该模型通过大语言模型提示增强了图的理解和问答能力,并采用奖励Steiner树优化问题进行有针对性的图检索。
模型生成内容。针对外部知识库信息的有限性,一些研究集中在使用大语言模型生成与问题相关的内容。Wang等人提出了一种自我知识引导的检索方法SKR(self-knowledge retrieval),该方法首先会引导InstructGPT等大语言模型识别其是否具有回答该问句的能力,若具有回答能力则由大语言模型直接返回答案,若不具有回答能力则引导模型在知识库中进行检索。Yu等人[55]提出了1种名为GENREAD的方法(generate-then-read)来补充缺失信息。该方法利用InstructGPT等大语言模型的生成能力并根据问句生成相关的文本,然后在知识库中检索与问句相关的信息,将生成的文本与知识库中检索的信息结合并生成最终答案,发现大语言模型生成的上下文通常包含更准确的答案。
(二)信息粒度
在优化知识库方面,除了信息结构外,另一个重要因素是信息粒度。粗粒度的信息单元理论上可以为问题提供更多的相关信息,但它们也可能包含冗余内容。另一方面,细粒度的信息单元粒度虽然缓解了信息冗余,并且不能保证语义完整性和充足的所需知识。选择在推理过程中选择合适的检索粒度是提高密集检索器的检索性能和下游任务性能的一种简单而有效的策略。Teja等人提出了一种文档分块策略,将文档拆分为固定数量的token块,较大的块可以捕获更多的上下文,但是也会带来更多的噪声,较小的块则可能无法表达完整的语义。Langchian中提出了一种文本拆分方法,使用递归拆分和滑动窗口方法的优化,通过合并多个检索过程中的全局相关信息来实现分层检索。然而,这些方法仍然无法在语义完整性和文本长度之间取得平衡。
索引优化
在索引阶段,文档将被处理、分割并转换为嵌入,以存储在向量数据库中。索引构建的质量决定了能否在匹配阶段获得问题正确的上下文。
为文档建立层次结构是增强信息匹配的一种有效方法。相关研究采用分层索引结构,文件以父子关系排列,以文本块为单位进行链接,有助于数据的快速遍历。还有部分研究提出用知识图进行索引,知识图中的三元组描绘了不同概念和实体之间的联系,显著降低了产生幻觉的可能性。另一个优点是将信息匹配过程转换成大语言模型可以理解的指令,从而增强了知识检索的准确性,并使大语言模型能够生成上下文相关的响应,从而提高了生成式知识库问答的整体效率。Wang等人提出了知识图提示方法KGP(knowledge graph prompting),该方法由图构建模块和图遍历模块组成。使用图构造模块在多个文档上创建知识图,其中节点表示段落或文档结构,关系表示段落或文档结构关系之间的语义/词汇相似性。使用一个基于大语言模型作为图遍历模块的代理,它可以在节点之间遍历,收集问题相关的上下文,为多文档的知识检索和推理提供了一种新颖的方法。
原始问题优化
生成式知识库问答主要挑战之一是它直接依赖于用户的原始查询作为检索的基础。用户提出一个精确而清晰的问题是很困难的,而模糊的问题会导致检索效率低下。大多情况下,问题本身很复杂,造成了用户语言组织的困难。另一个困难在于语言的复杂性和歧义性。语言模型在处理专业领域词汇或具有多种含义的模糊缩写时往往会遇到困难。例如,模型可能无法辨别“LLM”是指大语言模型还是法律硕士。针对这项挑战,现阶段的研究主要分为问题扩展和问题转换两类方法。
现有研究将复杂的单个问题扩展为多个子问题,丰富了原始问题的内容,提供更多的上下文,从而确保所生成答案的准确性。而正确将复杂的问题分解为多个相关的子问题成为问题扩展的关键一步,Zhou等人首先微调大语言模型,并设计问题分解的思维链模板,然后让模型依次回答每个子问题,根据每个子问题的答案组织原始问题的答案。然而,生成式模型给出的子问题并不一定完全准确,针对上述,Shehzaad等人提出了一种验证链的方法CoVE(Chain-of-Verification),使用大语言模型验证分解的问题,经验证后的回答通常表现出更高的可靠性。
部分用户所提出的原始问题可能语义并不完整,因此问题分解并不能有效提高回答准确率。针对上述,部分研究人员提出了问题改写机制,其核心概念是基于转换后的查询而不是用户的原始查询来匹配信息。Ma等人提出了一个重写-检索-读取框架,使用一个小语言模型来执行重写步骤,用最终大语言模型生成答案的奖励值来训练重写模块。在下游任务的评估中,该框架起到了扩充大语言模型知识的作用。还有部分方法利用提示工程,让大语言模型在原始查询的基础上重新生成一个查询,以便后续信息匹配。Gao等人提出了一种假设文档嵌入的方法HyDE(hypothetical document embedding),HyDE首先让大语言模型根据原始问题生成一个假设文档,并将文档编码成嵌入向量;然后基于该向量来匹配相似的真实文档;最后将生成的假设文档与真实语料进行比较,过滤掉不正确的细节。Zheng等人提出了一个step-back的方法,首先提示大语言模型基于原始问题生成一个更高层次的通用后退问题,后退问题和原始问题都被用于信息匹配。
嵌入优化
在生成式知识库问答中,信息匹配是通过计算问题和知识库文本嵌入之间的相似度(例如余弦相似度)来实现的,其中嵌入模型的语义表征能力起着关键作用。最近的研究介绍了一些突出的嵌入模型,如AngIE、Voyage、BGE等,这些模型都得益于多任务指令的微调。
在一些少部分研究中,研究人员采用混合检索来匹配信息,稀疏嵌入和密集嵌入方法捕获不同的相关性特征,并且可以通过利用互补的相关性信息而彼此受益。例如,可以使用稀疏索引模型为训练密集索引模型提供初始搜索结果。另外,预训练语言模型可用于增强稀疏索引。具体地说,稀疏索引模型可以增强稠密索引模型的0样本匹配能力,帮助稠密索引处理包含稀有实体的查询,从而提高健壮性。在上下文明显偏离预训练语料库的情况下,特别是在某些专业化的学科中,如医疗、法律和其他具有专业术语的领域,在垂直领域数据集上微调嵌入模型对于减轻这种差异至关重要。然而,训练一个适应多个领域的嵌入模型并不容易,因为捕获不同的语义关系往往会相互干扰。为了应对上述挑战,Dai等人提出一种PQGR(prompt-base query generation for retrieval)的方法,利用大语言模型作为少数查询生成器来创建特定于任务的匹配器,解决监督微调中专业领域的挑战,特别是在数据稀缺的领域。Zhang等人提出了一个LLM-Embedder的方法,该方法基于大语言模型在多个下游任务中的反馈奖励进行训练,信息匹配模块使用两种类型的监督信号进行微调:数据集的硬标签和大语言模型反馈的奖励作为软标签。这种双信号方法促进了更有效的微调过程,使嵌入模型适应不同的下游应用。Shi等人利用匹配模型和大语言模型来计算检索到文本的概率分布,然后通过计算KL散度来执行监督训练,该方法通过使用语言模型作为监督信号提升了匹配模型的性能。
信息匹配后
在得到与问题相关的信息后,如何利用这些信息使模型生成正确的答案是至关重要的。其中在信息匹配后涉及到文本上下文优化、大语言模型优化,下文将分别展开进行分析和梳理。
文本上下文优化
冗余信息会干扰大语言模型的生成结果,过长的上下文会导致LLM出现“中途丢失”问题。和人类一样,大语言模型倾向于只关注长文本的开头和结尾,而忽略中间部分。因此,在生成式知识库问答中,我们通常需要进一步处理检索到的内容,现有的研究方法可以分为文档重排序和文档上下文压缩两种方式:
在文档重排序方面,Zhuang等人使用大语言模型作为查询似然模型,对检索得到的文档进行重排序,挑选出排名靠前的文档。Ma等人提出了一种过滤-重排序的模式,该模式充分结合了小语言模型的推理速度和大语言模型的推理精度;使用小语言模型充当过滤器,对检索后的信息进行过滤,再使用大语言模型对过滤后的样本进行重排序,最终选取top-k的文档。Hu等人按照文档中的段落进行细粒度拆分,丢弃掉不相关的段落,按照与问题的余弦语句选择top-k个段落,根据这些段落在文档中的位置进行排序。
在文档上下文压缩方面,Xu等人提出了一种抽取式压缩器,使用双编码器对问题和文档的语句进行编码,通过计算二者之间的相似度,选择相关的语句。Jiang等人使用小语言模型来判别和过滤检索文档中不重要的信息,将其转换为人类难以理解但大语言模型能够理解的形式。Yang等人提出了一种两阶段的训练方式来压缩检索文档,首先使用预训练模型通过有监督的训练方式,最小化压缩文档的输出与真实的上下文之间的差异;然后采用强化学习的方法,根据最终回答的奖励值来调整上一阶段模型参数。
以上方法虽然使得RALLM在知识密集型任务中取得了不错的成果,但是其作用仅仅可以缩短检索文本的长度,无法保证检索内容的全面性与多样性。
模型微调优化
在垂直领域中,对模型进行有针对性的微调可以使得生成式知识库问答产生取得更好的结果。当大语言模型缺少特定域中的数据时,可以通过微调向大语言模型提供附加的知识;微调的另一个好处是能够调整模型的输入和输出。例如,它可以使大语言模型适应特定的数据格式,并按照指示生成特定样式的响应。
Lin等人引入检索增强双指令调优方法RA-DIT,该方法可以有效地改进预训练的大语言模型,使之具有信息匹配能力。RA-DIT利用检索增强指令调优来更新大语言模型,以更好地利用匹配到的知识并忽略无关或分散注意力的信息。它还在大语言模型的监督下对信息匹配模块进行微调,以帮助大语言模型生成正确答案。Shi等人提出了一个检索器-生成器架构,利用检索器匹配相关的知识,利用生成器生成问题的响应。由于检索器缺乏训练标签,使用生成器的反馈作为伪标签,用来微调检索器。