亚马逊 Bedrock 知识库现在支持高级解析、分块和查询重构,为基于 RAG 的应用提供更高的准确

Amazon Bedrock Knowledge Bases 推出高级解析、分块和查询重构功能

关键要点

Amazon Bedrock Knowledge Bases现支持高级解析和分块技术,以提高在基于检索增强生成RAG应用中的准确性。该平台提供了针对复杂输入文档如PDF或txt文件的处理能力,改善查询结果的质量。引入了新的功能,包括高级数据分块选项、查询分解、CSV和PDF解析改进,这将进一步增强RAG工作流的准确性和可控性。

Amazon Bedrock Knowledge Bases 是一项完全托管的服务,旨在帮助用户高效实现整个检索增强生成RAG工作流,包括数据的引入、检索和提示增强,无需构建自定义集成到数据源和管理数据流,从而拓展了RAG工作流中的潜力。

在基于RAG的应用中,处理大型或复杂的输入文本文档时,查询索引的结果可能不够理想。例如,某些文档中的部分或表格之间存在复杂的语义关系,需要更为先进的分块技术以准确表示这种关系,否则检索到的分块可能无法准确回答用户的查询。为了解决这些性能问题,用户可以控制多个因素。本文将讨论Amazon Bedrock Knowledge Bases中的新功能,这些功能将改善RAG应用中回应准确性,包括高级数据分块选项、查询分解以及CSV和PDF的解析改进。这些功能将使您能够更精准地提升RAG工作流的准确性。接下来,我们将逐一介绍这些功能及其优势。

提升RAG应用准确性的功能

在这一部分,我们将介绍Amazon Bedrock Knowledge Bases中提供的新功能,旨在提升针对用户查询的生成响应的准确性。

高级解析

高级解析是分析和提取非结构化或半结构化文档中有意义信息的过程。它涉及将文档拆分成其组成部分,如文本、表格、图像和元数据,并确定这些元素之间的关系。

在RAG应用中,解析文档十分重要,因为它使系统能够理解文档内信息的结构和上下文。

解析不同文档格式的数据有多种技术,其中一种是使用基础模型FMs来解析文档中的数据。这在处理复杂数据时尤为有效,例如嵌套表格、图像中的文本、文本的图形表示等,这些都可能包含重要信息。

使用高级解析选项带来了多个好处:

提高准确性:基础模型能够更好地理解文本的上下文和含义,从而提高信息提取和生成的准确性。适应性:这些解析器的提示可以基于特定领域的数据进行优化,使其能够适应不同的行业或用例。实体提取:可以根据您的领域和用例自定义提取实体的方式。处理复杂文档元素:能够理解并提取以图形或表格格式呈现的信息。

使用基础模型解析文档在文档复杂、非结构化或包含领域特定术语的情境下尤为有用。它们能够处理歧义、解释隐含信息,并利用其理解语义关系的能力提取相关细节,这对在RAG应用中生成准确且相关的响应至关重要。在选择解析器之前,请查看定价详情。

在Amazon Bedrock Knowledge Bases中,我们为客户提供了使用基础模型解析复杂文档如带有嵌套表格或图像中包含文本的PDF文件的选项。

在AWS管理控制台中,您可以通过选择创建知识库来开始创建知识库。在第2步:配置数据源中,在分块和解析配置下选择高级自定义,如以下图像所示。您可以选择目前可用于解析文档的两个模型之一Anthropic Claude 3 Sonnet或Haiku。

如果您希望自定义基础模型解析文档的方式,可以根据您的文档结构、领域或用例提供相关指令。

根据您的配置,数据引入过程将解析和分块文档,从而提升整体响应的准确性。接下来,让我们了解高级数据分块选项,包括语义分块和层次分块,这些都将文档拆分成较小的单元,并将分块组织存储在向量存储中,从而提升检索时的分块质量。

高级数据分块选项

数据分块的目标不应仅仅是为了分块而分块,而是为了将数据转换为有助于预期任务和高效检索的格式。与其问“我该如何分块我的数据?”,不如更相关地问“最理想的方式是什么,将数据转化为基础模型可以用以完成指定任务的形式?”[1]

为实现这一目标,我们在Amazon Bedrock Knowledge Bases中增加了两种新的数据分块选项,除了固定分块、无分块和默认分块选项外:

语义分块:基于数据的语义意义对其进行分段,确保相关信息保持在逻辑块中。通过保持上下文关系,您的RAG模型可以检索到更相关且连贯的结果。层次分块:将数据组织成层次结构,提高基于数据内在关系的更精细、高效的检索能力。

