微信扫码
与创始人交个朋友
我要投稿
大型语言模型(LLMs)生成准确响应的有效性在很大程度上取决于提供的输入质量,特别是在采用检索增强生成(RAG)技术时。RAG通过获取最相关的文本片段来增强LLMs,以此为查询提供基础。尽管近年来LLMs在响应质量方面取得了显著进展,用户仍可能遇到不准确或无关的答案;这些问题通常源于RAG对文本片段的检索不佳,而非LLMs固有的能力。为了增强LLMs的效力,关键在于完善RAG过程。本文探讨了RAG流程的现有限制,并介绍了增强文本检索的方法。它深入探讨了诸如复杂的分块技术、查询扩展、元数据注释的整合、重新排序算法的应用以及嵌入算法的微调等策略。实施这些方法可以显著提高检索质量,从而提升LLMs在处理和回答查询时的整体性能和可靠性。
近年来,大型语言模型(LLMs)的出现代表了生成式人工智能的一个关键转折点,以及其加速各个领域生产力的能力。然而,尽管这些模型的能力令人印象深刻,但在许多方面存在限制,这些限制阻碍了某些行业充分利用这项技术潜力的能力。一个关键劣势是LLMs倾向于产生幻觉信息,以及它们在特定领域知识方面的不足。LLMs的知识受其训练数据的限制,如果不使用额外技术,这些模型在非常特定领域任务的性能非常差。
为了开发大型语言模型,第一步是预训练过程,其中一个变压器在一个非常大的文本数据语料库上进行训练。这些数据非常一般化,不特定于某个领域或领域,也不随时间变化。这就是为什么像ChatGPT这样的LLMs可能在一般查询上表现良好,但在更具体和高级主题的问题上失败的原因。此外,模型关于某一主题的性能高度依赖于该信息在训练数据中出现的频率,这意味着LLMs在不经常出现的信息方面表现困难。这适用于大多数领域特定信息,如金融信息和专业知识,这就是为什么标准LLMs在领域特定问题上表现不佳的原因。
知识注入的概念指的是使模型能够访问超出其原始训练数据的信息,并且这是我们可以改进大型语言模型在特定领域任务上性能的主要方式。知识注入的两种主要技术是模型的额外训练或微调,或者在上下文学习中,其中最流行的版本是检索增强生成(RAG)。
微调是更新模型参数以适用于特定任务和领域的过程。通过微调,可以进一步训练LLM在特定领域数据集上,使其能够访问原始训练数据中不存在的额外信息。微调还使我们能够通过指导微调训练模型以获得一致的输出。微调的三种主要方法是无监督微调、监督微调和强化学习。在我们先前的工作中,我们研究了使用监督微调来改进金融特定问题上的几种不同模型的方法。特别是指导微调非常适合根据具有输入和输出对的标记数据来定制模型的表现方式。然而,这种方法的一个主要瓶颈是需要高质量数据才能进行有效的监督微调。对于问答任务,这些数据集通常由人类专家策划,通常借助其他LLMs来获得准确和全面的问答对。
在无监督微调中,数据是无标签的,可以看作是预训练过程的延伸,但是使用特定领域的文档和文本,而不是一般文档。然而,模型不会从这些数据中获得任何额外的指令或标签。希望模型能保留这些额外训练数据中的信息,并能够在进行非常领域特定的问答时访问该知识。虽然与监督微调相比,这种微调方法可能更具可扩展性,因为数据是可用的,但微调模型的结果可能不够稳健。此外,虽然使用了特定领域数据,但不能保证LLM在需要时能够访问它,特别是如果与用于预训练的文本语料库相比,特定领域数据的规模较小。
检索增强生成是一种上下文学习方法,允许大型语言模型访问新的知识源并回答问题。上下文学习是一种通过将输入查询与额外知识链接来改进预训练LLMs的方法。它不涉及像微调那样更新任何模型权重,而是改变查询以包含模型可以参考的额外信息。这样做的好处是,因为知识直接被提供,LLM可以直接参考,不必担心这些知识会像通过无监督微调那样在训练数据中丢失。然而,由于大型语言模型的有限上下文窗口,可以链接到查询的信息有限,通常比我们想要增强模型的总知识量要短得多。
因此,检索增强生成(RAG)的检索方面就显得尤为重要,以决定为问答任务将哪个文本块添加到输入查询中。我们探讨了基于文档的问答的使用情况,特别是针对金融文件和查询。假设有几份报告,如10-K或收益转录,希望与其进行交流或提问。对于这种情况,我们需要以某种方式有效地将这些金融文件的知识注入到大型语言模型中。为了防止幻觉,最理想的是采用某种上下文学习方法,通过提示指定模型只参考与问题一起给定的额外上下文。在这里添加某种示例提示模板
由于我们希望与之交流的文件的规模和复杂性,不可能简单地将整个文本作为每个问题的上下文添加。相反,必须开发某种检索算法来选择文档中包含与回答用户查询最相关的上下文的特定文本块。将该特定文本块作为额外输入提供给LLM,然后模型根据问题和相关上下文生成响应。
下面是传统RAG流程运作方式的图表。首先,用户向模型提出问题,例如针对基于金融的问答,他们可能会问这里是金融问题的示例。然后,将此问题转换为文本的嵌入或数值表示。为了找到相关上下文,我们通过查询嵌入和知识中心中包含的嵌入之间的相似性搜索(例如余弦相似性)。知识中心是由我们想要交流的文档集合创建的。在某种方式处理了非结构化文档后,将文档分成块,每个块转换为向量形式的嵌入。所有这些嵌入都存储在某种数据库中,可以是本地的或云端的,它们构成了知识中心。算法从该中心中检索相关的文本块,将最符合用户查询的文本块链接到查询中,并作为上下文提供给LLM。
传统的RAG架构面临许多限制,影响其在知识密集和领域特定自然语言处理任务中的有效性。大多数RAG流程将文档均匀分成块,而不考虑文档的结构和内容。每个块由相同数量的单词或标记组成,可能在块之间存在一些重叠以提供上下文。检索器通常会返回最相似的前k个块,每个块的大小大致相同。然而,这种方法根本不考虑文档的性质,可能导致在某些情况下出现重要的疏漏和信息丢失。例如,如果问题的答案跨越了几个不一定是语义上最相似的块,传统的RAG流程将不会返回最理想的块。
通过余弦相似性进行语义搜索,这是RAG的核心组件,也存在一些挑战,比如检索无关或相反的信息,表明模型对语言细微差异的敏感性以及可能出现意想不到的结果。最相似的块未必是最相关的块,然而许多RAG流程都假设是这样。此外,大多数情况下,标准的嵌入算法没有任何领域特定知识,因此它们忽视了特定领域中某些词语或短语的细微差异。 基本的分块策略和相似性搜索在处理单一长文本(如书籍或文章)作为知识库时可能会取得良好的效果。然而,在大多数情况下,我们更感兴趣的是能够与多种不同类型的文档进行交流,这些文档往往具有更复杂的结构,如标题和表格。当所有分块被平等对待并放入单一向量数据库时,关键信息就会丢失。例如,文档集可能是各种不同公司或数年间的财务报告。每个文本块,根据其在文档中的位置,可能不包含关于所涉及公司或与某些指标相关的年份等信息。这可能导致提供的信息存在潜在的不正确和过时,因为相似性搜索可能返回过时或无关紧要的文本块,因为它忽略了关于文本和文档的附加数据。
传统的检索算法缺乏高级问题回答所需的微妙和推理能力。由于通常只是基于原始问题的相似性搜索,算法不会像人类那样经过相同的逻辑步骤来找到相关部分。例如,如果您要求财务分析师计算指标 x,他们将经过多步推理过程,了解如何计算指标以及知道文档中包含这些信息的位置。这些复杂性并不能始终通过问题的相似性搜索来捕捉。查询本身可能没有所有所需的信息来指示模型最相关的块在哪里,而是需要额外的信息和逻辑步骤。
考虑到当前和标准 RAG 管道的各种限制,显然需要开发和实施不同的策略来解决这些问题。在本节中,我们将探讨一系列不同的技术,旨在优化 RAG 在回答问题和与各种财务文档交流的用例中的性能。
分块方法是检索过程中的关键因素,因为它决定了算法将返回的上下文的性质。无效的分块策略可能导致块中的上下文不完整,或者在另一个极端,包含了太多无关和不需要的信息。当选择固定的块大小时,大多数 RAG 管道会面临包含过多或过少信息以回答每个查询的风险。理想的方法将取决于知识库中文档的性质,以及模型期望的查询长度以及回答这些查询所需的上下文量。
递归分块是一个更具适应性的分块策略的示例,它使用其他指标和规则(如标点符号)使分块更具动态性。虽然块仍然具有相对相等的大小,但附加参数将确保块不会在句子中间被切断,例如。通过使用 Python 库(如 Spacy 和 NLTK),我们可以使用更复杂的句子拆分技术,利用自然语言处理技术更加了解文档的上下文。
在财务报告中,这些文档通常非常长,并且包含更复杂的结构,如表格。同一性质的文档,如 10-K,通常遵循特定格式,可以通过文档的标题和副标题来指示。由于这些财务报告的特殊性质,考虑到这些事实的基于元素的分块版本可能有助于进一步改进检索。在本文中,我们将遵循 Unstructured 论文中使用的策略 - 如果找到标题元素,则启动一个新的块,如果找到表元素,则启动一个新的块,保留整个表。这样的策略将有助于确保每个上下文返回足够的上下文以有效回答用户的问题。
查询扩展,或查询转换,指的是改变输入到 RAG 管道的问题以基于用户原始问题找到相关块的想法。其背后的理念是,用户的问题往往可能并未明确包含所有信息,以指示算法在文档中应该查找上下文的位置,尤其是通过余弦相似性搜索。有时,用户的问题本身可能会误导算法查找不正确的区域,因此返回一个无关紧要的块。对于更复杂的问题和文档,需要更多的推理步骤才能知道在哪里查找,而基本的 RAG 管道完全缺乏这一点。
一种模拟人类分析师可能进行的逻辑的技术是利用假设文档嵌入(HyDE)。通过 HyDE,与仅使用用户原始查询进行相似性搜索不同,它使用 LLM 生成一个理论文档来响应查询,然后同时使用原始问题和假设答案进行相似性搜索。这种技术已被证明优于标准检索器,并消除了对自定义嵌入算法的需求,但有时可能会导致不正确的结果,因为它依赖于另一个 LLM 来提供额外的上下文。
在与多个不同文档交互时,元数据中可能存在关键数据点,标准检索算法完全忽略这些数据点。在尝试与多个文档交流时我们曾面临的问题是,原始的 RAG 管道会混淆不同文档的块,为了克服这一问题,为每个文档创建了单独的向量数据库。然而,对于大规模应用来说,这并不实际,而且如果用户想要在文档之间切换或同时与多个文档交流。元数据注释是一种克服这一障碍并进一步增强检索的方法。
应考虑元数据注释的性质与使用的分块策略。例如,由于我们将根据元素对文档进行分块,因此可以在注释中包含有关每个元素的详细信息。例如,如果在单独的块中创建了一个表格,元数据可以包含该表格的类型(例如,损益表,现金流量表等)。此外,通常会向元数据注释中添加摘要和代表性关键字以提供额外的上下文。
使用标准 RAG 管道,可以指定算法应返回的文档或块的数量,以及应将多少块作为上下文提供给输入查询。通常,前 1 或 2 个块被包括为上下文,这些是基于余弦相似性或 k 最近邻搜索给出的最佳结果。然而,这样的算法将给出最相似的块,这可能不对应于最相关的上下文块。
重新排序算法是一种优先考虑块的相关性而不是相似性的方法。基本上,像余弦相似性这样的方法可能会对前 10 个块进行排名,但另一个独立的算法将重新排列算法以基于相关性进行排名,然后在重新排序后的前一两个块将作为上下文提供给输入查询。Cohere 的重新排序算法是一种流行的算法,它以及其他算法使用额外的机器学习和自然语言处理技术来进一步评估相关性,超越了相似性搜索。
嵌入算法是将文本转换为数值表示的算法,在 RAG 管道中起着至关重要的作用。可以根据特定领域的知识对嵌入算法进行微调,以增强该特定领域的检索。嵌入还可以是动态的,即当单词根据上下文具有略有不同含义时,它们会进行调整。OpenAI 的嵌入是根据上下文变化的动态嵌入的一个例子。然而,领域特定的微调需要访问包含查询、文本语料库和有关该特定领域的相关文档的数据集。
在评估 RAG 系统时,主要组成部分是评估模型检索上下文的能力以及根据上下文回答问题的能力。在数据集中,我们可以访问由人类财务分析师开发的地面真实上下文和答案。对模型的响应进行分析,以确定其与这些地面真实答案的一致性被称为结构化评估,而在没有这些地面真实答案的情况下进行评估则被称为非结构化评估。结构化评估更能指示模型的准确性,然而,非结构化评估可以告诉我们关于块和答案质量的信息,并且在大多数情况下,我们无法访问地面真实数据时是必需的。
使用结构化数据测试检索质量的主要方法是通过页面级和段落级准确性。由于在数据中,我们可以访问整个文档以及人类分析师所参考的部分,我们将该部分与检索算法返回的块进行比较。如果参考上下文和算法上下文在同一页上,那么它将具有较高的检索准确性,段萂级准确性也是类似的思路。 对于非结构化数据,我们可以使用 RAGAS 框架定义的上下文相关性来评估检索到的块。对于这个度量标准,LLM 被要求计算与回答问题相关的上下文句子的数量。提取的句子数量与上下文中总句子数量的比率被定义为上下文相关性得分。该得分惩罚冗余信息,奖励具有大多数提供有用信息以回答问题的句子的块。
对于结构化的问答评估,我们评估模型对数据集中的标准答案的准确性。我们使用标准度量标准,包括 BLEU 和 Rouge-L 得分,以及余弦相似度。然而,这些得分并不理想,无法比较两个不同答案的语义含义,因此可能具有误导性。因此,我们还使用了LLM评估的一种版本,其中我们为像GPT这样的模型使用特定提示,并要求其评估候选答案在给定标准答案的情况下的准确性。
我们还可以以非结构化的方式进一步评估生成器答案与检索到的上下文的质量。这些度量标准衡量了模型在给定上下文的情况下的响应质量。上下文忠实度是RAGAS框架提出的另一个度量标准,可以用来衡量模型的答案在给定上下文中的基础情况。它通过将答案中受上下文支持的陈述数量除以答案中的总句子数量来衡量。这个得分也可以看作是评估模型是否在没有标准答案的情况下产生虚构信息的一种方式。高忠实度得分意味着生成的答案中几乎所有句子都得到了上下文的支持,这意味着模型没有在文档之外捏造任何额外信息。
为了评估使用 RAG 的模型的性能,我们利用了由 Patronus AI 开发的面向问题和回答模型的 FinanceBench 基准测试。该基准测试包含关于美国上市公司的10,231个问题,涵盖了2015年至2023年间发布的一系列财务文件,如10K、10Q、8K和盈利报告。
FinanceBench 数据集中的每个条目包含一个问题(例如,“AMCOR在2023财年的调整后非 GAAP EBITDA是多少”)、答案(例如,“AMCOR在2023财年的调整后 EBITDA为20.18亿美元”)、证据字符串(包含验证答案所需的信息)和相关文档的页码。该数据集全面评估了 RAG 模型检索和生成准确答案的能力,突出了LLM在金融分析和决策中的实际应用潜力。
在这个实验中,我们旨在解决当前RAG管道的关键局限性,其中一些关注点有特定的技术来解决,而其他一些则更难解决。随着这一领域的研究不断进行,将会涌现更多的想法,使这些系统更加准确和稳健。我们确定的关键关注点可以被视为三个不同的类别。第一个关注点是相关上下文通常位于多个不同位置,而当前的算法只检索1或2个块。即使这些算法检索了前5-10个块,这些也不一定是人类分析师知道要查找的最相关部分的当前位置。第二个关键关注点是当前的RAG管道假定相似性等同于相关性,而这是不正确的。最后一个关注点是当前的RAG管道将事物分块在统一的部分,忽略了文档结构,可能导致某些部分不完整。
由于不断发展的人工智能领域的动态性质,我们目前不公开披露这些技术的结果。请随时联系我们的团队,我们可以根据具体情况提供结果。
通过提高检索的性能,我们提高了基于文档的问答任务整个系统的质量。通过检索正确的块,我们不仅提供更好的引用,而且从那里我们还可以提供更好的答案。这强调了强大的检索算法的重要性,因为即使是最好的生成器在没有正确上下文的情况下也会给出错误答案。我们专注于金融领域中RAG系统的用例,主要是对10-K文件的问答。然而,相同的概念也适用于医疗保健和法律技术等各行业和应用,因为它提供了一个系统框架来改进面向特定领域任务的RAG管道。我们还采用了各种评估指标来展示这些增强的rag技术如何克服一些限制。虽然每个度量标准单独不能提供完整的概述,但所有这些一起给出了系统的性能感觉,无论是否有结构化数据可用。
虽然本文探讨的技术解决了当前RAG管道中某些关键局限性,但在其他领域还有更多可以做的工作以提高性能。特别是,检索算法的一个关键挑战是当上下文跨越文档的多个部分时,模型必须找到并使用所有这些部分才能制定答案。实施知识图可能有助于检索系统做到这一点,给它们提供一组特定的指令,说明如何检索问题并根据提出的问题回答问题。另一个要探讨的技术是根据用户标记的数据对嵌入算法进行微调,以便模型更好地理解特定领域上下文中每个单词和短语的细微差别。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-05-28
2024-04-26
2024-08-21
2024-04-11
2024-07-09
2024-08-13
2024-07-18
2024-10-25
2024-07-01
2024-06-17