
搜索增强生成系统(RGA)案例研究的经验教训和失败教训
三个要点
✔️ 介绍搜索增强生成系统三个案例研究的经验教训和七个失败案例
✔️ 为从业人员提供参考资料,并提出搜索增强生成系统的研究路线图
✔️ 通过分享 案例研究为软件工程社区做出贡献
Seven Failure Points When Engineering a Retrieval Augmented Generation System
written by Scott Barnett, Stefanus Kurniawan, Srikanth Thudumu, Zach Brannelly, Mohamed Abdelrazek
(Submitted on 11 Jan 2024)
Comments: Published on arxiv.
Subjects: Software Engineering (cs.SE); Artificial Intelligence (cs.AI)
code:![]()
本文所使用的图片要么来自论文、介绍性幻灯片,要么是参考这些图片制作的。
概述
搜索增强生成(RAG)越来越多地被用于在应用程序中实现语义搜索。搜索增强生成系统的工作原理是找到与用户查询相匹配的文档,并将其传递给大规模语言模型(LLM),如 ChatGPT,以生成正确的答案。这种方法可以减少来自大规模语言模型的错误信息(幻觉、错觉),将来源与答案联系起来,并节省为文档附加元数据的时间。
然而,搜索增强生成系统也存在信息检索系统固有的局限性及其对大规模语言模型的依赖性。本文通过对研究、教育和生物医学三个不同领域的案例研究,报告了搜索增强生成系统的失败。作者分享了从他们的研究中汲取的经验教训,并提出了设计搜索增强生成系统时需要考虑的七个要点。
本文的一个重要观点是,搜索增强生成系统只能通过实际操作来验证,其鲁棒性不是一开始就设计好的,而是不断发展的。本文还为软件工程界提供了搜索增强生成系统的未来研究方向。
大规模语言模型的进步使软件工程师能够构建新的人机交互解决方案、完成复杂任务、总结文档、回答问题并生成新内容。然而,仅使用大规模语言模型来涵盖企业中的最新信息和专业知识是有局限性的。解决这一问题有两种选择:微调大规模语言模型或使用搜索增强生成系统。微调需要使用特定领域的数据重新训练大型语言模型,这可能难以管理。而搜索增强生成系统则利用现有知识生成答案,从而减少了管理工作量。
搜索增强生成系统将信息检索和生成结合起来,为用户查询提供与上下文相关的、准确的最新信息。这样就无需构建知识图谱和整理数据,从而缩短了开发时间。
软件工程师在构建搜索增强生成系统时,需要对领域知识进行适当的预处理,将其存储在适当的数据存储区中,实施查询和人工制品的匹配策略,并调用大规模语言模型的 API 来传递用户查询和上下文文档。该系统将构建新的搜索增强生成系统的方法在不断发展,但有必要确定这些方法如何适用于具体应用。
本文介绍了三个案例研究中的经验教训和七个失败案例。它为实践者提供了参考,并提出了搜索增强生成系统的研究路线图。本文还认为,软件工程界有责任提供如何利用大规模语言模型实现稳健系统的知识,并希望这项研究能成为构建搜索增强生成系统时实现稳健性的重要一步。我们希望这项研究能成为构建搜索增强生成系统的重要一步。
搜索增强生成(RAG)概述
随着 ChatGPT、Claude 和 Bard 等大规模语言模型的迅速普及,将它们用作问题解答系统的案例研究屡见不鲜。虽然这些模型显示出非常高的性能,但也存在重大挑战:一个挑战是幻觉,即大规模语言模型产生看似正确但不正确的答案。另一个挑战是无法控制或更新输出内容(除非通过提示工程)。搜索增强生成系统是一种旨在克服这些挑战的方法。
首先是索引编制过程。搜索增强生成系统会将自然语言查询转换成数字向量(嵌入),然后用于对文档进行语义搜索。文档被分成较小的块,每个块都被转换成一个嵌入,并被索引到数据库中。在这一过程中,软件工程师需要适当调整块的大小。如果分块太小,就无法回答某些问题;如果分块太大,就可能混入噪音。
不同类型的文件需要不同的分块和处理。例如,视频内容需要转录,将音频转换为文本。所使用的嵌入模型的选择也很重要,这可能需要对所有分块进行重新索引。嵌入的选择基于其语义检索正确响应的能力。
下一步是查询过程。这是在执行搜索过程中进行的。首先将自然语言问题转换为一般查询,然后计算嵌入值,以便在数据库中搜索相关文档。使用余弦相似度等技术搜索前 k 个相似文档。这样可以确保与查询语义相近的文档块更有可能包含答案。
再次对检索到的文档进行排序和调整,以便将包含答案的语块放在最前面。在下一阶段,将考虑到大型语言模型的标记和速率限制,对语块进行处理。例如,OpenAI 服务对提示中可包含的文本数量有限制,而且系统的延迟也受到限制。
在搜索增强生成系统结束时,会从生成的文本中提取答案。阅读器(Reader)会去除提示中的噪音,并根据格式化说明生成查询输出。实施搜索增强生成系统需要定制多个提示来处理问题和答案。
使用大规模语言模型实时回答文档中的问题有可能开辟新的应用领域。然而,搜索增强生成系统难以测试,数据也不存在,因此系统需要通过合成数据生成和最低限度的测试进行试验。
案例研究
本研究审查了三个案例研究,以确定在实施增强型搜索生成系统时所面临的挑战。每个案例研究的摘要见下表。
第一个案例研究是 Cognitive Reviewer。这是一个搜索增强生成系统,旨在协助分析科学文献。研究人员指定一个问题或目标,并上传相关研究论文。系统会根据指定目标对文件进行排序,并允许研究人员手动审阅。迪肯大学的博士生使用 Cognitive Reviewer 协助进行文献综述。该系统依靠强大的数据处理管道来处理上传的文档,并在运行时编制索引。它还使用排序算法对文档进行排序。
第二个案例研究是人工智能导师。这是一个搜索增强生成系统,允许学生就某一单元提出问题,并从学习内容中获得答案。AI Tutor 集成到迪肯大学的学习管理系统中,并为所有内容(包括 PDF 文档、视频和文本文档)编制索引。视频使用深度学习模型 Whisper 进行转录和分块;AI Tutor 于 2023 年 8 月至 11 月间开发完成,并于 2023 年 10 月底在一个有 200 名学生的单元中进行了试点测试。该管道包括一个 "重写器"(Rewriter),它可以概括查询并实现一个聊天界面,从用户与人工智能导师之前的互动中读取上下文。重写器重写查询,将上下文考虑在内,并解决模棱两可的请求。
第三个案例研究是生物医学问答。上述案例研究侧重于内容较少的文档,而增强型搜索生成系统则是利用 BioASQ 数据集来探索更大规模的问题。该数据集包含问题、文档链接和答案。问题的答案可以是 "是"/"否"、文本摘要、事实或列表;从 BioASQ 数据集中下载了 4,017 份开放存取文档,共有 1000 个问题。所有文件都已编入索引,问题已提交给搜索增强生成系统。
生成的问题通过 OpenAI 实施的 OpenEvals 技术进行评估,OpenAI 人工检查了 40 个问题以及所有被 OpenEvals 标记为错误的问题。在这一领域,自动评估被认为比人类评分者更悲观。然而,由于 BioASQ 是一个特定领域的数据集,而评审者并非专家,因此这一发现存在有效性威胁。换句话说,他们认为大规模语言模型可能比非专家拥有更多的知识。
搜索增强生成系统的失败实例。
本文从上述三个案例研究中找出了搜索增强生成系统的以下七个故障。这些都是开发搜索增强生成系统时出现的主要问题。
首先是缺乏内容(FP1)。当系统收到一个它无法从现有文件中回答的问题时,就会出现这种情况。在理想情况下,最好是拒绝回答,如 "对不起,我不知道",但这样可能会对相关问题产生错误的答案。
第二种情况是缺少排名较高的文档(FP2)。这是指答案存在于文档中,但由于排名不够靠前,所以没有返回给用户。理论上,所有文档都会被排序,但实际上只有根据性能选出的前 K 个文档才会被返回。
第三种是未包含在上下文中(FP3)。这是指已检索到包含回复的文档,但该文档未包含在生成回复的上下文中。这是因为在返回大量文件时,集成流程没有正确捕获答案。
第四种是未提取(FP4)。这是指上下文中存在答案,但大规模语言模型未能提取出正确答案。当上下文中存在过多噪音或矛盾信息时,就会出现这种情况。
第五种是格式错误 (FP5)。这是指问题要求以特定格式(如表格或列表)提取信息,但大规模语言模型却忽略了这些指示。
第六种是缺乏针对性(FP6)。这是指返回的答案缺乏或过于具体,无法满足用户的需求。这种情况尤其发生在本应包含教育内容的问题却只返回了简单的答案,或者用户不确定如何提问而问题又过于笼统的情况下。
最后一项,即第七项,是不完整回答(FP7)。不完整回答不是错误,而是缺少一些可提取的信息。例如,"文件 A、B 和 C 涵盖了哪些要点?这个问题最好单独提出。
上述故障是设计和实施搜索增强生成系统时需要注意的要点。
经验教训和未来研究方向
本文借鉴了三项案例研究的经验教训,总结了工程搜索增强生成系统的注意事项和未来的研究问题。
首先是分块和嵌入。给文档分块看似简单,但其质量对搜索过程有重大影响。特别是,分块嵌入会影响相似性和与用户查询的匹配。分块有两种方法:一种是基于启发式的分块,即使用标点符号、段落结尾等;另一种是基于语义的分块,即根据文本的含义开始和结束。需要开展研究,探索这些方法之间的权衡及其对嵌入和相似性匹配等关键流程的影响。以查询相关性和搜索准确性为指标的评估框架将有助于这一领域的研究。
嵌入是一个活跃的研究领域,涉及多媒体和多模态块(如表格、数字和数学表达式)的生成。块嵌入通常在系统开发过程中或新文档编制索引时生成一次。查询预处理对搜索增强生成系统的性能有重大影响,特别是对于负面或模糊查询。报告称,有必要进一步研究解决嵌入固有局限性的架构模式和方法。
其次是微调。大规模语言模型是基于大量训练数据的优秀模型,但它们也会受到发布前进行的微调任务的影响。然而,这些模型是用于一般用途的,可能并不了解特定领域的细节。它们也有知识的截止日期。微调和搜索增强生成是两种定制方法,各有不同的权衡。
微调需要整理内部数据集和训练大规模语言模型,但由于数据已嵌入模型,因此存在安全和隐私问题。随着基础模型的发展和新数据的加入,还需要再次进行微调。另一方面,搜索增强生成系统提供了一种实用的解决方案,它可以根据需要对数据进行分块,并仅使用上下文中的相关分块从大规模语言模型中生成答案。这样,用户就可以利用新文档不断更新自己的知识,并控制自己可以访问哪些数据块。然而,块嵌入、检索和上下文融合的最佳策略仍然是一个活跃的研究领域。需要开展研究,就准确性、延迟、运行成本和稳健性等因素对微调和搜索增强生成范例进行系统比较。
第三个问题涉及搜索增强生成系统的测试和监测。搜索增强生成系统的软件工程最佳实践仍在发展之中。软件测试和测试用例生成被认为是一个有待改进的领域。搜索增强生成系统需要针对特定应用的问题和索引非结构化文档的答案,而这些问题和答案往往是不可用的。最近的研究探索了使用大规模语言模型从多个文档中生成问题的方法。如何生成切合实际的领域相关问题和答案仍是一个有待解决的问题。
一旦有了足够的测试数据,还需要质量指标来支持质量权衡。大规模语言模型的使用成本高昂,会引起延迟问题,而且性能特征会随着每个新版本的发布而改变。以前曾在机器学习系统中对这一特性进行过研究,但尚未对应用于基于大规模语言模型的系统(如搜索增强生成)进行必要的调整。另一个想法是结合自适应系统的概念来监控和调整搜索增强生成系统。
摘要
搜索增强生成系统是一种利用大规模语言模型进行信息检索的新方法。通过实施语义搜索和新的代码依赖任务,软件工程师越来越多地接触到搜索增强生成系统。
本文介绍了从涉及 15 000 份文件和 1 000 个问题的三个案例研究中汲取的经验教训。它还介绍了实施搜索增强生成系统所面临的挑战,并为从业人员提供了指导。
预计利用大规模语言模型的系统将继续报告工程师和研究人员感兴趣的一系列新功能。本文首次从软件工程的角度对搜索增强生成系统进行了调查。
与本文相关的类别