让我们深入探讨这两种技术。

语义分块

语义分块分析文本内部的关系,将其分为有意义且完整的块,这些块是根据嵌入模型计算的语义相似度得出的。这种方法在检索过程中保持信息的完整性,有助于确保准确和上下文适当的结果。

语义分块显著提升了检索的质量,应在需要保持文本语义完整性的场景中使用。

在控制台中,您可以通过选择创建知识库来开始创建知识库。在第2步:配置数据源中,在分块和解析配置下选择高级自定义,然后在分块策略下拉列表中选择语义分块,如以下图像所示。

亚马逊 Bedrock 知识库现在支持高级解析、分块和查询重构,为基于 RAG 的应用提供更高的准确

您需要配置的参数细节:

分组周围句子的最大缓冲大小:评估语义相似性时,用于分组的句子数量。如果选择缓冲大小为1,将包括前一句、目标句和后一句。建议该参数的值为1。块的最大令牌数量:文本块可以包含的最大令牌数量。根据嵌入模型的上下文长度,该值可以在20到8192之间。例如,如果您使用Cohere Embeddings模型,则块的最大大小为512。建议该参数的值为300。句子组之间相似度的断言阈值:指定按百分比阈值在语义比较时,句子组之间应有多相似。这应为50到99之间的值。建议该参数的值为95。

Amazon Bedrock Knowledge Bases首先根据指定的令牌大小将文档分块。为每个块创建嵌入,然后根据相似度阈值和缓冲大小将相似的块在嵌入空间中组合,形成新的块。因此,块的大小可能在不同块之间有所不同。这种方法比固定大小的分块更具计算复杂性,但对文档的分块尤为重要,尤其是当上下文边界不明确时,例如法律文档或技术手册。[2]

示例:

考虑一份讨论各种条款和子条款的法律文件。这些部分之间的上下文边界可能不明显,因此很难确定适当的块大小。在这种情况下,动态分块方法可能是有利的,因为它可以根据相邻句子之间的语义相似性自动识别和分组相关内容。

现在您了解了语义分块的概念以及何时使用它,接下来我们深入探讨层次分块。

层次分块

使用层次分块,您可以将数据组织成层次结构,从而基于数据的内在关系实现更细粒度且高效的检索。将数据按照层次结构进行组织,使您的RAG工作流能够有效地导航和检索复杂的嵌套数据集。

您可以通过选择创建知识库来开始创建知识库。在配置数据源时,选择高级自定义,然后在分块和解析配置下拉列表中选择层次分块,如以下图像所示。

以下是您需要配置的一些参数:

最大父块令牌大小:父块可以包含的最大令牌数量。该值可以在1到8192之间,且独立于嵌入模型的上下文长度,因为父块不需被嵌入。建议该参数的值为1500。最大子块令牌大小:子块可以包含的最大令牌数量。根据嵌入模型的上下文长度,该值可以在1到8192之间。建议该参数的值为300。块之间重叠令牌的百分比:子块之间的重叠百分比。父块的重叠依赖于您指定的子块令牌大小和子块百分比重叠。建议该参数的值为最大子块数量的20。

文档解析后的第一步是根据父块和子块的大小进行分块。然后将这些块组织成层次结构,其中父块高级别表示较大的块例如,文档或章节,而子块低级别表示较小的块例如,段落或句子。父块和子块之间的关系得以维护。这种层次结构允许高效地检索和导航语料库。

一些好处包括:

高效检索:层次结构允许更快和更具针对性的相关信息检索;首先在子块上进行语义搜索,然后在检索时返回父块。通过用父块替代子块,我们为基础模型提供更大且全面的上下文。上下文保持:以层次方式组织语料库有助于保持块之间的上下文关系,这对生成连贯且上下文相关的文本大有裨益。

注意:在层次分块中,我们返回父块,并在子块上执行语义搜索,因此,您可能会看到返回的搜索结果数量较少,因为一个父块可以有多个子块。

层次分块最适用于复杂的嵌套结构文档,例如技术手册、法律文档或具有复杂格式和嵌套表格的学术论文。您可以结合前述基础模型解析的方法来解析文档并选择层次分块,以提高生成响应的准确性。

通过在分块过程中将文档组织为层次结构,模型能够更好地理解内容不同部分之间的关系,从而提供更具有上下文相关性和连贯性的响应。

接下来,假如您希望拥有更大的灵活性,可以使用Lambda函数为块添加自定义处理逻辑,例如元数据处理或定义自定义的分块逻辑。在下一部分中,我们将讨论使用Amazon Bedrock Knowledge Bases提供的Lambda函数进行自定义处理。

使用Lambda函数进行自定义处理

对于那些寻求更多控制和灵活性的用户,Amazon Bedrock Knowledge Bases现提供使用AWS Lambda函数定义自定义处理逻辑的能力。利用Lambda函数,您可以根据RAG应用的独特需求自定义分块过程。此外,Lambda还可用于简化元数据处理,帮助开启更多提高效率和精度的可能性。

您可以开始编写具有自定义分块逻辑的Lambda函数,或者使用您最喜欢的开源框架如LangChain和LLamaIndex提供的分块方法。请确保为特定的开源框架创建Lambda层。在编写和测试完Lambda函数后,您可以通过选择创建知识库,在第2步:配置数据源中选择高级自定义,然后从选择Lambda函数下拉列表中选择相应的Lambda函数,如下图所示。

从下拉列表中,您可以选择在同一AWS区域中创建的Lambda函数,包括该函数的已验证版本。接下来,您需要提供存储输入文档的Amazon简单存储服务Amazon S3路径,以便对其运行Lambda函数并存储文档的输出。

到目前为止,我们讨论了如何使用基础模型进行高级解析以及高级数据分块选项,以提高搜索结果的质量和生成响应的准确性。在下一部分中,我们将讨论已对Amazon Bedrock Knowledge Bases添加的一些优化,以改善csv文件的解析准确性。

csv文件的元数据自定义

Amazon Bedrock Knowledge Bases现在提供增强的csv文件处理功能,能够对内容和元数据进行分离。此更新简化了引入过程,通过允许用户指定特定列作为内容字段而其他列作为元数据字段,从而减少所需文件数量,并提高了大规模csv文件数据集的管理效率。此外,元数据自定义功能提供了一种动态方法,将额外的元数据与来自csv文件的数据块一起存储。这与当前静态维护元数据的过程形成对比。

这一自定义能力为数据清洗、标准化和丰富过程开启了新可能性,使得数据增强成为可能。使用元数据自定义功能,您需要在源csv文件旁边提供元数据文件,元数据文件名应与源数据文件相同,并以ltfilenamegtcsvmetadatajson后缀结尾。以下是元数据文件内容的示例:

json{ metadataAttributes { docSpecificMetadata1 docSpecificMetadataVal1 docSpecificMetadata2 docSpecificMetadataVal2 } documentStructureConfiguration { type RECORDBASEDSTRUCTUREMETADATA recordBasedStructureMetadata { contentFields [ { fieldName String } ] metadataFieldsSpecification { fieldsToInclude [ { fieldName String } ] fieldsToExclude [ { fieldName String } ] } } }}

飞鸟加速器最新版下载

使用以下步骤来体验csv文件改进功能:

将csv文件和对应的ltfilenamegtcsvmetadatajson文件上传到相同的Amazon S3前缀中。使用控制台或Amazon Bedrock SDK创建知识库。使用控制台或SDK启动数据引入。检索API和RetrieveAndGenerate API可用于查询结构化的csv文件数据,方法是使用控制台或SDK。

查询重构

输入查询通常可能较复杂,包含多个问题和复杂关系。对于这些复杂的提示,生成的查询嵌入可能会有一定的语义稀释,导致检索到的块可能无法有效回应多方面的查询,从而降低准确性,生成的响应也不理想。

现在,通过Amazon Bedrock Knowledge Bases支持的查询重构,我们可以将复杂的输入查询拆分为多个子查询。这些子查询将分别经过检索步骤,以找到相关的块。在此过程中,语义复杂性较低的子查询可能会找到更目标导向的块。这些块随后会被聚合并排序,最后交给基础模型生成响应。

示例:考虑一个针对虚构公司Octank的财务文件的复杂查询,询问多个无关主题:

“Octank公司的滨水建筑在哪里,举报者丑闻如何损害公司及其形象?”

我们可以将查询拆分为多个子查询:

Octank滨水建筑位于何处?Octank的举报者丑闻是什么?举报者丑闻对Octank的声誉和公众形象造成了何种影响?

现在,我们拥有更有针对性的问题,有助于从知识库中检索到来自文档中更语义相关部分的块,而不会因将多个请求嵌入同一复杂查询中而导致语义稀释。

在创建知识库后,您可以在控制

发表评论

订阅我们的邮箱